воскресенье, 24 марта 2013 г.

NAT для VirtualBox с возможностью прямого доступа к виртуальным машинам с хоста

Когда создавал новую виртуальную машину в Virtualbox (Ubuntu 12.04 LTS) решил спрятать его за NAT в виртуальной сети, но таким образом чтобы иметь возможность достучаться до него напрямую через SSH.
Для этой цели поднял виртуальный сетевой интерфейс, настроил NAT, настроил раздачу айпи и обработку DNS-запросов создаваемой виртуальной сети:

  1. Устанавливаем пакет uml-utilities с утилитой для создания интерфейса tap0
    $ sudo apt-get install uml-utilities
    В файл «/etc/network/interfaces» добавляем описание нового интерфейса
    1. auto tap0
    2. iface tap0 inet static
    3. address 10.0.55.1
    4. netmask 255.255.255.0
    5. pre-up /usr/sbin/tunctl -t tap0
    6. post-down /usr/sbin/tunctl -d tap0
    Поднимаем новый интерфейс
    $ sudo ifup tap0
  2. Теперь настраиваем NAT. Для этой цели используем идущее с системой средство настройки брандмауэра ufw. Редактируем файл «/etc/ufw/before.rules» и добавляем в самом начале строки
    1. *nat
    2. :POSTROUTING ACCEPT [0:0]
    3. -F POSTROUTING
    4. -A POSTROUTING -s 10.0.55.0/24 -j MASQUERADE
    5. COMMIT
    Редактируем файл «/etc/default/ufw» и меняем следующие параметры
    1. DEFAULT_INPUT_POLICY="ACCEPT"
    2. DEFAULT_OUTPUT_POLICY="ACCEPT"
    3. DEFAULT_FORWARD_POLICY="ACCEPT"
    Запускаем ufw
    $ sudo ufw enable
  3. Чтобы каждый раз вручную не прописывать айпишники днс-сервера вновь созданным виртуальным машинам устанавливаем dnsmasq
    $ sudo apt-get install dnsmasq
    В файл конфигурации «/etc/dnsmasq.conf» добавляем следующие строки
    1. # Слушаем порты только на указанном интерфейсе
    2. bind-interfaces
    3. # Слушаем на созданном нами интерфейсе
    4. interface=tap0
    5. # Не слушаем на локальном интерфейсе. Там как правило слушает запущенный Netwok Manager процесс dnsmasq
    6. except-interface=lo
    7. # Диапазон раздаваемых по DHCP адресов виртуальным машинам.
    8. dhcp-range=10.0.55.10,10.0.55.200,72h
    9. # Домен создаваемой сети
    10. domain=virtual
    Запускаем dnsmasq с новыми настройками
    $ sudo service dnsmasq stop
    $ sudo service dnsmasq start