一部のセキュリティ対策ソフトウェアがインストールされている環境では、WSL2 からインターネットアクセスできないことがあります。ファイアウォールの設定で除外することがベストですが、WSL2 はその特異さから相性が悪い製品・環境も存在します。1
WSL2 の主な用途は開発環境の構築でしょうから、いまどきスタンドアローンなのは辛すぎます。どうにかしたいですね。
ローカル HTTP プロキシを利用する
そんなときは、stone や Squid for Windows などを利用してローカル HTTP プロキシを立てることで問題を回避できる可能性があります。まず、Windows 側でプロキシサーバを起動します。
# Windows 側の 3128 ポートでプロキシを起動
stone proxy 3128
この状態で、HTTP プロキシとして Windows 側の 3128 ポートを参照するとインターネットと通信できるようになります。環境変数を設定してあげましょう。2 3
proxyAddress=$(ip route | grep 'default via' | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
proxyPort=3128
export http_proxy="http://${proxyAddress}:${proxyPort}"
export https_proxy="http://${proxyAddress}:${proxyPort}"
export HTTP_PROXY=${http_proxy}
export HTTPS_PROXY=${https_proxy}
WSL2 から Windows 側にアクセス可能な IP アドレスは localhost
で引けないので、デフォルトルートとして指定されている IP アドレスを参照し動的に設定します。この IP アドレスは Windows を再起動するたびに再作成される WSL2 用の仮想アダプタのものなので、静的に設定するべきではありません。
参考リンク
- WSL2側からWindows側のIPアドレスを調べる方法
- devcontainer.json not loading custom localEnv values correctly using WSL2
- Linuxがほぼそのまま動くようになった「WSL2」のネットワーク機能