LoginSignup
35
21

More than 3 years have passed since last update.

WSL2/UbuntuのIPアドレスを取得したい

Last updated at Posted at 2020-08-12

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
35
21
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
21