Как получить IP-адрес хоста из гостевой системы NAT VirtualBox?

Как получить IP-адрес хоста из гостевой системы NAT VirtualBox?

У меня есть хост Windows 7, управляющий гостевой системой VirtualBox Debian с NAT. Эта гостевая система запускает некоторые веб-сервисы, доступные извне через перенаправление портов.

Мне нужно предоставить внешний доступ к этим сервисам через URL, но я не могу положиться на правильное разрешение DNS, поэтому мне приходится распространять IP хоста в гостевую среду. Как я могу сделать это с минимальным влиянием на хост?

Некоторые пояснения: «внешний», «внешний доступ» относится к веб-браузерам, размещенным на том же уровне, что и хост, т. е. они не могут полагаться только на адрес хоста.

Рисунок стоит тысячи слов:

+--------------+  External                         
| Windows Host |  network   +---------------------+
| +----+       |            |      Web client     |
| |    |      NAT           |  +----------------+ |
| |    ------------------------> Page generated | |
| |    |       |            |  |by VM with URLs | |
| | VM |       |            |  |to host         | |
| |    |       |            |  +--------|-------+ |
| |    |      FWD           |           |         |
| |    <--------------------------------+         |
| |    |       |            +---------------------+
| +----+       |                                   
+--------------+

решение1

Один из способов добиться этого — трюк, лежащий в основе таких сайтов, какwhatsmyip.com. все, что вам нужно, это веб-сервер в вашей сети, который отправляет IP-адрес, с которого он получает запрос, обратно клиенту.

Помните, поскольку вы используете NAT, сервер видит адрес NAT-маршрутизатора (в данном случае хоста виртуальной машины) как исходный адрес.

Для этого вы можете создать php-скрипт (например, whatsmyip.php) в корневом каталоге вашего веб-сервера, например:

//whatsmyip.php
<?php 
//Gets the IP address
$ip = getenv("REMOTE_ADDR") ; 
Echo "$ip; 
?> 

и получить к нему доступ с гостевой учетной записиhttp://webserver/whatsmyip.php

(источник:Thoughtco.com )

Теперь вам нужно только оценить этот ответ в вашей службе.

решение2

Принимая во внимание ответ Гунтберта, это включает в себя:

  • Используйте сторонний веб-сервер во «внешней» сети для размещения удаленного ответчика, как описано в данном ответе.
  • Во время фазы инициализации виртуальной машины (и/или периодически в соответствии с сетевым контекстом) просмотрите ее, чтобы получить внешний адрес хоста Windows.
  • Используйте полученный адрес для подделки URL-адресов при создании страниц.

Связанный контент