web-dev-qa-db-ja.com

NAT)を使用してiptablesでパケットをマークする

特定のドメイン名で特定のユーザーの帯域幅制限を制御するために、ルーターのbashスクリプトを作成する必要があります。

このために、私はiptablesを使用して、制限されたドメインからプライベートネットワークのユーザーIPアドレスに着信するパケットをマークしています。 user_ip/domain_ipのカップルごとに、パケットにマークを付けることができる単一のキーがあります。

これらのルールを次のようにマングルテーブルに追加します。

$iptables -t mangle -A PREROUTING -p tcp -d $userIp -s $restrictedDom -j MARK --set-mark $id 
$iptables -t mangle -A PREROUTING -p tcp -d $userIp -s $restrictedDom -j RETURN

私のNAT natテーブルの設定(eth0は私のインターネットインターフェイスであり、Lanインターフェイスにはtap0を使用しました)は

$iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Lanユーザーのパケットは、マングルテーブルのルールに一致する必要がありますが、キャッチされません。

例:(PREROUTING CHAINのテーブルマングル)これは、たとえば、LANネットワークのユーザー192.168.0.2のslashdot.orgからのパケットをマークするためのものです。

Chain PREROUTING (policy ACCEPT 14858 packets, 7215129 bytes)
pkts      bytes target     prot opt in     out     source               destination      
 0        0 MARK       tcp  --  *      *       216.34.181.45        192.168.0.2         MARK xset 0x9/0xffffffff 
 0        0 RETURN     tcp  --  *      *       216.34.181.45        192.168.0.2         

ただし、ルーターのインターネットインターフェイスでslashdot.orgからのパケットにマークを付けようとすると、パケットがキャッチされ、LAN内のコンピューターもslashdot.orgにアクセスすると、同じルールでマークが付けられます。

したがって、NAT変換のために問題があり、いつ、どの順序でルールを適用するのか正確にはわかりません。

初めて、私のNAT設定はiptablesで良いか不完全ですか?ルールまたはiptablesの概念について重要なことを見逃しましたか?

前もって感謝します。

4
Mulot

NATエンジンの前にPREROUTINGでパケットをマークしているので、[〜#〜] postrouting [〜#〜]マングルテーブルを使用する必要があると思います。

IPTABLEチェーンをご覧ください:

IPTABLES CHAIN DRAWING

8
Natim