4

Я использую VM Player 4.0.2 под управлением гостевой ОС Ubuntu 11.10 на хосте WinXP с настройкой сетевого подключения NAT.

У меня есть приложение, работающее на Win XP, которое связывается со службой диспетчера устройств с использованием сокетов TCP по адресу сервера 127.0.0.1:4401. Мне бы хотелось, чтобы служба устройства работала на гостевой ОС ВМ (Ubuntu) и все еще поддерживала связь с приложением на хост-ОС.

Я могу достичь локального хоста хост-ОС, используя IP-адрес (192.168.1.100) сетевого адаптера хоста. Но если я использую 127.0.0.1, это не работает. Похоже, что пакеты используются обратной связью гостевой ОС.

Настройка хоста 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)

Может кто-нибудь сказать мне, если это возможно, и каков рекомендуемый способ его настройки?

У меня openssh-сервер установлен на ВМ и слушаю

    rootuser@ubuntu:~$ sudo netstat -tap | grep sshd
    tcp        0      0 *:ssh                   *:*                     LISTEN      3469/sshd       

2 ответа2

2

Вы можете считать виртуальную машину такой же, как физическая машина. Диапазон обратной связи 127.xxx никак не маршрутизируется, поэтому доступ к нему возможен только с машины, на которой они настроены. Это является частью и гарантией спецификации IP, и для доступа к адресу 127.xxx с устройства, отличного от того, на котором оно настроено, потребуется реализация очень сломанного IP-адреса, и поэтому вы не найдете его с готовностью.

Поскольку мы можем считать виртуальную машину такой же, как физическую машину, из этого следует, что она отделена от хоста и поэтому не может получить доступ к адресу 127.0.0.1 на своем хосте.

Вы можете изменить конфигурацию службы, чтобы она прослушивала маршрутизируемый IP-адрес, например адрес интерфейса.

Другой вариант - использовать переадресацию портов через ssh. Поэтому, если служба прослушивала 127.0.0.1:4401 на устройстве с IP-адресом 192.168.1.100, вы можете создать порт, перенаправленный на него с другого устройства, с помощью команды:

ssh -L4401:127.0.0.1:4401 192.168.1.100

Так что это откроет сеанс SSH для 192.168.1.100 и в процессе создаст локальный порт 127.0.0.1:4401 на компьютере, инициирующем соединение. Любой трафик до и после 127.0.0.1:4401 на локальной машине будет проходить через туннель ssh до 127.0.0.1:4401 на удаленной машине.

0

Это невозможно. 127.0.0.1 является локальным для хоста.

Это означает, что ваш XP-хост имеет 127.0.0.1, локальный только для этого XP-хоста,
и у вашего гостя vm есть собственный 127.0.0.1, который является локальным только для этого гостя.

Ни один из них не должен покидать свой хост, и во многих случаях это жестко закодировано в драйверах (не уверен насчет XP, но как для Linux, так и для оборудования win7 это в dll и в ядре).

Если вы хотите установить связь между обоими, привязайте программу к разным IP-адресам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .