UTokyo VPN下におけるWSL2からgithubやclaude codeにアクセスする
UTokyo VPNは東京大学が提供する公式VPNです。これを用いることで、家にいながら東大内であるかのようにネットワークにアクセスできます。Cisco AnyConnectというソフトウェアを用いてUTokyo Accountを用いて認証を行います。
UTokyo VPNは大変便利ですが、windows上でUTokyo VPNに接続すると、WSL2中でgithubコマンド(git pullなど)が使えなくなり、またclaude codeなども使えなくなるという大問題があります。本ブログではこの原因と解決策を説明します。
原因
AnyConnectはVPN接続時にWindowsのルーティングテーブルを書き換え、すべての通信をVPNトンネル経由にします。しかしWSL2はHyper-Vの仮想スイッチを通じて Windows のネットワークスタックに接続しており、AnyConnectはこの仮想スイッチからのトラフィックをトンネルに乗せません(あるいはブロックします)。
これを解決するために、wsl-vpnkitを用いてWSL2からのルーティングを修正します。
初回インストール(一度だけ)
WSL2のターミナルで以下を順に実行します。
# 1. wsl-vpnkit をダウンロード
curl -L -o /tmp/wsl-vpnkit.tar.gz \
"https://github.com/sakai135/wsl-vpnkit/releases/latest/download/wsl-vpnkit.tar.gz"
# 2. Windows の一時フォルダにコピー
WINTEMP=$(powershell.exe -Command '$env:TEMP' | tr -d '\r')
cp /tmp/wsl-vpnkit.tar.gz "$(wslpath "$WINTEMP")/wsl-vpnkit.tar.gz"
# 3. WSL2 ディストロとして登録
WINHOME=$(powershell.exe -Command '$env:USERPROFILE' | tr -d '\r')
wsl.exe --import wsl-vpnkit "${WINHOME}\wsl-vpnkit" "${WINTEMP}\wsl-vpnkit.tar.gz" --version 2
# 4. 登録確認(一覧に wsl-vpnkit が出ればOK)
wsl.exe --list
コマンド準備(一度だけ)
wsl-vpnkitを実行するコマンドをまとめてstartvpnというエイリアを作っておきます。これを~/.bashrcに追加します。これは一度だけ行います。
echo "alias startvpn='wsl.exe -d wsl-vpnkit --cd / -- /app/wsl-vpnkit > /dev/null 2>&1 &'" >> ~/.bashrc
source ~/.bashrc
通常起動(VPN接続するたびに実行する手順)
- Windows上で、AnyConnectでUTokyo VPNに接続します。
- WSL2のターミナルで
startvpnコマンドを1回だけ 実行します。
startvpn
# 接続確認(200 が返れば成功)
sleep 3 && curl -s -o /dev/null -w "%{http_code}\n" https://github.com
以降はそのまま git push や claude コマンドが使えます。
ポイント:
wsl-vpnkitはWSL2全体に作用する、他のターミナルを新しく開いても再実行不要です。- WSL2が完全終了(PC再起動や
wsl --shutdown)するまで有効です。
削除方法
もし上記の全てをやめて削除したいときは以下のようにします。
# WSL2 ディストロを削除(これだけで完全に消える)
wsl.exe --unregister wsl-vpnkit
# インストール先フォルダも消す場合は Windows エクスプローラーで削除
# 場所: C:\Users\<ユーザー名>\wsl-vpnkit\