Posted at

WSL2がWindowsからlocalhostで接続できるようになる


WSL2がWindowsからlocalhostで接続できるようになる


1.今までのWSL

 Windows 10 Insider Preview Build 18945 によって、WSL2がWindows側からlocalhost接続を受け入れるようになりました。それ以前のバージョンではコロコロ変わるIPアドレスによって、httpやssh接続の際に面倒な確認作業が生じていました。

 私は対処法としてWSL2のコロコロ変わるIPをMyDNSで何とかするで書いた記事の通り、プライベートIPをMyDNSに通知して、ドメイン名で接続するように対処をしていました。しかしもうそんな必要はありません。localhostで接続できるようになったのです。


2.NICの状態

 まず、基本的なネットワークの仕組みは以前のバージョンから変化していません。

Windows側で生成される仮想NIC

イーサネット アダプター vEthernet (WSL):

接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::b562:8151:888c:3033%37
IPv4 アドレス . . . . . . . . . . . .: 172.27.176.1
サブネット マスク . . . . . . . . . .: 255.255.240.0
デフォルト ゲートウェイ . . . . . . .:

Linux側のNICの状態

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether de:50:74:6e:56:5c brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 76:c0:1f:cc:27:f3 brd ff:ff:ff:ff:ff:ff
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:9d:b5:ff brd ff:ff:ff:ff:ff:ff
inet 172.27.191.103/16 brd 172.27.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe9d:b5ff/64 scope link
valid_lft forever preferred_lft forever
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0

 以前と同じようのプライベートIPが割り当てられており、Linuxから外へ出る場合はeth0を経由する形になります。


localhostの検証


  • WindowsのWSL2仮想NICを無効化してみた結果


    WindowsからLinuxへのlocalhost接続は生きたままです。

    しかしLinuxから外部ネットワークへの接続は不可能になります。


  • LinuxからWindowsへのlocalhost接続


    出来ません。現時点ではWindowsがlocalhostに対して、LinuxへのNATのような動作をしていると思われます。

    そのため逆は出来ません。

    今後のバージョンで対応される可能性があります。



WSL2を使うときに便利なbat

 全然話は変わりますがWSLの再起動ごとに、sshやWebサーバの起動が面倒だという人のためのおすすめbatファイルがこれです。


wsl_start.bat

start /b wsl -u root ^

for file in `\find /etc/rc3.d/* -maxdepth 1`; do $file start; done

 RunLevel3の起動スクリプトを実行するBATです。これをWindowsから使えばsystemctlで有効化したサービスを起動することが出来ます。


まとめ

 今回のネットワーク問題の改善により、WSL2がかなり使いやすくなりました。起動が速く軽量なので、実験環境としては有用になりました。今後のバージョンアップでどういう進化を遂げていくのかが楽しみです。ところで7月末の「Docker Desktop for WSL 2」はどうなったんでしょう?