我正在使用 VM Player 4.0.2 在 WinXP 主机上运行 Ubuntu 11.10 客户操作系统,并具有 NAT 网络连接配置。
我有一个在 Win XP 上运行的应用程序,它使用服务器地址 127.0.0.1:4401 上的 TCP 套接字与设备管理器服务进行通信。我希望设备服务在 VM Guest OS(Ubuntu)上运行,并且仍然能够与主机 OS 上的应用程序进行通信。
我能够使用主机 NIC 的 IP 地址 (192.168.1.100) 访问主机操作系统的本地主机。但如果我使用 127.0.0.1,则不起作用。看来数据包被客户操作系统的环回 lo 消耗了。
Win 主机设置:
Windows IP Configuration
Ethernet adapter VMware Network Adapter VMnet8:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.59.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
Ethernet adapter VMware Network Adapter VMnet1:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.48.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
Ethernet adapter LoopBack:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.1.121
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.2
Ethernet adapter EtherLAN:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.1.100
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
Ubuntu 客户操作系统设置:
eth0 Link encap:Ethernet HWaddr 00:0c:29:5f:4f:c1
inet addr:192.168.59.129 Bcast:192.168.59.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe5f:4fc1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6108 errors:0 dropped:0 overruns:0 frame:0
TX packets:4745 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6638533 (6.6 MB) TX bytes:371359 (371.3 KB)
Interrupt:19 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:42 errors:0 dropped:0 overruns:0 frame:0
TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2916 (2.9 KB) TX bytes:2916 (2.9 KB)
有人能告诉我这是否可行以及推荐的设置方法是什么?
我已经在 VM 上安装了 openssh-server 并且正在监听
rootuser@ubuntu:~$ sudo netstat -tap | grep sshd
tcp 0 0 *:ssh *:* LISTEN 3469/sshd
答案1
您可以将虚拟机视为与物理机器相同。环回范围 127.xxx 不会以任何方式路由,因此只能从配置它们的机器访问。这是 IP 规范的一部分和保证,从配置 127.xxx 地址的设备以外的设备访问 127.xxx 地址需要非常糟糕的 IP 实现,因此您不会轻易找到它。
由于我们可以将虚拟机视为与物理机相同,因此它与主机是分开的,因此无法在其主机上访问 127.0.0.1 地址。
您的选择是更改服务的配置,以便它监听可路由的 IP 地址,例如其接口接口地址。
另一个选项是通过 ssh 使用端口转发。因此,如果服务在 IP 地址为 192.168.1.100 的设备上监听 127.0.0.1:4401,则可以使用以下命令从另一台设备创建到该设备的端口转发:
ssh -L4401:127.0.0.1:4401 192.168.1.100
因此,这将打开一个到 192.168.1.100 的 ssh 会话,并在此过程中在启动连接的机器上创建一个本地端口 127.0.0.1:4401。本地机器上往返于 127.0.0.1:4401 的任何流量都将通过 ssh 隧道传输到远程机器上的 127.0.0.1:4401。
答案2
这是不可能的。127.0.0.1 是主机本地的。
这意味着您的 XP 主机有一个 127.0.0.1,它仅适用于该 XP 主机,
并且您的 vm 客户机有自己的 127.0.0.1,它仅适用于该客户机。
两者都不应该离开其主机,并且在许多情况下,这是在驱动程序中硬编码的(不确定 XP,但 Linux 和 Win7 硬件都在 dll 和内核中)。
如果您希望两者之间进行通信,则将程序绑定到不同的 IP。