Все началось с того, что мне потребовалось подключить к интернету гостевую систему но так, что бы мог работать icmp. Проблема заключалась в том, что если дать доступ гостевой системе к интернету средствами NAT VirtualBox'а, то icmp в данном случае не работает. Причем, в версии 1.6 от Sun проблема имеет место быть.
Еще недавно я пытался построить сеть с несколькими компами (1 сервер и несколько хостов) для того , что бы на ней проводить эксперименты или что-то испытывать. Тем более имелось относительно не старое железо, которое валялось без дела. Плюс еще ноут. Но в "гигантских" масштабах одной комнаты обычной квартиры, построенной еще лет 30 назад, это было сделать затруднительно, да особо и не хотелось, ибо проблемы с шумом меня бы замучили. Кстати, отпишу как-нибудь, как мне удалось сделать бесшумный системный блок, который теперь работает круглые сутки и не достает шумом. Реакция человека, который его первый раз включил, была такая: "Чувак, у тебя комп сломался?!". "Почему???". "Ну я его включил, а он ни звука не издает".
Теперь о моделируемой сети. Допустим, нам надо сделать минимум: это сервер и один хост. Для этого потребуется
бинарный VirtualBox, потому, что версия OSE обладает рядом ограничений в функциональности. После того, как установили VirtualBox и гостевые системы, можно приступать к созданию сети.
Для начала создадим виртуальные интерфейсы средствами VirtualBox:
VBoxAddIF vbox0 <user>
VBoxAddIF vbox1 <user>
Почему vbox0 и vbox1? Потому, что 2 гостевые системы не могут работать одновременно с одним виртуальным интерфейсом, поэтому число интерфейсов vbox должно быть равно числу гостевых систем в моделируемой сети.
Далее, создаем 2 интерфейса vbox0:1 и vbox1:1 вписывая в /etc/network/interfaces
iface vbox0:1 inet static
address 192.168.0.1
netmast 255.255.255.252
auto vbox0:1
iface vbox1:1 inet static
address 192.168.0.5
netmast 255.255.255.252
auto vbox1:1
и поднимаем из с помощью ifup.
Теперь в свойствах гостевых систем указываем, что будет использоваться "Хост-интерйфес" с именами vbox0 и vbox1 соответственно.
С учетом всего этого видно, что есть одно большое НО: все гостевые системы невозможно расположить в одном адресном пространстве, поэтому приходится для каждой гостевой системы прописывать подсети. Для первой это 192.168.0.0/30, а для второй 192.168.0.4 /30.
Кстати, возможно, можно не создавать vbox0:1 и vbox1:1, а повесить сети на vbox0 и vbox1 соответственно, но на скорую руку у меня это не получилось сделать.
Далее, прописываем руками настойки сети в гостевых системах и вписываем DNS провайдера, если хотим эти систем выпустить в мир.
На этом этапе VirtualBox меня приятно удивил, когда оказалось, что хосты из этих двух подсетей друг друга видят. Хотя это наверное результат команды
echo "1" > /proc/sys/net/ipv4/ip_forward
т.к. если ее не выполнить, то хосты друг друга не видят)
Теперь выпускаем гостевые системы в мир. Я подключен к провайдеру через интерфейс eth1 с реальным ip 80.92.239.xxx. Далее создаем исполняемый файл, например ipt.conf:
#! /bin/sh
iptables -F
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/30 -j SNAT --to-source 80.92.239.ххх
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.4/30 -j SNAT --to-source 80.92.239.ххх
и запускаем его. После этого, гостевые системы должны получить доступ в интернет.