У меня 3 интерфейса:
eth0 192.168.0.50/24
eth1 10.0.0.200/24
eth2 225.228.123.211
Шлюз по умолчанию 192.168.0.1
которые я хочу сохранить в тех изменениях, которые хочу внести.
Я хочу замаскироваться eth1 10.0.0.200/24
и включить переадресацию NAT на eth2
. Итак, я сделал это:
ip route add 225.228.123.208/29 dev eth2 src 225.228.123.211 table t1
ip route add default via 225.228.123.209 dev eth2 table t1
ip rule add from 225.228.123.211 table t1
ip rule add to 225.228.123.211 table t1
Теперь я могу получать ответы на пинг с любого интернет-хоста, если я это сделал:
ping -I eth2 8.8.8.8
Чтобы включить переадресацию NAT, я сделал следующее:
sudo iptables -A FORWARD -o eth2 -i eth1 -s 10.0.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Но это не работает. Для тестирования я использовал клиентский компьютер и включил его 10.0.0.0/24
сеть и шлюз были установлены как 10.0.0.200
.
я хочу иметь 192.168.0.1
как шлюз по умолчанию. И трафик, который входит через eth1 10.0.0.200/24
следует направить eth2 225.228.123.211
.
Я также включил пересылку в Ubuntu.
Я считаю, что вы хотите:
Если это так, значит, в настройках iptables и iproute2 есть несколько ошибок. Вот мое предложение:
-t nat -A POSTROUTING -o eth2 -j MASQUERADE
-A FORWARD -i eth1 -o eth2 -j ACCEPT
-A FORWARD -i eth2 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
Для маршрутизации вам понадобятся две настраиваемые таблицы. Я буду использовать числа вместо имен, потому что не знаю, что у вас /etc/iproute2/rt_tables
. Теперь одно важное замечание: я изменяю RPDB и маршруты по умолчанию. воля вызвать временное нарушение работы сети. Так что я бы предложил не вводя их в интерфейсе командной строки, а не помещайте в сценарий, чтобы все происходило атомарно (если вы не вводите команды на физической консоли Linux).
ip route add default via 192.168.0.1 dev eth0 table 100
ip route add default via 225.228.123.209 dev eth2 table 102
ip route del default table main
ip rule add order 10 from all lookup main
ip rule add order 20 iif lo lookup 100
ip rule add order 30 iif eth1 lookup 102
Мы перемещаем lookup main
как первое правило для обеспечения правильной маршрутизации в подсети, непосредственно подключенные к Linux. Но мы удаляем маршрут по умолчанию в этой таблице, потому что мы хотим указать разные маршруты по умолчанию в зависимости от того, где пакет входит в ящик Linux.
А теперь важный вопрос: Представляет ли подсеть 10.0.0.0/24 все сети подключены - прямо или косвенно - к eth1?
Если да, на этом настройка завершена.
Если нет, т.е. есть другие подсети, косвенно подключенные к eth1 (скажем, 10.0.1.0/24, 10.0.2.0/24 и т. д.), к которым вы можете получить доступ через другой маршрутизатор (скажем, 10.0.0.77/24), тогда вам необходимо добавить больше маршрутов в main
стол:
ip route add 10.0.1.0/24 via 10.0.0.77 dev eth1 table main
ip route add 10.0.2.0/24 via 10.0.0.77 dev eth1 table main
... and so on ...
Примечание: table main
не обязательно, но хорошая привычка