Hallo Allerseits, ich bin gerade dabei Traffic Shaping einzurichten. Die iptables richte ich mit fwBuilder ein und für das Shaping verwende ich TC.
Im Groben geht das ganze auch schon, allerdings habe ich ein Problem und eine Frage.
Das Problem:
Einige Ports sollten einen Mark Tag bekommen, den sie anscheint nicht annehmen, sondern einen anderen Marker erhalten. Die iptables Rules schauen so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | # Stream über Kabel Deutschland priorisieren $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp --dport 1935 -j MARK --set-mark 10 $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp --dport 1935 -j MARK --set-mark 10 $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp --dport 1935 -j CONNMARK --save-mark $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp --dport 1935 -j CONNMARK --save-mark # DNS über Kabel Deutschland priorisieren $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p udp -m udp --dport 53 -j MARK --set-mark 11 $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p udp -m udp --dport 53 -j MARK --set-mark 11 $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p udp -m udp --dport 53 -j CONNMARK --save-mark $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p udp -m udp --dport 53 -j CONNMARK --save-mark # TCP Port: 22,80,443,465,587 über Kabel Deutschland priorisieren $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp -m multiport --dports 587,80,443,25,465 -j MARK --set-mark 12 $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p udp -m udp --dport 1194 -j MARK --set-mark 12 $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp -m multiport --dports 587,80,443,25,465 -j MARK --set-mark 12 $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p udp -m udp --dport 1194 -j MARK --set-mark 12 $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp -m multiport --dports 587,80,443,25,465 -j CONNMARK --save-mark $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p udp -m udp --dport 1194 -j CONNMARK --save-mark $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp -m multiport --dports 587,80,443,25,465 -j CONNMARK --save-mark $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p udp -m udp --dport 1194 -j CONNMARK --save-mark $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp --dport 22 -j MARK --set-mark 12 $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp --dport 22 -j MARK --set-mark 12 $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp --dport 22 -j CONNMARK --save-mark $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp --dport 22 -j CONNMARK --save-mark # FTP und Data Verbindungen über Kabel Deutschland priorisiert $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp --dport 6000:7000 -j MARK --set-mark 13 $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp --dport 40000:65535 -j MARK --set-mark 13 $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp -m multiport --dports 21,20 -j MARK --set-mark 13 $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp --dport 6000:7000 -j MARK --set-mark 13 $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp --dport 40000:65535 -j MARK --set-mark 13 $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp -m multiport --dports 21,20 -j MARK --set-mark 13 $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp --dport 6000:7000 -j CONNMARK --save-mark $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp --dport 40000:65535 -j CONNMARK --save-mark $IPTABLES -t mangle -A OUTPUT -o eth0.10 -p tcp -m tcp -m multiport --dports 21,20 -j CONNMARK --save-mark $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp --dport 6000:7000 -j CONNMARK --save-mark $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp --dport 40000:65535 -j CONNMARK --save-mark $IPTABLES -t mangle -A POSTROUTING -o eth0.10 -p tcp -m tcp -m multiport --dports 21,20 -j CONNMARK --save-mark |
Alles was Mark 13 erhält rutscht später irgendwie in 12 rein...
iptables -L -n -t mangle gibt das aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | Chain PREROUTING (policy ACCEPT) target prot opt source destination CONNMARK all -- 0.0.0.0/0 0.0.0.0/0 CONNMARK restore Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination TCPMSS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU Chain OUTPUT (policy ACCEPT) target prot opt source destination CONNMARK all -- 0.0.0.0/0 0.0.0.0/0 CONNMARK restore MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1935 MARK set 0xa CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1935 CONNMARK save MARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 MARK set 0xb CONNMARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 MARK set 0xc CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 587,80,443,25,465 MARK set 0xc MARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 MARK set 0xc CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 587,80,443,25,465 CONNMARK save CONNMARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:6000:7000 MARK set 0xd MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:40000:65535 MARK set 0xd MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 21,20 MARK set 0xd CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:6000:7000 CONNMARK save CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:40000:65535 CONNMARK save CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 21,20 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1935 MARK set 0xf CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1935 CONNMARK save MARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 MARK set 0x10 CONNMARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 MARK set 0x11 CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 587,80,443,25,465 MARK set 0x11 MARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 MARK set 0x11 CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 587,80,443,25,465 CONNMARK save CONNMARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:6000:7000 MARK set 0x12 MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:40000:65535 MARK set 0x12 MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 21,20 MARK set 0x12 CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:6000:7000 CONNMARK save CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:40000:65535 CONNMARK save CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 21,20 CONNMARK save Chain POSTROUTING (policy ACCEPT) target prot opt source destination MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1935 MARK set 0xa CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1935 CONNMARK save MARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 MARK set 0xb CONNMARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 MARK set 0xc CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 587,80,443,25,465 MARK set 0xc MARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 MARK set 0xc CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 587,80,443,25,465 CONNMARK save CONNMARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:6000:7000 MARK set 0xd MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:40000:65535 MARK set 0xd MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 21,20 MARK set 0xd CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:6000:7000 CONNMARK save CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:40000:65535 CONNMARK save CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 21,20 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1935 MARK set 0xf CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1935 CONNMARK save MARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 MARK set 0x10 CONNMARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 MARK set 0x11 CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 587,80,443,25,465 MARK set 0x11 MARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 MARK set 0x11 CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 587,80,443,25,465 CONNMARK save CONNMARK udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 CONNMARK save MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:6000:7000 MARK set 0x12 MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:40000:65535 MARK set 0x12 MARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 21,20 MARK set 0x12 CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:6000:7000 CONNMARK save CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:40000:65535 CONNMARK save CONNMARK tcp -- 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 21,20 CONNMARK save |
Und TC gibt mit: tc -s -d class show dev eth0.10 das aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | class htb 1:11 parent 1:1 leaf 11: prio 1 quantum 1250 rate 100000bit ceil 12000Kbit linklayer ethernet burst 1600b/1 mpu 0b overhead 0b cburst 1597b/1 mpu 0b overhead 0b level 0 Sent 387856 bytes 4346 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 lended: 4342 borrowed: 4 giants: 0 tokens: 1686616 ctokens: 15781 class htb 1:1 root rate 12000Kbit ceil 12000Kbit linklayer ethernet burst 1597b/1 mpu 0b overhead 0b cburst 1597b/1 mpu 0b overhead 0b level 7 Sent 742395036 bytes 698178 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 lended: 241098 borrowed: 0 giants: 0 tokens: -15634 ctokens: -15634 class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 37500 rate 3000Kbit ceil 4000Kbit linklayer ethernet burst 1599b/1 mpu 0b overhead 0b cburst 1600b/1 mpu 0b overhead 0b level 0 Sent 388980550 bytes 302898 pkt (dropped 51, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 lended: 225502 borrowed: 77396 giants: 0 tokens: 27072 ctokens: 20312 class htb 1:13 parent 1:1 leaf 13: prio 3 quantum 50000 rate 4000Kbit ceil 12000Kbit linklayer ethernet burst 1600b/1 mpu 0b overhead 0b cburst 1597b/1 mpu 0b overhead 0b level 0 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 lended: 0 borrowed: 0 giants: 0 tokens: 50000 ctokens: 16656 class htb 1:12 parent 1:1 leaf 12: prio 2 quantum 42500 rate 3400Kbit ceil 12000Kbit linklayer ethernet burst 1599b/1 mpu 0b overhead 0b cburst 1597b/1 mpu 0b overhead 0b level 0 Sent 353026630 bytes 390934 pkt (dropped 651, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 110p requeues 0 lended: 226599 borrowed: 163698 giants: 0 tokens: -20047 ctokens: 318 class htb 1:14 parent 1:1 leaf 14: prio 4 quantum 12500 rate 1000Kbit ceil 12000Kbit linklayer ethernet burst 1600b/1 mpu 0b overhead 0b cburst 1597b/1 mpu 0b overhead 0b level 0 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 lended: 0 borrowed: 0 giants: 0 tokens: 200000 ctokens: 16656 class sfq 12:27b parent 12: (dropped 0, overlimits 0 requeues 0) backlog 81756b 54p requeues 0 allot 0 class sfq 12:29f parent 12: (dropped 0, overlimits 0 requeues 0) backlog 84784b 56p requeues 0 allot 1520 |
Hier noch meine TC Script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #!/bin/sh # environment DEV1=eth0.10 DEV2=eth0.11 TC=/sbin/tc CEIL1=12000kbit CEIL2=1000kbit # delete old rules $TC qdisc del dev $DEV1 ingress > /dev/null 2>&1 $TC qdisc del dev $DEV1 root > /dev/null 2>&1 $TC qdisc del dev lo root > /dev/null 2>&1 # default rule $TC qdisc add dev $DEV1 root handle 1: htb default 12 # distribute bandwidth $TC class add dev $DEV1 parent 1: classid 1:1 htb rate ${CEIL1} ceil ${CEIL1} $TC class add dev $DEV1 parent 1:1 classid 1:10 htb rate 3000kbit ceil 4000kbit prio 0 $TC class add dev $DEV1 parent 1:1 classid 1:11 htb rate 100kbit ceil ${CEIL1} prio 1 $TC class add dev $DEV1 parent 1:1 classid 1:12 htb rate 3400kbit ceil ${CEIL1} prio 2 $TC class add dev $DEV1 parent 1:1 classid 1:13 htb rate 4000kbit ceil ${CEIL1} prio 3 $TC class add dev $DEV1 parent 1:1 classid 1:14 htb rate 1000kbit ceil ${CEIL1} prio 4 # management $TC filter add dev $DEV1 parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10 $TC filter add dev $DEV1 parent 1:0 prio 2 protocol ip handle 11 fw flowid 1:11 $TC filter add dev $DEV1 parent 1:0 prio 3 protocol ip handle 13 fw flowid 1:13 $TC filter add dev $DEV1 parent 1:0 prio 4 protocol ip handle 14 fw flowid 1:14 $TC qdisc add dev $DEV1 parent 1:10 handle 10: sfq perturb 10 $TC qdisc add dev $DEV1 parent 1:11 handle 11: sfq perturb 10 $TC qdisc add dev $DEV1 parent 1:12 handle 12: sfq perturb 10 $TC qdisc add dev $DEV1 parent 1:13 handle 13: sfq perturb 10 $TC qdisc add dev $DEV1 parent 1:14 handle 14: sfq perturb 10 |
Gibt es bei den Mark Tags Begrenzungen, dass man nur eine gewissen Anzahl vergeben kann? Order ist das Format falsch und ich muss das in 0x013 etc. angeben? Oder woran liegt das?
Habt ihr da eine Idee?
Eine zweite Frage wäre:
Welche Möglichkeiten gäbe es, wenn die Internetverbindungen Seitens des Providers verlangsamt und man die Bandbreite für einen Port priorisieren möchte?
Z.B. haben wir normalerweise 12mbit Upload und ich will Port 1935 auf jeden Fall 3mbit geben. Das würde ja momentan meine Regeln erledigen. Was ist aber, wenn der Upload auf 2500kbit runter geht? Kann ich hier auch sagen, dass der Port 1935 alles bekommt was geht? Also irgendwie eine Dynamische neu Verteilung.