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

しかし、転送するポートだけをマスカレードしたいのです。同じサーバーに Web サーバーがあり、すべてのトラフィックをマスカレードすると Web サーバーが動作を停止してしまうからです。

何か案が?

解決: 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

この方法はMASQUERADEDNAT されたパケットにのみ適用されます。

ただし、これはMASQUERADE主に動的 IP の場合 (ダイヤルアップなど) を対象としており、静的 IP の場合はSNAT提案どおりに使用する必要があります。maniptablesページから引用:

これは、動的に割り当てられた IP (ダイヤルアップ) 接続でのみ使用してください。静的 IP アドレスがある場合は、SNAT ターゲットを使用してください。マスカレードは、パケットが送信されるインターフェイスの IP アドレスへのマッピングを指定することと同じですが、インターフェイスがダウンすると接続が忘れられるという効果もあります。これは、次のダイヤルアップが同じインターフェイス アドレスを持つ可能性が低い場合 (したがって、確立された接続はいずれにせよ失われる) の正しい動作です。

MASQUERADEただし、と の両方に 1 つの注意点がありますSNAT。2.2.2.2 が同じマシン上の VIP である場合は機能しません。

関連情報