すでに同様の質問があります尋ねる 今後しかし、私の設定は少し異なるため、これらの問題に対する解決策は機能しません。 Aには、5つのインターフェースでiptablesを実行するCentOS 6サーバーがあります。
- eth0: 管理 136.2.188.0/24
- eth1:クラスタ1内部10.1.0.0/16
- eth2: クラスタ1 外部 136.2.217.96/27
- eth3: Cluster2 内部 10.6.0.0/20
- eth4:クラスタ2外部136.2.178.32/28
私が望むのは、eth1のトラフィックがeth2から出てNATdになり、eth3のトラフィックがeth4から出てNATdになり、他のすべてのトラフィック(ボックス自体のSSHなど)はeth0を使用することです。
これを行うには、次のようにルーティングテーブルを設定しました。
ip route add default via 136.2.178.33 src 136.2.178.37 table 1
ip route add default via 136.2.217.97 src 136.2.217.124 table 2
ip rule add fwmark 1 pref 1 table 1
ip rule add fwmark 2 pref 2 table 2
ソースIPはNATボックスのIPです。管理インターフェースが使用する一般的な基本パスを一般に表 0 に示します。
次に、マングルテーブルを使用してパケットを表示し、特定のルーティングテーブル(正しく理解されている場合)を使用し、特定のインターフェイスのNAT固有の送信元トラフィックを使用するようにiptablesを設定します。
iptables -A PREROUTING -t mangle -j CONNMARK --restore-mark
iptables -A PREROUTING -t mangle -m mark --mark 0x0 -s 10.6.0.0/20 -j MARK --set-mark 1
iptables -A PREROUTING -t mangle -m mark --mark 0x0 -s 10.1.0.0/16 -j MARK --set-mark 2
iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark
iptables -A POSTROUTING -t nat -s 10.6.0.0/20 -o eth4 -j MASQUERADE
iptables -A POSTROUTING -t nat -s 10.1.0.0/16 -o eth2 -j MASQUERADE
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j LOG --log-level debug
iptables -A FORWARD -m state --state NEW -s 10.6.0.0/20 -o eth4 -j ACCEPT
iptables -A FORWARD -m state --state NEW -s 10.1.0.0/16 -o eth2 -j ACCEPT
iptables -A FORWARD -j DROP
これをテストすると(クライアントシステムのgoogle.comの単純なwget)、トラフィックが内部インターフェイス(テストではeth3)に移動し、NATボックスの外部IPを外部インターフェイス(eth4)として使用することがわかります。ソースIP。したがって、NATはそれ自体で動作します。ただし、システムが応答パケットを受信するとeth4に移動する必要がありますが、何も起こりません。 NATをキャンセルせず、クライアントシステムに戻るためにeth3に表示されません。
内部インターフェース:
11:52:08.570462 IP 10.6.0.50.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 34573 ecr 0,nop,wscale 7], length 0
11:52:09.572867 IP 10.6.0.50.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 35576 ecr 0,nop,wscale 7], length 0
11:52:11.576943 IP 10.6.0.50.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 37580 ecr 0,nop,wscale 7], length 0
11:52:15.580846 IP 10.6.0.50.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 41584 ecr 0,nop,wscale 7], length 0
11:52:23.596897 IP 10.6.0.50.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 49600 ecr 0,nop,wscale 7], length 0
外部インターフェース:
11:52:08.570524 IP 136.2.178.37.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 34573 ecr 0,nop,wscale 7], length 0
11:52:08.609213 IP 74.125.198.103.80 > 136.2.178.37.50783: Flags [S.], seq 1197168065, ack 4030201377, win 42540, options [mss 1380,sackOK,TS val 1835608368 ecr 34573,nop,wscale 7], length 0
11:52:08.909188 IP 74.125.198.103.80 > 136.2.178.37.50783: Flags [S.], seq 1197168065, ack 4030201377, win 42540, options [mss 1380,sackOK,TS val 1835608668 ecr 34573,nop,wscale 7], length 0
11:52:09.572882 IP 136.2.178.37.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 35576 ecr 0,nop,wscale 7], length 0
11:52:09.611414 IP 74.125.198.103.80 > 136.2.178.37.50783: Flags [S.], seq 1197168065, ack 4030201377, win 42540, options [mss 1380,sackOK,TS val 1835609370 ecr 34573,nop,wscale 7], length 0
11:52:11.576967 IP 136.2.178.37.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 37580 ecr 0,nop,wscale 7], length 0
それでは、トラフィックが出てきて、iptablesが戻りトラフィックをクライアントに送り返さないのはなぜですか?パケットが離れて正しいインターフェイスに移動するため、ルーティングが正しいようです。それでは、iptablesは戻りトラフィックで何をしますか?
答え1
わかりました、わかりました。私がすることは、各ルーティングテーブルに内部サブネットパスを追加してから、着信および発信インターフェイストラフィックを制御するルールを設定することです。これにより、iptablesのmangleテーブルを使用してパケットを表示する必要はなく、通常の転送ルールとnatルールを使用するだけです。
ip route add 136.2.178.32/28 dev eth4 table 1
ip route add 10.6.0.0/20 dev eth3 table 1
ip route add default via 136.2.178.33 src 136.2.178.37 table 1
ip rule add iif eth4 table 1
ip rule add from 10.6.0.0/20 table 1
ip route add 136.2.217.96/28 dev eth2 table 2
ip route add 10.1.0.0/16 dev eth1 table 2
ip route add default via 136.2.217.113 src 136.2.217.124 table 2
ip rule add iif eth2 table 2
ip rule add from 10.1.0.0/16 table 2
iptables -A FORWARD -i eth2 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth2 -m state --state NEW -j LOG --log-level debug
iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT
iptables -A FORWARD -i eth4 -o eth3 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth3 -o eth4 -m state --state NEW -j LOG --log-level debug
iptables -A FORWARD -i eth3 -o eth4 -j ACCEPT
iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth4 -j MASQUERADE