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
すべてのパケットに一致する最初のルールを追加することで、「デフォルトのアクション」を宣言することができました。 '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