WSL2では、インストールしたUbuntuが仮想マシンとして稼働し、ホストとは別のIPアドレスを有します。そのため、ホスト(Windows)からWSL2(Ubuntu)で動くソフトウェアをつつく際、WSL2のIPアドレスを指定する必要がある場合があります。
では、WSL2のIPアドレスはどのように確認すればよいでしょうか?
なお、以下記事のように.wslconfig
を設定してやると、WSL2上で稼働するソフトウェアにlocalhost
でアクセスできるようになるのですが、少なくとも自分の環境では、.wslconfig
がなぜかうまく動かなかったり、ホスト側のソフトウェアがlocalhost
をうまく解決できなかったりする場合があります。本記事はそういうケースで役に立つ想定です。
「「WSL 2」最大の課題であった“localhost”問題が解決 ~「Windows 10」Build 18945」
確認方法1: ipコマンドを使う
Ubuntu上でip a
コマンドを実行します。
$ ip a
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 0e:35:94:f5:06:c9 brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether a6:87:9b:57:13:5f brd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:06:d3:8a brd ff:ff:ff:ff:ff:ff
inet 172.18.14.158/20 brd 172.18.15.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe06:d38a/64 scope link
valid_lft forever preferred_lft forever
実行結果のうち、eth0
のinetが取得したいWSL2のIPアドレスになります。上記であれば172.18.14.158
が対象のIPアドレスです。
eth0
のみを決め打ちで取得したいのであればip a show dev eth0
とすることもできます。
$ ip a show dev eth0
5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:06:d3:8a brd ff:ff:ff:ff:ff:ff
inet 172.18.14.158/20 brd 172.18.15.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe06:d38a/64 scope link
valid_lft forever preferred_lft forever
確認方法2: hostnameコマンドを使う
ipコマンドを利用すると、たくさんの情報が出力されてしまうので、スクリプトでIPアドレスを取り出す場合などはやや不便です。こういう場合はhostname -I
を利用するとよいでしょう。
$ hostname -I
172.18.14.158
対象のIPアドレスだけが取得できていることがわかります。ただしhostname
コマンドにはあぶなかっしい側面もあるので、注意して使いましょう。
参考記事: 【Linux】インフラエンジニアの僕が「hostname」コマンドを使わない理由とは?
ホスト側からIPアドレスを取得したい
確認方法1、確認方法2は両方ともUbuntuのコンソールにコマンドを打ち込む想定でしたが、ホスト側のcmdやPowerShellからWSL2側のIPアドレスを取得したい場合は、wsl -e
コマンドを利用するとよいでしょう。-e
オプションは指定したコマンドをWSL2上で実行します。たとえば、確認方法2であれば以下のようになるはずです。
C:\> wsl -e hostname -I
172.18.14.158
注意点
ここで取得できたIPアドレスは固定ではないため、Ubuntuを起動するたびに変わる可能性があります。
環境情報
- Microsoft Windows [Version 10.0.19041.388]
- Ubuntu 20.04 LTS