Режим Network Address Translation (NAT) предоставляет наиболее простой способ доступа к внешней среде из виртуальной машины. Обычно, для него не требуется никаких настроек хоста и гостевой системы. Поэтому он является сетевым режимом, настраиваемым по умолчанию.
Виртуальная машина с сетевым интерфейсом в режиме NAT подключается к сети, также как реальный компьютер подключается к Internet через маршрутизатор. "Маршрутизатором" в данном случае выступает сетевой модуль VirtualBox, который обрабатывает сетевой трафик виртуальной машины. Недостаток режима NAT, как и в случае локальной сети за маршрутизатором, в том что виртуальная машина недоступна для внешней сети (internet); вы не можете обрабатывать сетевые запросы, пока не настроите переброс портов (описывается ниже).
Виртуальная машина получает сетевой адрес и другие его настройки в локальной сети от сервера DHCP встроенного в VirtualBox. Таким образом IP адрес присваивается виртуальной машине отличный от сетевого адреса сети хоста. Возможно настроить использование нескольких сетевых карт в виртуальной машине в режиме NAT, тогда первая карта будет принадлежать локальной сети 10.0.2.0, вторая 10.0.3.0 и т.д. Если вам необходимо изменить диапазон выдаваемых IP, то обратитесь к Разделу 9.12, “Настройка адреса сетевого интерфейса NAT” .
Сетевые пакеты посылаемые гостевой ОС получает модуль VirtualBox NAT, который обрабатывает данные стека TCP/IP и пересылает их операционной системе хоста. Он определяет какие данные посылать приложениям хоста, а какие другим компьютерам той же сети, что и хост, используя сетевой интерфейс хоста . VirtualBox также перехватывает и пересылает ответные пакеты гостевой машине.
Так как виртуальная машина подключается к своей собственной сети VirtualBox и не доступна для хоста, то сетевые службы в гостевой системе не доступны для хоста и других компьютеров сети хоста. Однако, VirtualBox позволяет сделать выбранные сервисы доступными для них с использованием переброса портов. Данная функция позволяет прослушивать некоторые порты хоста и пересылать все сетевые пакеты приходящие на этот порт гостевой системе.
Для приложений хоста или других компьютеров сети (включая виртуальные) это выглядит так, как будто бы служба работает на хост системе (это означает, что вы не можете обслуживать сервис на том же порту на хосте). Тем не менее, обслуживание сетевых запросов в виртуальной машине дает некоторые преимущества, например, уязвимость или крах виртуальной сетевой службы не ведет к компрометированию хост системы, так как сервис работает в другой операционной системе.
Вы можете настроить переброс портов, используя команду VBoxManage
. Вам необходимо знать какие порты используются в госте сетевой службой и определить какие порты использовать на хосте (не обязательно использовать номера тех же портов, что и в гостевой системе). Вы можете использовать любые порты на хосте, которые не используются им. В примере показано, как настроить службу ssh
:
VBoxManage setextradata "Linux Guest" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP VBoxManage setextradata "Linux Guest" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22 VBoxManage setextradata "Linux Guest" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222
В приведенном примере используется виртуальная сетевая карта PCNet; если вы используете в гостевой системе Intel PRO/1000, то замените "pcnet" на "e1000". Так же, если вы хотите настроить интерфейс отличный от приведенного (первый виртуальный сетевой интерфейс), то замените /0/
нужным номером. Номера интерфейсов pcnet
и e1000
нумеруются отдельно и для обеих нумерация начинается с 0.
Имя guestssh
выбрано произвольно для этого конкретного переброса порта. При данной настройке, все TCP соединения на порт хоста 2222 будут перенаправлены на 22 порт гостевой системы. Параметр Protocol
может принимать одно из двух значений: TCP
или UDP
(обязательно заглавными буквами, значение чувствительно к регистру). Для удаления данной настройки, используйте те же команды, но без указания значений параметров (в данном случае TCP
, 22
и 2222
).
Нельзя настраивать переброс портов соединений для запущенной виртуальной машины. Однако, это возможно сделать для ВМ, которая сохранена или выключена.
Механизм загрузки PXE теперь поддерживается в режиме NAT. Сервер NAT DHCP предоставляет загрузочный файл vmname.pxe
если существует каталог TFTP
в каталоге где находится файл VirtualBox.xml
. Пользователю должен обеспечить существование корректного файла vmname.pxe
.
Существует четыре ограничения в режиме NAT о которых необходимо знать:
Многие часто используют сетевые утилиты отладки ( ping
или tracerouting) используют протокол ICMP для отправки и получения сообщений. Хотя поддержка ICMP протокола была значительно улучшена в VirtualBox 2.1 ( ping
теперь работает), но при работе с некоторыми утилитами возможны проблемы.
Гостевые системы осуществляют ненадежное получение широковещательных пакетов, что сделано для улучшения производительности, они получают широковещательные пакеты только в определенный промежуток времени, после того как гость отсылает пакет UDP. Как следствие, протокол разрешения имен NetBios не всегда работает корректно (но WINS работает). В данном случае используйте обходной путь - вы можете использовать непосредственно IP адреса для доступа к сетевым ресурсам \\server\share
.
Протоколы отличные от TCP и UDP не поддерживаются. Это означает что нельзя использовать VPN ( PPTP от Microsoft). Существуют другие реализации VPN которые используют TCP и UDP.
На Unix системах (Linux, Solaris, MacOS X) нельзя использовать порты с номерами меньше 1024 в приложениях которые запущены не с правами root
. В результате, если вы попытаетесь настроить переброс таких портов, то ВМ не запустится.
Эти ограничения обычно не влияют на обычное использование сети. Но наличие их в NAT режиме может приводить к проблемам в сетевой работе. Приведем пример - NFS, часто сервера настроены так, что отказывают в соединениях от непривилегированных портов (т.е. портов с номерами меньше 1024).