1

Хорошие люди,

У меня есть сеть, имеющая следующую настройку

eth0 10.216.11.41 Интернет-соединение

eth1 192.168.0.4 внутренняя сеть, взаимодействующая с другими машинами во внутренней сети.

Я хотел бы использовать эту машину в качестве шлюза со следующими требованиями.

  1. Весь трафик из внутренней сети, идущий на yahoo.com, будет SNATted с - по 10.216.11.40 через eth0
  2. Все остальное, чтобы быть MASQUARADED через eth0 с IP-адресом 10.216.11.41

Я надеялся достичь этого

#everything to yahoo be snatted
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 10.216.11.40 --destination yahoo.com 

#everything else be masqueraded
iptables --t nat --A POSTROUTING --o eth0 -j MASQUERADE

Но, увы, правило SNATting не имеет места назначения.

Как я могу достичь вышеуказанных требований?

1 ответ1

2

Вам нужно поместить SNAT в новую отдельную цепочку.

Тогда, когда у вас есть SNAT, вам нужно написать правило, которое проверяет IP-адрес назначения и, если оно эквивалентно тому, для которого вы хотите это сделать, перейти к цепочке, которую вы сделали выше.


В начале вашего файла iptables

/sbin/iptables -t nat -N SNATChain

создать цепочку в таблице nat именем "SNATChain"

Затем замените это:

#everything to yahoo be snatted
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 10.216.11.40 --destination yahoo.com

с этим:

#if the destination IP matches yahoo, throw it to SNATChain
/sbin/iptables -t nat -A POSTROUTING -o eth0 --destination yahoo.com -j SNATChain

а затем заполните SNATChain с правилом, которое вы хотите

/sbin/iptables -t nat -A SNATChain -o eth0 -j SNAT --to 10.216.11.40

Я верю, что это так. Прошло некоторое время с тех пор, как я испортил iptables .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .