KUSONEKOの見る世界

Free Wi-Fi で VPN通信ができない場合の対処法

某ファミレスにて、無料で使用できるWi-Fiに接続して、VPN接続し、リモート作業をしようとした。
以前までは使えていたはずなのに、なぜか使えなくなっている。

具体的な状況は以下のとおり。

  • VPN接続(IKEv2)は可能 
  • VPN接続後、SSHでサーバに接続しようしても、シェルが出てこない
  • VPN接続後、リモートデスクトップすると繋がっているが、画面が黒いまま

以上から、VPN接続後のTCPセッションは張れるが、その後の通信が出来ていない、サイズの小さいパケットは通るが、大きいパケットが通らないと推察される。
つまり、MTUが小さい可能性がある。

この状況での対処方法を記載する。

MTUの調査

まずは無料Wi-Fiの回線のMTUを調査する。

調査方法としては、以下の方法がある。

  • 以下のサイトにアクセスし、MTU確認する
    https://www.speedguide.net/analyzer.php
  • コマンドプロンプトのPingでパケットサイズ指定を変えながら、応答がある最大のサイズを探す。
    > ping www.yahoo.co.jp -f -l 1090
    その値に+28した値がMTUである。
    この例では、1118となる。

某ファミレスでは、このMTUが1118となっていた。

イーサネットは通常1500、フレッツのPPPoEは1454であるため、このMTUは非常に小さい値である。

途中経路で暗号化をしているなどで、MTUが減ることは仕方が無いが、ここまで小さいと、わざと潰して、ネットワークを使用するゲームやテレワークをさせないためでは無いかと勘ぐってしまう。(回線業者側の都合か店側の都合か。でも電源完備の店ため、それは無いとは思うが)

ちなみにWindowsのリモートデスクトップは、UDP接続でも1300程度必要になる。

RDPで最近知ったこと - MTUと3-way UDP handshake

WindowsのRDPについて調べていて分かったことを記載しました。

VPNの最適MTUの算出

以下の計算機を使い、MTUからVPNに最適なMTUを算出する。

IPsec 備忘録

IPsecパケットのフォーマットと最適MTUの計算方法をまとめ、計算機を作成しました。最適MTUを設定することでVPNが快適になるかもしれません。

インターネット/回線の種類:手動入力/Custom
暗号化方式:お使いの物を選択(私はAES-GCM)
完全性アルゴリズム:お使いの物を選択(私はAES-GCM with a 16 octes ICV)
方式:お使いの物を選択(私はIKEv2のため、Remote Access Client)
NAT traversal:NATの内側にいるためチェック
インターネット回線/WAN MTU:1118
Calculateボタンを押す

私の場合は、最適 (Optimal) MTUが、1054となった。

VPNインターフェースMTUの変更

WindowsのVPNインターフェースのMTUを最適MTUに変更する。

  1. VPN接続をする(VPNインターフェースを出すため)
  2. 管理者権限でコマンドプロンプトを立ち上げる
  3. 以下を実行し、VPNのIdxを確認(名前は環境により変わります)
    > netsh interface ipv4 show interface
    Idx     Met         MTU          状態                 名前
    ---  ----------  ----------  ------------  ---------------------------
     51          35        1400  connected     VPN
      1          75  4294967295  connected     Loopback Pseudo-Interface 1
     14          50        1500  connected     Wi-Fi 2
  4. 対象のVPNインターフェースに最適MTUを設定
    > netsh interface ipv4 set interface 51 mtu=1054
    OK
  5. 反映を確認
    > netsh interface ipv4 show interface
    Idx     Met         MTU          状態                 名前
    ---  ----------  ----------  ------------  ---------------------------
     51          35        1054  connected     VPN
      1          75  4294967295  connected     Loopback Pseudo-Interface 1
     14          50        1500  connected     Wi-Fi 2
  6. 念のためVPNを接続し直す

これで設定したMTU以下で通信が行われ、VPN接続先に通信ができるようなった。

iPhoneやAndroidの場合は、MTUを指定できないため、途中経路のルータやVPNサーバのiptables/nftables等でTCPのMSSを書き換える必要がある。

VPN通信のMTU, MSSを指定する方法

VPNでMTUとMSSを指定するにはどうすれば良いかを書いています。

CentOS 8 で nftables を設定してみた

CentOS 8 でnftablesを設定しました。日本(国内)からのトラフィックのみを許可、VPNのMTU/MSS最適化もしてみました。