ДНАТ вообще?
Как бы вы настроили iptables для общей отправки пакетов некоторого порта, скажем, tcp port 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?
Это сделано с другой командой?
1 ответ
Некоторые соображения в первую очередь. Если у вас есть 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.