У меня есть хост 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-адресов при создании страниц.