前提:構成
- 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