Iptables МАСКИРУЮТ только выбранные порты

Iptables МАСКИРУЮТ только выбранные порты

Я выполнил переадресацию портов, следуя этому руководству: 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лучше использовать так, как вы предложили. Из iptablesman-страницы:

Его следует использовать только с динамически назначаемыми IP-соединениями (dialup): если у вас статический IP-адрес, вам следует использовать цель SNAT. Маскарадинг эквивалентен указанию сопоставления с IP-адресом интерфейса, из которого отправляется пакет, но также имеет эффект, что соединения забываются, когда интерфейс отключается. Это правильное поведение, когда следующий dialup вряд ли будет иметь тот же адрес интерфейса (и, следовательно, любые установленные соединения в любом случае теряются).

Однако есть одно предостережение для обоих MASQUERADEвариантов SNAT: он не будет работать, если 2.2.2.2 является VIP на той же машине.

Связанный контент