Как бы вы настроили iptables для общей отправки пакетов какого-либо порта, например tcp-порта 80, на правильные машины (которые не все находятся в одной подсети)?
Например:
iptables -t nat -A PREROUTING -s 0.0.0.0//0 -p tcp -d $NATIP -j DNAT --to-destination $machineIP
iptables -t nat -A POSTROUTING -s $machineIP -p tcp -d 0.0.0.0//0 -j SNAT --to-source $NATIP
Вышеупомянутое будет правильно отправлять пакеты на одну машину и с одной, но как бы вы это сделали для n машин. Поскольку я не верю, что универсальный пункт назначения, такой как 192.168.1.0/25, будет работать.
Вы как-то помечаете пакеты, чтобы при их возвращении вы могли отправить их на правильный IP-адрес?
Это сделано какой-нибудь другой командой?
Сначала некоторые соображения. Если у вас есть 0.0.0.0/0
в качестве источника или назначения вам не нужно указывать его в своем правиле.
Теперь рассмотрим ваш вопрос, если он у вас есть NATIP
для каждой машины вопрос просто заключается в создании одной пары правил для каждой машины. Если вы хотите использовать то же самое NATIP
для нескольких машин нужно что-то различать, если не порт, то исходный IP. В противном случае iptables, как таковой, не может выбрать, куда отправить пакет. (вернемся к этому делу)
Чтобы сделать выходной NAT, вы можете создать одно правило для каждой машины или создать таблицу и указать там все IP-адреса и подсети, которые вы хотите преобразовать.
iptables -t nat -N addrTranslate
iptables -t nat -A OUTPUT -s x.x.x.x -j addrTranslate
iptables -t nat -A OUTPUT -s y.y.y.y/24 -j addrTranslate
iptables -t nat -A addrTranslate -j SNAT --to z.z.z.z
Альтернативой NAT для нескольких машин с одним IP-адресом является установка прокси с apache.