特定のドメイン名で特定のユーザーの帯域幅制限を制御するために、ルーターの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の概念について重要なことを見逃しましたか?
前もって感謝します。
NATエンジンの前にPREROUTINGでパケットをマークしているので、[〜#〜] postrouting [〜#〜]マングルテーブルを使用する必要があると思います。
IPTABLEチェーンをご覧ください: