如何从 VMplayer 访问主机环回 127.0.0.1

如何从 VMplayer 访问主机环回 127.0.0.1

我正在使用 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。

相关内容