@ledsun blog

無味の味は佳境に入らざればすなわち知れず

WSL向けのWindowsポートフォワード設定スクリプトが動かなくなった

WSL向けのWindowsポートフォワード設定をスクリプト化する - @ledsun blog が動きませんでした。

バッチファイルを起動したところ

パッとみ気が付きませんでしたが、netsh interface portproxy add v4tov4 listenport=8000 connectaddress=は途中で途切れています。 正しくは次のように、connectaddresのあとにWSLのIPアドレスが続き、さらにconnectportパラメータが続く必要があります。

netsh.exe interface portproxy add v4tov4 listenport=8000  connectaddress=172.25.143.70 connectport=8000

バッチファイルの全文は以下です。

FOR /F "usebackq" %%i in (`wsl exec hostname -I`) DO @SET IP=%%i
netsh interface portproxy add v4tov4 listenport=8000 connectaddress=%IP%
netsh.exe interface portproxy show v4tov4

netsh interface ip show address | findstr "IP Address"
pause

netsh.exe interface portproxy delete v4tov4 8000
netsh.exe interface portproxy show v4tov4

このうち上手く行っていないのは、最初の行のwsl exec hostname -Iです。 これだけを実行すると次のように沢山のIPアドレスが表示されます。

C:\Windows\System32>wsl exec hostname -I
172.25.143.70 172.19.0.1 172.23.0.1 172.20.0.1 172.24.0.1 172.18.0.1 172.21.0.1 172.22.0.1 172.17.0.1

どういうことでしょうか? WSL側でIPアドレスを確認してみましょう。

ledsun@MSI:/m/c/U/led_l►ip addr                                                                                                                  20:40
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:5d:00:29 brd ff:ff:ff:ff:ff:ff
    inet 172.25.143.70/20 brd 172.25.143.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe5d:29/64 scope link
       valid_lft forever preferred_lft forever
3: br-ca29cad65f14: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:29:38:75:78 brd ff:ff:ff:ff:ff:ff
    inet 172.24.0.1/16 brd 172.24.255.255 scope global br-ca29cad65f14
       valid_lft forever preferred_lft forever
4: br-e8b0de7f1b72: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:8f:c5:a4:21 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-e8b0de7f1b72
       valid_lft forever preferred_lft forever
5: br-f8b610f612b1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:5c:30:4b:23 brd ff:ff:ff:ff:ff:ff
    inet 172.21.0.1/16 brd 172.21.255.255 scope global br-f8b610f612b1
       valid_lft forever preferred_lft forever
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:f8:ed:2b:a4 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
7: br-543258e3ee83: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:b8:24:bc:b8 brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.1/16 brd 172.22.255.255 scope global br-543258e3ee83
       valid_lft forever preferred_lft forever
8: br-7dfb510f7ade: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:42:89:28:64 brd ff:ff:ff:ff:ff:ff
    inet 172.19.0.1/16 brd 172.19.255.255 scope global br-7dfb510f7ade
       valid_lft forever preferred_lft forever
9: br-93389832bec3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:3c:0e:c8:07 brd ff:ff:ff:ff:ff:ff
    inet 172.23.0.1/16 brd 172.23.255.255 scope global br-93389832bec3
       valid_lft forever preferred_lft forever
10: br-998f0cb53ef4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:58:94:61:57 brd ff:ff:ff:ff:ff:ff
    inet 172.20.0.1/16 brd 172.20.255.255 scope global br-998f0cb53ef4
       valid_lft forever preferred_lft forever

実際、沢山出てきます。 WSL上で動かしているWebアプリケーションを外部から参照する - @ledsun blog で試したときは1つのIPアドレスが得られていました。 何が変わったのでしょうか? ChatGPTにネットワークインターフェースについて質問してみました。

WSL Docker Network Interface

br-998f0cb53ef4 はDockerに関連したネットワークインターフェースの名前です。具体的には、Dockerが作成するブリッジネットワークのインターフェースの名前の一例として見られます。

なるほど、そういえばWSLにDockerをインストールした記憶があります。