iptablesにマーカーを一緒に追加する方法(MARKおよびCONNMARKターゲット)

iptablesにマーカーを一緒に追加する方法(MARKおよびCONNMARKターゲット)

パケットのパケットを表示するには、iptables通常、ファイアウォールスクリプトに次の行を追加します。

iptables -t mangle -A POSTROUTING -p tcp -m multiport --dports 80,443 -j MARK --set-mark 2

このトピックはやや複雑であることを知っていますが、1つのルールに集中します。上記の内容を追加すると、/proc/net/nf_conntrackファイル内の特定の項目にフラグが設定されます。

ipv4     2 tcp      6 3706 ESTABLISHED ... mark=2

この規則の問題は、他の一致規則(ソースまたは宛先アドレスなど)を追加し、他のタグを設定すると、以前のタグがユーザーが設定したとおりに書き換えられることです。しかし、マーカーを「追加」する方法があります。したがって、1つのルールセットmark=2と別のルールセットがある場合、mark=5結果タグはmark=7次のようになります。

私は以下に基づいて実際の例を持っています:ムワン3でも、よく理解できません。mangleツールを起動した後、テーブルがどのように見えるか、どのルールが追加されたかを知っています。

ここに画像の説明を入力してください。

したがって、メカニズムを理解するには、到着するパケットに実際に何が起こるのかを知る必要があります。ただし、この例では表示規則が異なります。

2 つの WAN インターフェイスがあります。タグに応じて、パケットは別のルーティングテーブルに入ります。では、ポート443(ポート1000など)に送信されたパケットは実際にはどうなりますか?誰もがルールを分析するのに役立ちますか?

答え1

宛先 "-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ルールを作成する必要があります。

から始めることができますこれ質問。

頑張ってください!

バージョン:

これ文書状態:

--set-xmark value[/mask]
    Zero out the bits given by mask and XOR value into the ctmark.

0x100マークがあり、xmarkを0x200/0xff00に設定しようとすると:

  • ctmark でマスクによって提供されるビットをクリアします。 0000 0001 0000 0000 AND NOT 1111 1111 0000 0000 --> 0000 0000 0000 0000
  • 値を ctmark に XOR します。

0x100マークがあり、xmarkを0x200/0xf000に設定しようとすると:

  • ctmarkのマスクによって提供されるビットをクリアします:0000 0001 0000 0000 AND NOT 1111 0000 0000 0000
  • 値を ctmark に XOR します。

0x100 マークがあり、xmark 0x100/0xf000 を設定します。

  • ctmarkのマスクによって提供されるビットをクリアします:0000 0001 0000 0000 AND NOT 1111 0000 0000 0000
  • 値を ctmark に XOR します。

0x100 マークがあり、xmark 0x100/0xff00 を設定します。

  • ctmark でマスクによって提供されるビットをクリアします。 0000 0001 0000 0000 AND NOT 1111 1111 0000 0000 --> 0000 0000 0000 0000
  • 値を ctmark に XOR します。

mwan3ファイルでは、状況は常に次のようになります。

  • 0x0 マークがあり、xmark 0x??00/0xff00 を設定してみてください。
  • ctmark でマスクによって提供されるビットをクリアします。 0000 0000 0000 0000 AND NOT 1111 1111 0000 0000 --> 0000 0000 0000 0000
  • ctmarkの値をXORします:0000 0000 0000 0000
  • このマスクとこれらの値を使用して、set-xmarkは単に古い値を置き換えます。

それではチェーンを見てみましょう。

  • 事前ルーティングは mwan3_hook にジャンプします。
  • mwan3_hook 復元 connmark to mark
  • mwan3_hookはmwan3_ifacesに新しい接続(tag = 0x0)を送信します。
  • mwan3_ifaces は mwan3_iface_wan に新しい接続を送信します。
  • mwan3_iface_wanは、ソースアドレスがipsetリストmwan3_connectedにある場合、インターフェイスeth0の新しい接続にフラグ0xff00を設定します。
  • mwan3_iface_wan は、タグ 0x100 をインターフェイス eth0 の他の新しい接続に設定します。
  • mwan3_ifaces は mwan3_iface_lte に新しい接続を送信します。
  • mwan3_iface_lteソースアドレスがipsetリストにあるときにインターフェイスwwanの新しい接続にフラグ0xff00を設定します。
  • mwan3_iface_lte タグ 0x200 をインターフェイス wwan の他の新しい接続に設定
  • 注:この時点で着信接続はすべてタグ付けされています。
  • mwan3_hook は mwan3_connected に接続を送信します。
  • 宛先アドレスが ipset リスト mwan3_connected にある場合、mwan3_connected はフラグ 0xff00 を設定します。
  • 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は、内部的にmwan3_policy_balancedに新しいtcp / 80またはtcp / 443接続を送信します。
  • mwan3_policy_balancedは、表示0x200を新しい接続の40%に設定します。
  • mwan3_policy_balanced は、フラグ 0x100 を別の新しい接続に設定します。
  • mwan3_hook復元マークをconnmarkに
  • 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は他のルーティングテーブルを通過します。

関連情報