iptables を使用した TCP 応答からのソース IP の書き換え

iptables を使用した TCP 応答からのソース IP の書き換え

そのシステムから開始されない接続のためにRedhatシステムを離れるTCP / 514トラフィックの送信元IPを書き換えたいと思います。

マシンはインターフェイス(例:10.10.0.20)からTCP / 514トラフィックを受信し、応答が10.10.0.15(マシンに割り当てられていない)から来たかのようにトラフィックを返そうとします。

接続を開始する場合は、natテーブルを使用して次のことができます。

iptables -A POSTROUTING -t nat -p tcp --sport 514 -j SNAT --to=10.10.0.15

..しかし、着信トラフィックに応答しているので(私が知っている限り)natテーブルに到達することはできません。理由を無視するなぜこれをしなければならないのですが、どうすればいいですか?

追加の背景:

これは、Netscaler VIPの後ろに座ってTCP(UDPではない)を介してsyslogトラフィックを受信するRedhat 7システムです。 VIPでクライアントIPパススルーを使用しています。ファイアウォールはVIPのIPではなくsyslogサーバーのIPからの戻りトラフィックを見ているため、ファイアウォールはトラフィックを破棄するため、VIPのIPアドレスから出るようにsyslogサーバーのTCP応答を書き直そうとします。バックエンドサーバーからトラフィックが入っていないため、natテーブルは利用できないようです(したがって動作しません-j SNAT)。

今私が見るものは次のとおりです。

13:13:45.439683 IP 10.10.0.8.31854 > 10.10.0.20.514: Flags [S], seq 544116376, win 8190, options [mss 1460], length 0
13:13:45.439743 IP 10.10.0.20.514 > 10.10.0.8.31854: Flags [S.], seq 4163333198, ack 544116377, win 14600, options [mss 1460], length 0

私が見たいことは:

13:13:45.439683 IP 10.10.0.8.31854 > 10.10.0.20.514: Flags [S], seq 544116376, win 8190, options [mss 1460], length 0
13:13:45.439743 IP 10.10.0.15.514 > 10.10.0.8.31854: Flags [S.], seq 4163333198, ack 544116377, win 14600, options [mss 1460], length 0

ベストアンサー1

DSR方式

最も効果的な方法は、NetScalerで直接サーバーリターンモードを適切に設定することです。ここで、NetScalerはターゲットVIPアドレス(10.10.0.15)を変更せずにsyslogサーバーへのMACベースの配信を実行します。

NetScalerから転送されたパケットを受信するには、syslogサーバーにもこのVIPアドレスが必要です。このアドレスは、loなどのすべての内部インターフェイスに割り当てることができますdummy0

ip addr add 10.10.0.15/32 dev lo

eth0そしてこれを防ぐために、着信インターフェイスにいくつかのsysctlsを設定する必要があります(ここで想定しています)。VIP ARPの問題(望むより6.7.治療:2.6.xカーネル - arp_ignore/arp_announce)。以下を追加し/etc/sysctl.confて実行しますsysctl -p

net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

arp_ignore/on設定はarp_announce何も役に立ちませんlo

DNAT法

NetScalerが着信トラフィックに対してDNATを実行している場合、syslogサーバーはリターントラフィックもNetScalerに転送して接続追跡リソースを取得できます。これはアドレス変換を実行する最も自然な方法です。

この場合、syslogサーバーのポリシールーティングを利用できます。この機能により、「ポート 514 から発信される TCP パケット」などの特定の条件下で、パケットに特別なルーティング テーブルを適用できます。

以下のように、Linuxアドバンストルーティングに関するHOWTOドキュメントがあります。私はあなたが次の指示を理解するために次のミニハウト(mini-HOWTO)を読むことをお勧めします。

VIPまず、ランダムIDで指定された特別なルーティングテーブルを定義します/etc/iproute2/rt_tables

1 VIP

VIPこのテーブルにVIP(10.10.0.15)へのデフォルトパスを追加します。

ip route add default via 10.10.0.15 table VIP

ポート514から送信されたTCPパケットをmangle表示するには、iptablesテーブルにエントリを追加します。1

iptables -t mangle -A OUTPUT -p tcp --sport 514 -j MARK --set-mark 1

VIPマーク付きのパケットのルーティングテーブルを見つけるためのルールを追加します1

ip rule add from all fwmark 1 table VIP

これまでに定義されたルールを表示できますip rule list。ルールは優先順位の値の昇順で処理されます(0が最も高い優先順位)。

# ip rule list
0:  from all lookup local 
32765:  from all fwmark 0x1 lookup VIP 
32766:  from all lookup main 
32767:  from all lookup default 

次のように、各ルーティングテーブルの内容を確認できます。

# ip route ls table local
# ip route ls table VIP
# ip route ls table main

おすすめ記事