如何从 WSL2 访问主机上的 http 服务器?

如何从 WSL2 访问主机上的 http 服务器?

我有一个在 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 访问主机的任何内容吗?如果没有,我应该如何调试它?

相关内容