Hyper-V:将来宾上运行的 Xdebug 调试器连接到主机上的调试客户端



使用Vagrant,我在Hyper-V中运行了一个带有PHP-FPM和Xdebug 2的Ubuntu盒子。我正在使用的网络是Hyper-V的默认交换机。

从我的主机,我可以使用SSH连接到Ubuntu盒子,并且还可以使用浏览器地址栏中的VM地址访问Web服务器。从 VM 内部,我可以访问互联网,还可以通过 Hyper-V 默认交换机的 IP 地址 ping 主机。因此,网络似乎设置正确。

但是,在 VM 中运行的 Xdebug 调试器不会连接到在我的主机上运行的 IDE (PhpStorm)。

xdebug.log显示(172.17.96.1是Hyper-V默认交换机的IP地址)

[2641] Log opened at 2022-09-15 12:59:46
[2641] I: Checking remote connect back address.
[2641] I: Checking header 'HTTP_X_FORWARDED_FOR'.
[2641] I: Checking header 'REMOTE_ADDR'.
[2641] I: Remote address found, connecting to 172.17.96.1:9000.
[2645] E: Time-out connecting to client (Waited: 200 ms). :-(
[2645] Log closed at 2022-09-15 12:59:46

即使我的主机上的 PhpStorm 似乎正在监听每个 IP 地址:

PS C:Usersme> netstat -a
Active Connections
Proto  Local Address          Foreign Address        State
...
TCP    0.0.0.0:9000           MyLaptop:0        LISTENING
TCP    0.0.0.0:9003           MyLaptop:0        LISTENING
...

如果我在 VM 中使用 telnet 连接到我的主机,它不会超时,但也不会成功连接:

vagrant@ubuntu-18:~$ telnet 172.17.96.1 9000
Trying 172.17.96.1...

它永远停留在"尝试"状态。

如何使 Xdebug 调试器从 VM 连接到主机上的 PhpStorm?

>Edit 以包括我的主机和来宾的界面

我的主机上的 ipconfig

我在 WiFi 适配器上缩短了我的 IPv6 地址

PS C:WINDOWSsystem32> ipconfig
Windows IP Configuration

Ethernet adapter VirtualBox Host-Only Network:
Connection-specific DNS Suffix  . :
Link-local IPv6 Address . . . . . : fe80::84b9:f362:fa7f:ae2d%13
IPv4 Address. . . . . . . . . . . : 192.168.56.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
Unknown adapter Local Area Connection:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix  . :
Wireless LAN adapter Local Area Connection* 1:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix  . :
Wireless LAN adapter Local Area Connection* 10:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix  . :
Wireless LAN adapter WiFi:
Connection-specific DNS Suffix  . : speedport.ip
IPv6 Address. . . . . . . . . . . : 2003:**********
Temporary IPv6 Address. . . . . . : 2003:**********
Link-local IPv6 Address . . . . . : fe80::bc1a:df06:b465:974b%24
IPv4 Address. . . . . . . . . . . : 192.168.2.200
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : fe80::1%24
192.168.2.1
Ethernet adapter Bluetooth Network Connection:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix  . :
Ethernet adapter vEthernet (Default Switch):
Connection-specific DNS Suffix  . :
Link-local IPv6 Address . . . . . : fe80::99ae:3e6e:68bc:a228%30
IPv4 Address. . . . . . . . . . . : 172.17.96.1
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Default Gateway . . . . . . . . . :
Ethernet adapter vEthernet (WSL):
Connection-specific DNS Suffix  . :
Link-local IPv6 Address . . . . . : fe80::41c8:f5fb:fbd4:3bef%60
IPv4 Address. . . . . . . . . . . : 172.19.32.1
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Default Gateway . . . . . . . . . :

虚拟机中的接口配置

vagrant@ubuntu-18:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 172.17.111.24  netmask 255.255.240.0  broadcast 172.17.111.255
inet6 fe80::215:5dff:fe38:101  prefixlen 64  scopeid 0x20<link>
ether 00:15:5d:38:01:01  txqueuelen 1000  (Ethernet)
RX packets 651  bytes 102218 (102.2 KB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 757  bytes 118391 (118.3 KB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10<host>
loop  txqueuelen 1000  (Local Loopback)
RX packets 90  bytes 7020 (7.0 KB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 90  bytes 7020 (7.0 KB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

从虚拟机内部对默认交换机 IP 执行 ping 操作

vagrant@ubuntu-18:~$ ping 172.17.96.1
PING 172.17.96.1 (172.17.96.1) 56(84) bytes of data.
64 bytes from 172.17.96.1: icmp_seq=1 ttl=128 time=0.294 ms
64 bytes from 172.17.96.1: icmp_seq=2 ttl=128 time=0.527 ms
64 bytes from 172.17.96.1: icmp_seq=3 ttl=128 time=0.366 ms
64 bytes from 172.17.96.1: icmp_seq=4 ttl=128 time=0.526 ms
64 bytes from 172.17.96.1: icmp_seq=5 ttl=128 time=0.704 ms
64 bytes from 172.17.96.1: icmp_seq=6 ttl=128 time=0.375 ms
^C
--- 172.17.96.1 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5125ms
rtt min/avg/max/mdev = 0.294/0.465/0.704/0.137 ms

我正在运行一个带有PHP-FPM和Xdebug 2的Ubuntu盒子

不再支持 Xdebug 2,请升级到 Xdebug 3。

xdebug.log显示(172.17.96.1是Hyper-V默认交换机的IP地址)

事实并非如此,它显示从中发起 HTTP 请求的 IP 地址,因为您启用了远程 IP 地址发现。这并非在所有情况下都有效,尤其是在虚拟化方面。此 HTTP 地址不一定是 Linux 客户机可以在主机上与之通信的 IP 地址。

您可能需要使用主机的公共 IP 地址,该地址192.168.2.200xdebug.remote_host

Wireless LAN adapter WiFi:
Connection-specific DNS Suffix  . : speedport.ip
…
IPv4 Address. . . . . . . . . . . : 192.168.2.200

并且还禁用自动发现。

最新更新