Як отримати доступ до циклу хостів 127.0.0.1 від VMplayer


4

Я використовую VM Player 4.0.2 під керуванням гостьової ОС Ubuntu 11.10 на хості WinXP, з налаштуванням мережевого з'єднання NAT.

У мене працює програма Win XP, яка спілкується з сервісом диспетчера пристроїв за допомогою TCP-сокетів за адресою сервера 127.0.0.1:2401. Я хотів би, щоб послуга пристрою працювала на VM Guest OS (Ubuntu) і все ще могла спілкуватися з додатком на хост-ОС.

Я можу дістатися до localhost хост-OS за допомогою IP-адреси (192.168.1.100) хоста NIC. Але якщо я використовую 127.0.0.1, це не працює. Здається, що пакети споживаються loopback lo гостьової ОС.

Виграти налаштування хоста:

    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 встановлений opensh-сервер і прослуховування

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

Я не знаю, чи це можливо, я підозрюю, що не змінюючи ядро ​​чи мережевий стек, але чому ви цього хочете? Адресна петля за визначенням не повинна посилатися на іншу машину - у неї є своя IP-адреса.
користувач55325

У мене є діючий клієнтський додаток Win і драйвери пристрою, і я хотів протестувати драйвер пристрою та сервіс на Linux. Хоча localhost (на зразок циклу) є специфічним, до нього можна отримати доступ. Тож мені цікаво, чи можемо ми використовувати NAT чи якусь іншу техніку, щоб досягти зворотного зв'язку на хост-ОС. Я не зміг знайти жодного такого рішення в мережі, і хотів проконсультуватися з експертами щодо легкого вирішення / налаштування.
Мано

Відповіді:


2

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

Оскільки ми можемо вважати віртуальну машину такою самою, як і фізичну машину, то випливає, що вона відокремлена від хоста, і тому не може отримати доступ до 127.0.0.1 адреси свого хоста.

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

Іншим варіантом буде використання переадресації портів через ssh. Отже, якщо служба слухала 127.0.0.1:2401 на пристрої з 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:2401 на машині, що ініціює з'єднання. Будь-який трафік до 127.0.0.1:2401 на локальній машині переходитиме через тунель ssh до 127.0.0.1:2401 на віддаленій машині.


Дякую за відповідь. Я намагався використовувати переадресацію порту SSH, але в гостьовій ОС я отримав відмову від з'єднання. Навіть telnet до 192.168.1.100:22 не вдалося. У мене ssh працює і слухаю (див. Відредаговане запитання). Це означає, що хост Win XP не дозволяє з'єднати порт 22? Як я це вирішую?
Мано

Можливо, ви /etc/hosts.deny визначили? Якщо він слухає, але відмовився, то щось, крім ssh, скидає його, як брандмауер або обмеження хосту.
Павло

0

Це неможливо. 127.0.0.1 є локальним для хоста.

Це означає, що ваш хост XP має 127.0.0.1, який є локальним тільки для цього хоста XP,
а ваш vm гість має власний 127.0.0.1, який є локальним лише для цього гостя.

Жоден з них не повинен залишати свого хоста, і у багатьох випадках це жорстко кодується у драйверах (не впевнені в XP, але як linux, так і win7 обладнання в DLL і ядрах).

Якщо ви хочете спілкуватися між обома, тоді прив'яжіть програму до різних IP-адрес.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.