LoginSignup
1
1

More than 1 year has passed since last update.

VPN利用時にWSLから外部SSLへの接続が確立できない場合の対処

Posted at

前提:構成

  • Windows10
  • WSL2 カーネルバージョン 5.10.102.1
  • Ubuntu 20.04.4 LTS
  • docker-ce 20.10.14 ※docker desktopは未使用

事象

WSL上で稀に一部URLへアクセスできない場合が発生する

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg
 curl: (35) OpenSSL SSL_connect: 接続が相手からリセットされました in connection to download.docker.com:443

原因

自分のとこのVPNに接続した場合に MTU の値が
小さくなっていたが、WSL側にそれが伝搬されていないのが原因っぽい

c:\>netsh.exe interface ipv4 show subinterfaces

   MTU  MediaSenseState  受信バイト   送信バイト  インターフェイス
------  ---------------  -----------  ----------  -----------------
  1200                1  190906226   24442368  VPN
  1500                1  1559306163  204611796  Wi-Fi
  1500                1    7174232  304467918  vEthernet (WSL)

対応

WSLのターミナル起動時に、MTU値を取得して動的にWSL側のI/Fに設定するようにした

/etc/profile.d/network-env.sh
#!/usr/bin/env bash
CMDNETSH="/mnt/c/WINDOWS/system32/netsh.exe"
MTU=$($CMDNETSH interface ipv4 show subinterfaces | grep VPN | head -1 | awk '{print $1}')
if [ "$MTU" == "" ]; then # VPN接続していない場合
  MTU=$($CMDNETSH interface ipv4 show subinterfaces | grep "vEthernet (WSL)" | head -1 | awk '{print $1}')
fi
export MTU # ※後述
if [ "${MTU}" != "" ]; then # eth0のMTU値を変更する
  sudo ip link set eth0 mtu $MTU
fi

追加対応

この設定をdockerのコンテナにも適用するため、docker-compose.ymlに下記を追加
この設定の為、先のshell(network-env.sh)内で export MTU してる

networks:
  default:
    driver_opts:
      com.docker.network.driver.mtu: ${MTU}

参考にしたサイト

https://ydkk.hateblo.jp/entry/2020/12/06/150914
https://github.com/microsoft/WSL/issues/4517#issuecomment-628701283

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1