1

ルーティング/iptables パイプラインでのイベントの順序について質問があります。最初に私の設定を説明します。質問はこの記事の最後にあります。

Linux 4.4 でポリシー ルーティングと iptables を使用しています。

2 つのインターフェイスがあります: wan0 (ISP 向け) と vpn-crypto (vpn プロバイダー向けの tun デバイス)

一部のトラフィックを選択的に vpn にルーティングし、それ以外はすべて wan0 にルーティングしたい

ポリシー ルーティングを次のように実装します。

  • mangle の OUTPUT テーブルで、パターンに一致する NEW トラフィックにマーク 0xC を設定しました。テスト目的で、特定の IP アドレス (37.9.239.33) に向けられたトラフィックをマークします。もちろん、MASQUEARADE のような他の iptables も持っていますが、それはこの質問には関係ありません。

    すべての「マークされた」パケットを vpn にディスパッチする iproute2 ルールがあります。

    0: from all lookup local 190: from all fwmark 0x4/0x4 lookup vpn 400: from all fwmark 0x8/0x8 oif wan0 unreachable 32766: from all lookup main 32767: from all lookup default

    vpn テーブルには 1 つのルールのみが含まれ、vpn 経由ですべてが送信されます。

    default via 10.33.0.1 dev vpn-crypto proto static src 10.33.148.125

ping -c3 37.9.239.3337.9.239.33 が vpn 用にマークされた IP アドレスであるコマンドを使用してテストします。wan0 と vpn-crypto に接続された 2 つの tcpdump セッションは、予想どおり、パケットが効果的に出て vpn-crypto 経由で戻ってくることを示しています! これまでのところ、すべてがうまくいっています。

しかし、iptables を通過するパケット フローをログに記録しているときに、理解できない奇妙な動作が見られます。ログ トレースを FILTER.OUTPUT テーブルと MANGLE.POSTROUTING テーブルに挿入します。

この一連のイベントを観察します。

FILTER.OUTPUT: IN= OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=26960 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=1 MARK=0xc MANGLE.POSTROUTING: IN= OUT=vpn-crypto SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=26960 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=1 MARK=0xc MANGLE.POSTROUTING: IN= OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27049 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=2 FILTER.OUTPUT: IN= OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27100 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=2 MARK=0xc MANGLE.POSTROUTING: IN= OUT=vpn-crypto SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27100 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=2 MARK=0xc MANGLE.POSTROUTING: IN= OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27193 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=3 FILTER.OUTPUT: IN= OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27237 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=3 MARK=0xc MANGLE.POSTROUTING: IN= OUT=vpn-crypto SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27237 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=3 MARK=0xc

  1. MANGLE.OUTPUT のマークによる再ルーティングの決定は、FILTER.OUTPUT の前に発生すると予想していますが、後で発生するようです! 実際、すべての FILTER.OUTPUT パケットはまだ wan0 経由でルーティングされており、再ルーティングの決定がまだ行われていないことを示しています。Web で入手できるドキュメントは、この点に関して 50/50 に分かれています。例えば:

    どちらが正しいですか?誰かがこれに光を当てることができますか?

  2. 3 つの ping のコンテキストで、 MANGLE.POSTROUTING テーブルに、 wan0 経由でルーティングされた 2 つの予期しないパケットが表示されますこれらは「マークされていない」ものであり、vpn-crypto経由でルーティングされたものと重複しているようです。どうしてこれなの?また、tcpdump によると、このパケットはインターフェイスに到達しません (これは正しいです)。

    誰かがこの行動に光を当てることができますか?

4

0 に答える 0