WSL2を立ち上げた状態でLinux側からインターネットに通信しようとすると、下のようなエラーが発生し、WSLからインターネットへ拔けることができなくなることがあります。
$ ping 8.8.8.8
ping: connect: ネットワークに届きません
本来、WSL2を起動した時点でホスト側にある仮想ネットワークと自動でバインドされるはずなのですが、このバインドがうまく行かないと接続不良を引き起こします。
Linux内で次のコマンドを実行すると、ネットワークの状態を確認できます。
ip addr show
ここで、”eth0″インターフェースがうまく接続できていない場合、接続できていないインターフェイスの部分に”DOWN”と表示されます。
...
5: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 00:15:5d:f1:d1:dc brd ff:ff:ff:ff:ff:ff
...
DOWNとなている、もしくはIPアドレスが割り当てられていないように見える場合は、まず、単純にインターフェイスをUPして通信できるか試します。
sudo ip l set eth0 up
上記コマンド実行後、再び ip addr show コマンドを実行し、eth0にIPアドレスが割り当てられた場合はとりあえず解決となります。
しかし、コマンドを実行しても、DOWNのママになってしまう場合は、次の方法で手動でネットワーク設定を行うことで解消できます。
まず、ホストのWindows側のコマンドプロンプトを開き、次のコマンドを入力します。
ipconfig
すると、ネットワーク一覧の中に、”(WSL)”と表記のあるアダプタが出てきます。
...
イーサネット アダプター vEthernet (WSL):
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::8a8:b737:7b13:19c3%75
IPv4 アドレス . . . . . . . . . . . .: 172.17.224.1
サブネット マスク . . . . . . . . . .: 255.255.240.0
デフォルト ゲートウェイ . . . . . . .:
...
上記の情報の中の”IPv4 アドレス”の項目にあるIPアドレス(例では 172.17.224.1)を元にして、WSL上のLinuxに次のように指定します。
sudo ip address add 172.17.224.10/20 broadcast 172.17.224.255 dev eth0
sudo ip route add default via 172.17.224.1
これで設定は完了です。
再び ip addr show コマンドを実行すると下記のようになっているかと思います。
...
5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:f1:d1:dc brd ff:ff:ff:ff:ff:ff
inet 172.17.225.108/20 brd 172.17.239.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fef1:d1dc/64 scope link
valid_lft forever preferred_lft forever
...
これでとりあえずネットワーク通信はできるようになったかと思います。
ただし、今回ご紹介したのは飽くまで対症療法であり、WSL上のLinuxを開きなおすと設定は消えてしまいます。
次回の起動以降も引き続き不具合が続くようであれば、根本的な解決策が必要となりますのでご注意ください。
参考: