Я создаю виртуальную сеть с 6 виртуальными машинами в virtualBox. Один из них действует как роутер / нат / межсетевой экран. Эта первая машина использует 4 сетевые карты:
eth0 -> Internet
eth1 -> Subnet 1
eth2 -> Subnet 2
eth3 -> Host-Only Network
Я дошел до точки, когда машины в подсетях могли подключаться к Интернету, установив nat в «маршрутизаторе», например:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Затем я начал настраивать третью подсеть, которая выходит из другой виртуальной машины в подсети 2 с этими сетевыми картами:
eth0 -> Subnet 2
eth1 -> Subnet 3
К подсети 3 подключается только один другой компьютер, но я собираюсь настроить на нем ssh-сервер, поэтому мне нужно маршрутизировать от маршрутизатора к машине в подсети 2 к этой другой. Для этого я использовал:
iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.20.46:22
В "роутере" и
iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.30.50:22
На машине ssh-сервера. Кроме того, чтобы заставить каждую машину «видеть» друг друга, я использовал:
route add default gw 192.168.20.46
route add -net 192.168.30.0 netmask 255.255.255.0 gw 192.168.20.46
На машине "роутер".
Теперь каждая машина может пинговать все, от других машин до 8.8.8.8, и трассировать их. Тем не мение,
apt-get update
на любой из машин, кроме маршрутизатора, отправляет пакет на маршрутизатор, и ответ не возвращается, поэтому он застревает в первой строке:
0% Connecting ftp....(82.194.78.250)...
И никогда не идет дальше этого. (просто ошибки по истечении времени ожидания) Я предполагаю, что nat отправляет пакеты правильно, но на обратном пути они не могут добраться до компьютеров подсети.
Думаю, ошибалась. Машины отправляли запросы, и маршрутизатор перенаправлял их в другую подсеть, которая либо не знала, что с ней делать, либо возвращала их обратно на маршрутизатор. Решение заключается в добавлении -i eth0 в строку iptables, чтобы перенаправлялся только внешний трафик.