FORWARD または OUTPUT チェーンに適用された iptables マークのポリシー ルーティングに一貫性がないのはなぜですか?

FORWARD または OUTPUT チェーンに適用された iptables マークのポリシー ルーティングに一貫性がないのはなぜですか?

iptables私はマークとルールを使用して、HTTPS 接続を SSH トンネル (-w) 経由でルーティングしていますiproute2が、この方法を実行する必要がある理由は、控えめに言っても不自然なため、ほとんどの代替ソリューションはまったく機能しない可能性があります。

tun0 デバイスは存在し、期待どおりに動作しており、OUTPUT チェーンで MARK を適用するとルーティングが機能しますが、何らかの理由で、FORWARD チェーンで MARK を適用するとルーティング ルールが機能しないようです。

OS は CentOS 6.7、カーネル 2.6.32、iptables 1.4.7 です。iptablesマーキングとログ記録:

# iptables -t mangle -A FORWARD -p tcp --dport 443 -j MARK --set-mark 1 
# iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1 
# iptables -t mangle -A POSTROUTING -m mark --mark 1 -j LOG --log-prefix "marked: "

ルールiproute2の設定:

# cat 201 tunneled >> /etc/iproute2/rt_tables
# ip rule add fwmark 1 table tunneled
# ip route add default via 192.168.100.1 dev tun1 table tunneled

結果を示すログからの小さなセクション:

Feb 17 19:11:35 nhopm kernel: marked: IN= OUT=eth0 SRC=192.168.82.2 DST=69.30.217.90 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=16734 DF PROTO=TCP SPT=34619 DPT=443 WINDOW=29200 RES=0x00 SYN URGP=0 MARK=0x1 
Feb 17 19:12:00 nhopm kernel: marked: IN= OUT=tun1 SRC=192.168.81.8 DST=69.30.217.90 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=62747 DF PROTO=TCP SPT=55349 DPT=443 WINDOW=14600 RES=0x00 SYN URGP=0 MARK=0x1 

ホストには 2 つの NIC がありeth0、192.168.81.8 はデフォルト ゲートウェイで、eth1192.168.82.8 は 192.168.82.0/24 のデフォルト ゲートウェイとして機能します。この設定に問題はなく、期待どおりに動作します。トンネル tun0 の遠端には 192.168.100.1 があります。

私は、詳細に詰め込みすぎずに、問題を説明する最も単純な状況に絞り込もうとしましたが、問題がどこにあるのかを見つけるために必要と思われる詳細をできるだけ多く提供します。コメントで役立つと思われることがあれば何でも聞いてください。うまくいけば、私はこれがどのように機能するかについてほんの少し誤解しているだけです。

回避策

上記のことを実行するための私の試みは、次のiptablesフロー図に基づいています。 iptables.infoより

これは、同じセットのルーティング決定FORWARD チェーンから来るパケットとは異なり、OUTPUT チェーンから来るパケットには適用されません。

これを機能させるには、FORWARD チェーンで行われたマーキングを PREROUTING チェーンの同様のエントリに置き換える必要がありました。

iptables -t mangle -A PREROUTING -p tcp --dport 443 ! -d 192.168.0.0/16 -j MARK --set-mark 1

いずれにせよ、それは実際のところ私のニーズに少し合っています。

ただし、私はまだこのことに関する文書を見つけていないので、これを回答とはしません。もし見つけたら、誰かが先に答えない限り、回答を提供します。

関連情報