我有一个在 Windows 主机上运行的 python http.server:
C:\> python3 -m http.server 8000
该主机有两个IP地址:
C:\> ipconfig
Ethernet adapter vEthernet (WSL):
IPv4 Address. . . . . . . . . . . : 172.28.224.1
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Wireless LAN adapter WLAN:
IPv4 Address. . . . . . . . . . . : 123.123.123.123
可以通过主机本身的 ip 和 localhost 来访问 http 服务器:
C:\> curl 123.123.123.123:8000
StatusCode : 200
StatusDescription : OK
Content : <!DOCTYPE HTML>
<html lang="en">
...
C:\> curl 172.28.224.1:8000
StatusCode : 200
StatusDescription : OK
Content : <!DOCTYPE HTML>
<html lang="en">
...
C:\> curl 127.0.0.1:8000
StatusCode : 200
StatusDescription : OK
Content : <!DOCTYPE HTML>
<html lang="en">
...
但是我无法从 WSL2 内部访问 http 服务器,即使可以 ping 通主机:
~$ curl 172.28.224.1:8000
(hanging)
~$ ping 172.28.224.1
PING 172.28.224.1 (172.28.224.1) 56(84) bytes of data.
64 bytes from 172.28.224.1: icmp_seq=1 ttl=128 time=0.967 ms
64 bytes from 172.28.224.1: icmp_seq=2 ttl=128 time=1.77 ms
...
我已经设置了一些防火墙规则:
C:\> New-NetFirewallRule -DisplayName WSL -InterfaceAlias "vEthernet (WSL)" -Direction Inbound -Action Allow -Protocol TCP
C:\> New-NetFirewallRule -DisplayName WSL -InterfaceAlias "vEthernet (WSL)" -Direction Outbound -Action Allow -Protocol TCP
C:\> New-NetFirewallRule -DisplayName wsl -Direction Inbound -LocalPort 8000 -Action Allow -Protocol TCP
C:\> New-NetFirewallRule -DisplayName wsl -Direction Outbound -LocalPort 8000 -Action Allow -Protocol TCP
从 WSL2 转发到主机上的 127.0.0.1 也不起作用:
C:\> netsh int por add v4tov4 8000 127.0.0.1 8000 172.28.224.1
~$ curl 172.28.224.1:8000
(hanging)
有人知道我是否遗漏了从 WSL2 访问主机的任何内容吗?如果没有,我应该如何调试它?