
Я выполнил переадресацию портов, следуя этому руководству: http://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/
iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111
iptables -t nat -A POSTROUTING -j MASQUERADE
Но я хочу МАСКИРОВАТЬ только порты с переадресациями, потому что на том же сервере у меня есть веб-сервер, и если я МАСКИРУЮ весь трафик, веб-сервер перестанет работать.
Есть идеи?
РЕШЕНИЕ:
iptables -t nat -A POSTROUTING -d 2.2.2.2 -p tcp --dport 1111 -j SNAT --to-source 2.2.2.1
решение1
если выДействительнохотите сделать, MASQUERADE
то правильный способ сделать это так:
iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111
iptables -t nat -A POSTROUTING -d 2.2.2.2 -p tcp --dport 1111 -j MASQUERADE
этот способ MASQUERADE
будет применяться только к пакетам, обработанным DNAT.
Обратите внимание, однако, что MASQUERADE
это предназначено в основном для случаев с динамическим IP (например, dial-up), а в случае статического IP его SNAT
лучше использовать так, как вы предложили. Из iptables
man-страницы:
Его следует использовать только с динамически назначаемыми IP-соединениями (dialup): если у вас статический IP-адрес, вам следует использовать цель SNAT. Маскарадинг эквивалентен указанию сопоставления с IP-адресом интерфейса, из которого отправляется пакет, но также имеет эффект, что соединения забываются, когда интерфейс отключается. Это правильное поведение, когда следующий dialup вряд ли будет иметь тот же адрес интерфейса (и, следовательно, любые установленные соединения в любом случае теряются).
Однако есть одно предостережение для обоих MASQUERADE
вариантов SNAT
: он не будет работать, если 2.2.2.2 является VIP на той же машине.