ターゲット "-j MARK --set-mark 2"は、以前の値が何であれ、パケットにマーク2を設定します。マークが消去されないようにするには、チェーンのパケットパスを-j ACCEPTで終了するだけです。例えば :
iptables -t mangle -A POSTROUTING -p tcp --dport 80 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -p tcp --dport 80 -j ACCEPT
iptables -t mangle -A POSTROUTING -d 8.8.8.8 -j MARK --set-mark 20
iptables -t mangle -A POSTROUTING -d 8.8.8.8 --dport 80 -j ACCEPT
# If you open a connection to 8.8.8.8:80, the mark will be 10
ただし、メインチェーン(例:POSTROUTING)またはカスタムチェーンにいる場合は注意が必要です。ACCEPTはメインチェーンを終了し、RETURNは現在のチェーンを終了します。それはあなたのニーズに依存します。
Mwan3の例については、フィルター、NAT、およびrawテーブルがなく、tc構成がないと、確認するのが非常に困難です。
ただし、次のようになります。
- 「mwan3_rules」チェーンは、dport 80または443の新しい接続から「mwan3_policy_balanced」チェーンにパケットを送信します
- 「mwan3_policy_balanced」チェーンは、パケットの40%にマーク200を設定し、他のパケットにはマーク100を設定しました
- 「mwan3_rules」チェーンは、dport 80または443以外の新しい接続から「mwan3_policy_wan_only」チェーンにパケットを送信します
- 「mwan3_policy_wan_only」チェーンはマーク100を設定しました
- マーク100のパケットはケーブルを通過し、マーク200のパケットはlteを通過すると思います
したがって、http(s)トラフィックの40%はLTEを通過し、60%はケーブルを通過し、その他はすべてケーブルを通過します。
2つのISPで接続の負荷分散を行うことが目的の場合、mwan3のルールは読みにくいため、独自のiptablesルールを最初から作成する必要があります。
this の質問から始めることができます。
幸運を !
エディション:
ドキュメント は次のように述べています。
--set-xmark value[/mask]
Zero out the bits given by mask and XOR value into the ctmark.
0x100マークがあり、xmark 0x200/0xff00を設定しようとする場合:
- Ctmarkで、マスクによって指定されたビットをクリアします。00000001 0000 0000 AND NOT 1111 1111 0000 0000-> 0000 0000 0000 0000
- CtmarkへのXOR値:0000 0000 0000 0000 XOR 0000 0010 0000 0000-> 0000 0010 0000 0000-> 0x200-> 512
0x100マークがあり、xmark 0x200/0xf000を設定しようとする場合:
- Ctmarkで、マスクによって指定されたビットをクリアします。00000001 0000 0000 AND NOT 1111 0000 0000 0000-> 0000 0001 0000 0000
- CtmarkへのXOR値:0000 0001 0000 0000 XOR 0000 0010 0000 0000-> 0000 0011 0000 0000-> 0x300-> 768
0x100マークがあり、xmark 0x100/0xf000を設定しようとする場合:
- Ctmarkで、マスクによって指定されたビットをクリアします。00000001 0000 0000 AND NOT 1111 0000 0000 0000-> 0000 0001 0000 0000
- CtmarkへのXOR値:0000 0001 0000 0000 XOR 0000 0001 0000 0000-> 0000 0000 0000 0000-> 0x000-> 0
0x100マークがあり、xmark 0x100/0xff00を設定しようとする場合:
- Ctmarkで、マスクによって指定されたビットをクリアします。00000001 0000 0000 AND NOT 1111 1111 0000 0000-> 0000 0000 0000 0000
- CtmarkへのXOR値:0000 0000 0000 0000 XOR 0000 0001 0000 0000-> 0000 0001 0000 0000-> 0x100-> 256
Mwan3ファイルでは、ケースは常にこれです。
- 0x0マークがあり、xmark 0x ?? 00/0xff00を設定しようとしています
- Ctmarkで、マスクによって指定されたビットをクリアします。00000000 0000 0000 AND NOT 1111 1111 0000 0000-> 0000 0000 0000 0000
- CtmarkへのXOR値:0000 0000 0000 0000 XOR ???? ???? 0000 0000-> ???? ???? 0000 0000-> 0x ?? 00 ->?
- このマスクとこれらの値を使用して、set-xmarkは以前の値を置き換えるだけです。
さて、チェーンを見てみましょう:
- プレルーティングはmwan3_hookにジャンプします。
- mwan3_hook connmarksをmarksに復元する
- mwan3_hookは新しい接続(マーク= 0x0)をmwan3_ifacesに送信します
- mwan3_ifacesは新しい接続をmwan3_iface_wanに送信します
- mwan3_iface_wanは、ソースアドレスがipsetリストにある場合、インターフェイスeth0からの新しい接続にマーク0xff00を設定しますmwan3_connected
- mwan3_iface_wanは、インターフェイスeth0上の他の新しい接続にマーク0x100を設定します
- mwan3_ifacesは新しい接続をmwan3_iface_lteに送信します
- mwan3_iface_lteは、送信元アドレスがipsetリストにある場合に、インターフェース0wanからの新しい接続にマーク0xff00を設定しますmwan3_connected
- mwan3_iface_lteは、マーク0x200をインターフェースwwanの他の新しい接続に設定します
- 注:この時点で、すべての着信接続はマークされています
- mwan3_hookはmwan3_connectedに接続を送信します
- mwan3_connectedは、宛先アドレスがipsetリストにある場合にマーク0xff00を設定しますmwan3_connected
- mwan3_hookは接続をmwan3_trackに送信します
- mwan3_trackは、宛先IPがipsetリストのmwan3_track_wanにある場合、接続にマーク0xff00を設定します。パケットは32バイト長のicmpエコーです
- mwan3_trackは、宛先IPがipsetリストmwan3_track_lteにある場合、接続にマーク0xff00を設定します。パケットは32バイト長のicmpエコーです
- mwan3_hookは接続をmwan3_rulesに送信します
- mwan3_rulesは新しいtcp/80またはtcp/443接続を内部からmwan3_policy_balancedに送信します
- mwan3_policy_balancedは、マーク0x200を新しい接続の40%に設定します
- mwan3_policy_balancedは、マーク0x100を他の新しい接続に設定します
- mwan3_hookマークをconnmarksに復元します
- mwan3_hookは、まだマークされていない接続にマーク0xff00を設定します(ICMPタイプ8、TCP/80、TCP/443ではなく、内部から)
- プレルーティングはfwmarkにジャンプしますが、チェーンは画面上にありません
- MSSを前方修正
- 出力はmwan3_hookにジャンプし、すべてのステップが再度実行されます。
最後に、3つの状態があります。
- 0x100マーク(256):WANからの接続、およびインターネットへのhttp(s)接続の60%
- 0x200マーク(512):lteからの接続、およびインターネットへのhttp(s)接続の40%
- 0xff00マーク(65280):その他のトラフィック
私たちはipルールを持っていないので、推測することしかできません:
- 0x100マークはWANルーティングテーブルを通過します
- 0x200マークはLTEルーティングテーブルを通過します
- 0xff00は別のルーティングテーブルを通過します