OpenVPNでsamba経由の通信が遅い場合の対処法です。
今回はMTUの値を調整するため、fragment、mssfixオプションを使用して解決します。
MTUとは
MTUとは、(Maximum Transmission Unit)の略でネットワークで一回に送信できるデータの最大サイズのことを指します。
ネットワークを流れるパケットは、MTUで定められた最大サイズに分割して送信されます。
送信側のサイズよりも受信側のサイズが小さいと受信できず、受信側のMTUに合わせて再分割されたうえで再送信されます。
この再分割時に通信エラーや通信速度の遅延が起こります。
OpenVPNではMTUで定められた値に加え、OpenVPN用のヘッダーが付加されます。
そのため、パケットサイズ+OpenVPNヘッダーサイズがMTUを超えない様に設定し、エラーや遅延を起こりにくくします。
MSSとは
MSSとは、最大セグメントサイズ(Maximum Segment Size)のことです。TCP通信において一回に受信できるデータの最大サイズを指します。
MSSは、MTUからTCP/IPヘッダーの40バイトをマイナスした値となります。
MSS = MTU – 40
サーバー側の設定
CentOS7にて。
通常の設定に加え、以下の項目を追加します。
編集ファイル /etc/openvpn/server.conf
tun-mtu 1500 fragment 1300 mssfix
tun-mtu
tunデバイスのMTUサイズを指定します。(デフォルト値:1500)。
デフォルトの1500で動作させておき、MTUの調整にはfragmentオプションやmssfixオプションを使用することが推奨されています。
fragment
UDPパケットの最大サイズを指定します。環境に応じて最適なMTU値を調べて記載します。
fragmentオプションはUDPプロトコル(–proto udp)を使用している場合にのみ有効です。
mssfix
OpenVPNでは、MTU値を元にMSSという値を設定する必要があります。MSSの設定にはmssfixを使用します。
MSSとは、OpenVPNによるカプセル化後、トンネル上を流れるUDPパケットの最大サイズのことです。(デフォルト値:1450)。
fragmentオプションとmssfixオプションを同時に使用する場合、mssfixはfragmentから自動的にパラメータを取得します。
そのため、fragmentと同時に使用する場合、mssfixに値を設定する必要はありません。
クライアント側の設定
通常の設定に加え、以下の項目を追加。つまり、サーバー側と設定を合わせるということ。
注意点として、クライアント側のアプリがfragmentに対応していない場合は記載しないこと。iphoneやAndroidのOpenVPNアプリなどが該当します。
編集ファイル C:\Program Files\OpenVPN\config\client.ovpn
または
編集ファイル C:\Program Files\[Username]\OpenVPN\config\client.ovpn
tun-mtu 1500 fragment 1300 mssfix
コメント