VPN接続時にWSL2からネットに繋がらない問題がサクッと解決した話

VPNとWSL2

最近、wsl2上で動かしているpythonからrequests.get()を使う機会がありました。そのときに、通常時は問題なく動くものの、VPN接続時にrequests.get()から進まなくなる問題があり、少し調べたのちにサクッと解決したので、備忘録として残しておきます。

環境としては、WSL2上でVSCodeを走らせており、その中でJupyter Notebookを動かしてrequestしています。また、VPNとしてはSurfsharkを使用しています。エラー発生時はVPNのプロトコルにWireGuardを使用していました。

現状確認

VPN未使用時ではすべてネットへの接続含め正常に動いていました。
VPN接続すると、googleへのpingやdigは通っているものの、pythonのrequestsとかを使うとそこで永遠に止まってしまう状態でした。

解決

ここに解決のヒントが載っていました。リンク先にも書いてありますが、MTUが一貫していなかったことが原因でした。

この記事で行っているようなWSL2のネットワーク回りの設定変更は、今まで痛い目にあってきたので極力したくありません。MTUとか正直よくわからないし。
幸いにも私の環境でMTUを確認していたらあっさりそれ以外の解決策が見つかったので、以下私の環境で確認した際の結果を見ていきます。
ただ、かなりSpecificな問題原因と解決策なのはご了承ください。

まず、WSL2で以下のコマンド実行。MTUは1500。

XXX$ ip addr show dev eth0 | grep mtu
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

一方、コマンドプロンプト側では以下のような出力でした。

XXX>netsh interface ipv4 show interfaces

Idx     Met         MTU          状態                 名前
---  ----------  ----------  ------------  ---------------------------
  1          75  4294967295  connected     Loopback Pseudo-Interface 1
  9          25        1500  disconnected  OpenVPN Data Channel Offload for Surfshark
  8          25        1500  connected     イーサネット
 33           5        1420  connected     SurfsharkWireGuard
 29          15        1500  connected     vEthernet (WSL (Hyper-V firewall))

お分かりのように、WireGuardのほうはMTUが1420となっています。これが問題の原因でした。

どうやらOpenVPNのほうはMTUが幸いWSL2側と同じ1500だったので、Surfshark側の設定から使用プロトコルをOpenVPNに切り替えたところ、以下のような出力に変化。

XXX>netsh interface ipv4 show interfaces

Idx     Met         MTU          状態                 名前
---  ----------  ----------  ------------  ---------------------------
  1          75  4294967295  connected     Loopback Pseudo-Interface 1
  9           3        1500  connected     OpenVPN Data Channel Offload for Surfshark
  8          25        1500  connected     イーサネット
 29          15        1500  connected     vEthernet (WSL (Hyper-V firewall))

MTUもうまく設定できたようで、pythonコードのほうも万事うまくいくようになりました。

結論

WSL2、便利なように見えていつもネット接続関連で一旦躓く印象があります。大体の問題は調べると解決できはするんですがね・・・

特に/etc/resolv.conf周りはあんまりいじりたくないので、サクッと解決してよかったです。

コメント

タイトルとURLをコピーしました