web-dev-qa-db-ja.com

iptablesを使用したパケットのデフォルトマーク

Tomato 対応のWRT54GルーターでQOSスクリプトを設定しようとしています。スクリプトは必要なものの基本を実行します(ネットワーク上の特定のマシンの優先度が他のどのマシンよりも低いことを確認してください)が、他のすべてからの発信トラフィックに対して特定のルールを定義する必要があるという事実に満足していませんいくつかの「デフォルト」の動作を使用する代わりにマシン。

具体的には、パケットをマーク11と12でマークする2行を削除したいと思います。

iptables -t mangle -A PREROUTING -s 192.168.1.70 -j MARK --set-mark 10 
iptables -t mangle -A PREROUTING -s 192.168.1.70 -j RETURN
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.2-192.168.1.69 -j MARK --set-mark 11 
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.71-192.168.1.254 -j MARK --set-mark 12 
iptables -t mangle -A PREROUTING -j IMQ --todev 0 

Qdiskの作成時にそれらを削除(「デフォルト12」を追加)しようとしましたが、スループットが劇的に低下しました。また、すべてのパケットにいずれかでマークを付けようとしました

iptables -t mangle -A PREROUTING -j MARK --set-mark 12

または

iptables -t mangle -A PREROUTING -m mark --mark 0 -j MARK --set-mark 12

最初または最後のフィルタリングルールとして、しかしこれも機能しませんでした。

これが完全なスクリプトです...

 TCA = "tc class add dev br0" 
 TFA = "tc filter add dev br0" 
 TQA = "tc qdisc add dev br0" 
 SFQ = " sfq perturb 10 "
 tc qdisc del dev br0 root 
 tc qdisc add dev br0 root handle 1:htb default 10 
 tc class add dev br0 parent 1:classid 1:1 htbレート2400kbit 
 $ TCA親1:1 classid 1:10htbレート2300kbitceil 2400kbit prio 0 
 $ TCA親1:1 classid 1:11htbレート10kbitceil 2400kbit prio 1 
 $ TCA親1:1 classid 1:12htbレート10kbitceil 2400kbit prio 2 
 $ TCA親1:1 classid 1:13htbレート10kbitceil 2000kbit prio 4 
 $ TQA親1: 10ハンドル10:$ SFQ 
 $ TQA親1:11ハンドル11:$ SFQ 
 $ TQA親1:12ハンドル12:$ SFQ 
 $ TQA親1:13ハンドル13:$ SFQ 
 $ TFA親1:0 prio0プロトコルipハンドル10fw flowid 1:10 
 $ TFA親1:0 prio1プロトコルipハンドル11fw flowid 1:11 
 $ TFA親1:0 prio2プロトコルipハンドル12fw flowid 1:12 
 $ TFA親1:0 prio 4 protocol ip handle 13 fw flowid 1:13 
 iptables -t mangle -A POSTROUTING -p tcp --sport 80 -j MARK --set-mark 10 
 iptables -t mangle -A POSTROUTING- p tcp --sport 443 -j MARK --set-mark 11 
 iptables -t mangle -A POSTROUTING -p tcp --sport 995 -j MARK --set-mark 12 
 iptables- t mangle -A POSTROUTING -d 192.168.1.70 -j MARK --set-mark 13 
 
 
 TCAU = "tc class add dev imq0" 
 TFAU = "tc filter add dev imq0" 
 TQAU = "tc qdisc add dev imq0" 
 modprobe imq 
 modprobe ipt_IMQ 
 ip link set imq0 up 
 tc qdisc del dev imq0 root 
 tc qdisc add dev imq0 root handle 1:htb 
 tc class add dev imq0 parent 1:classid 1:1 htb rate 700kbit 
 $ TCAU parent 1 :1 classid 1:10 htb rate 7kbit ceil 500kbit prio 4 
 $ TCAU parent 1:1 classid 1:11 htb rate 30kbit ceil 700kbit prio 2 
 $ TCAU parent 1:1 classid 1:12 htbレート663kbitceil 700kbit prio 2 
 $ TQAU親1:10ハンドル10:$ SFQ 
 $ T QAU親1:11ハンドル11:$ SFQ 
 $ TQAU親1:12ハンドル12:$ SFQ 
 $ TFAU親1:0 prio4プロトコルipハンドル10fw flowid 1:10 
 $ TFAU親1:0 prio2プロトコルipハンドル11fw flowid 1:11 
 $ TFAU親1:0 prio2プロトコルipハンドル12fw flowid 1:12 
 
 iptables -t mangle -A PREROUTING -s 192.168.1.70 -j MARK --set-mark 10 
 
#
#これらの2行を回避するにはどうすればよいですか。他のすべてを「12」としてマークしますか?
#
 iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.2-192.168.1.69 -j MARK --set-mark 11 
 iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.71-192.168.1.254 -j MARK --set-mark 12 
 iptables -t mangle -A PREROUTING -j IMQ --todev 0 
3
Xavier Nodet

すべてのパケットに一致する最初のルールを追加することで、「デフォルトのアクション」を宣言することができました。 'mangle'テーブルは他のテーブルのようには機能せず、最初の一致するルールで停止するのではなく、すべてのルールに一致しようとしているようです。同じパケットに複数の変更を加えたい場合があるため、これは理にかなっています。

#別のルールが一致する場合を除いて、すべてがデフォルトのキューに入ります... 
 iptables -t mangle -A PREROUTING -s 192.168.1.0/24 -j MARK --set-mark 12 
 iptables -t mangle -A PREROUTING -s 192.168.1.70 -j MARK --set-mark 10 
 iptables -t mangle -A PREROUTING -j IMQ --todev 0 
1
Xavier Nodet