tc
Różnice
Różnice między wybraną wersją a wersją aktualną.
Poprzednia wersja | |||
— | tc [Nieznana data] (aktualna) – edycja zewnętrzna (Nieznana data) 127.0.0.1 | ||
---|---|---|---|
Linia 1: | Linia 1: | ||
+ | ===6.2.10. Tc (HTB)=== | ||
+ | ==6.2.10.1. Opis== | ||
+ | |||
+ | Moduł generujący skrypt zawierający polecenia iptables i tc służące do ograniczania przepływności i limitowania połączeń klientom. Regułki dla komputerów można dowolnie zdefiniować i wykorzystać nie tylko do " | ||
+ | |||
+ | Domyślna polityka tworzenia klas htb zakłada utworzenie jednej klasy dla wszystkich komputerów klienta. Może to być zmienione za pomocą opcji ' | ||
+ | |||
+ | Konfiguracja domyślna zakłada, że twój system jest przystosowany do zastosowania htb oraz iptables z modułami limit, connlimit, mark i ipp2p. | ||
+ | |||
+ | ==6.2.10.2. Konfiguracja== | ||
+ | |||
+ | Masz do dyspozycji standardowe parametry takie jak customergroups, | ||
+ | |||
+ | * file | ||
+ | |||
+ | Lokalizacja pliku tymczasowego. Domyślnie: / | ||
+ | |||
+ | Przykład: file = /tmp/rc.htb | ||
+ | |||
+ | * command | ||
+ | |||
+ | Polecenie powłoki wykonywane po utworzeniu pliku. Domyślnie: "sh / | ||
+ | |||
+ | Przykład: command = "chmod 700 / | ||
+ | |||
+ | * begin | ||
+ | |||
+ | Nagłówek skryptu. Domyślnie: | ||
+ | |||
+ | < | ||
+ | "# | ||
+ | IPT=/ | ||
+ | TC=/sbin/tc | ||
+ | LAN=eth0 | ||
+ | WAN=eth1 | ||
+ | BURST=" | ||
+ | |||
+ | stop () | ||
+ | { | ||
+ | $IPT -t mangle -D FORWARD -i $WAN -j LIMITS >/ | ||
+ | $IPT -t mangle -D FORWARD -o $WAN -j LIMITS >/ | ||
+ | $IPT -t mangle -F LIMITS >/ | ||
+ | $IPT -t mangle -X LIMITS >/ | ||
+ | $IPT -t mangle -F OUTPUT | ||
+ | $IPT -t filter -F FORWARD | ||
+ | $TC qdisc del dev $LAN root 2> /dev/null | ||
+ | $TC qdisc del dev $WAN root 2> /dev/null | ||
+ | } | ||
+ | |||
+ | start () | ||
+ | { | ||
+ | stop | ||
+ | $IPT -t mangle -N LIMITS | ||
+ | $IPT -t mangle -I FORWARD -i $WAN -j LIMITS | ||
+ | $IPT -t mangle -I FORWARD -o $WAN -j LIMITS | ||
+ | # incomming traffic | ||
+ | $IPT -t mangle -A OUTPUT -j MARK --set-mark 1 | ||
+ | $TC qdisc add dev $LAN root handle 1:0 htb default 3 r2q 1 | ||
+ | $TC class add dev $LAN parent 1:0 classid 1:1 htb rate 99000kbit ceil 99000kbit quantum 1500 | ||
+ | $TC class add dev $LAN parent 1:1 classid 1:2 htb rate | ||
+ | $TC class add dev $LAN parent 1:1 classid 1:3 htb rate 98500kbit ceil 98500kbit prio 9 quantum 1500 | ||
+ | $TC qdisc add dev $LAN parent 1:3 esfq perturb 10 hash dst | ||
+ | # priorities for ICMP, TOS 0x10 and ports 22 and 53 | ||
+ | $TC class add dev $LAN parent 1:2 classid 1:20 htb rate 50kbit ceil 500kbit $BURST prio 1 quantum 1500 | ||
+ | $TC qdisc add dev $LAN parent 1:20 esfq perturb 10 hash dst | ||
+ | $TC filter add dev $LAN parent 1:0 protocol ip prio 2 u32 match ip sport 22 0xffff flowid 1:20 | ||
+ | $TC filter add dev $LAN parent 1:0 protocol ip prio 2 u32 match ip sport 53 0xffff flowid 1:20 | ||
+ | $TC filter add dev $LAN parent 1:0 protocol ip prio 1 u32 match ip tos 0x10 0xff flowid 1:20 | ||
+ | $TC filter add dev $LAN parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:20 | ||
+ | # serwer -> LAN | ||
+ | $TC filter add dev $LAN parent 1:0 protocol ip prio 4 handle 1 fw flowid 1:3 | ||
+ | |||
+ | # outgoing traffic | ||
+ | $TC qdisc add dev $WAN root handle 2:0 htb default 11 r2q 1 | ||
+ | $TC class add dev $WAN parent 2:0 classid 2:1 htb rate 120kbit ceil 120kbit | ||
+ | # priorities for ACK, ICMP, TOS 0x10, ports 22 and 53 | ||
+ | $TC class add dev $WAN parent 2:1 classid 2:10 htb rate 60kbit ceil 120kbit prio 1 quantum 1500 | ||
+ | $TC qdisc add dev $WAN parent 2:10 esfq perturb 10 hash dst | ||
+ | $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip protocol 6 0xff \ | ||
+ | match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 1 match u8 0x10 0xff at 33 flowid 2:10 | ||
+ | $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip dport 22 0xffff flowid 2:10 | ||
+ | $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip dport 53 0xffff flowid 2:10 | ||
+ | $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip tos 0x10 0xff flowid 2:10 | ||
+ | $TC filter add dev $WAN parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:10 | ||
+ | # serwer -> Internet | ||
+ | $TC class add dev $WAN parent 2:1 classid 2:11 htb rate 30kbit ceil 120kbit prio 2 quantum 1500 | ||
+ | $TC qdisc add dev $WAN parent 2:11 esfq perturb 10 hash dst | ||
+ | $TC filter add dev $WAN parent 2:0 protocol ip prio 3 handle 1 fw flowid 2:11 | ||
+ | $TC filter add dev $WAN parent 2:0 protocol ip prio 9 u32 match ip dst 0/0 flowid 2:11 | ||
+ | </ | ||
+ | Przykład: begin = "# | ||
+ | |||
+ | * end | ||
+ | |||
+ | Stopka skryptu. Domyślnie: | ||
+ | < | ||
+ | } | ||
+ | |||
+ | case " | ||
+ | ' | ||
+ | start | ||
+ | ;; | ||
+ | ' | ||
+ | stop | ||
+ | ;; | ||
+ | ' | ||
+ | echo "WAN Interface" | ||
+ | echo " | ||
+ | $TC class show dev $WAN | grep root | ||
+ | $TC class show dev $WAN | grep -v root | sort | nl | ||
+ | echo "LAN Interface" | ||
+ | echo " | ||
+ | $TC class show dev $LAN | grep root | ||
+ | $TC class show dev $LAN | grep -v root | sort | nl | ||
+ | ;; | ||
+ | *) | ||
+ | echo -e " | ||
+ | ;; | ||
+ | esac | ||
+ | </ | ||
+ | Przykład: end = "" | ||
+ | |||
+ | * one_class_per_host | ||
+ | |||
+ | Określa politykę tworzenia klas htb. W ustawieniu domyślnym wszystkie komputery klienta zostaną wrzucone do jednej klasy. Ustawienie tej opcji na ' | ||
+ | |||
+ | Przykład: one_class_per_host = 1 | ||
+ | |||
+ | * limit_per_host | ||
+ | |||
+ | Określa politykę tworzenia limitów połączeń/ | ||
+ | |||
+ | Przykład: limit_per_host = 1 | ||
+ | |||
+ | * host_mark_up | ||
+ | |||
+ | Reguła markująca dla każdego komputera. Domyślnie: | ||
+ | |||
+ | < | ||
+ | # %n | ||
+ | $IPT -t mangle -A LIMITS -s %i -j MARK --set-mark %x | ||
+ | </ | ||
+ | Przykład: host_mark_up = "" | ||
+ | |||
+ | * host_mark_down | ||
+ | |||
+ | Reguła markująca dla każdego komputera. Domyślnie: | ||
+ | |||
+ | $IPT -t mangle -A LIMITS -d %i -j MARK --set-mark %x | ||
+ | |||
+ | Przykład: host_mark_down = "" | ||
+ | |||
+ | * host_htb_down | ||
+ | |||
+ | Zestaw reguł dla każdego komputera, wykonywanych gdy uprate i downrate są różne od zera. Domyślnie: | ||
+ | |||
+ | < | ||
+ | $TC class add dev $LAN parent 1:2 classid 1:%x htb rate %downratekbit ceil %downceilkbit $BURST prio 2 quantum 1500 | ||
+ | $TC qdisc add dev $LAN parent 1:%x esfq perturb 10 hash dst | ||
+ | $TC filter add dev $LAN parent 1:0 protocol ip prio 5 handle %x fw flowid 1:%x | ||
+ | </ | ||
+ | Przykład: host_htb_down = "" | ||
+ | |||
+ | * host_htb_up | ||
+ | |||
+ | Zestaw reguł dla każdego komputera, wykonywanych gdy uprate i downrate są różne od zera. Domyślnie: | ||
+ | |||
+ | < | ||
+ | $TC class add dev $WAN parent 2:1 classid 2:%x htb rate %upratekbit ceil %upceilkbit $BURST prio 2 quantum 1500 | ||
+ | $TC qdisc add dev $WAN parent 2:%x esfq perturb 10 hash dst | ||
+ | $TC filter add dev $WAN parent 2:0 protocol ip prio 5 handle %x fw flowid 2:%x | ||
+ | </ | ||
+ | Przykład: host_htb_up = "" | ||
+ | |||
+ | * host_climit | ||
+ | |||
+ | Regułka z ograniczeniem ilości równoczesnych połączeń tcp. Wykonywana gdy climit w bazie jest różny od zera. Domyślnie: | ||
+ | |||
+ | $IPT -t filter -I FORWARD -p tcp -s %i -m connlimit --connlimit-above %climit -m ipp2p --ipp2p -j REJECT | ||
+ | |||
+ | Przykład: host_climit = "$IPT -t filter -I FORWARD -p tcp -s %i -m connlimit --connlimit-above -j REJECT" | ||
+ | |||
+ | * host_plimit | ||
+ | |||
+ | Regułka z ograniczeniem ilości pakietów w jednostce czasu (tutaj sekunda). Wykonywana gdy plimit w bazie jest różny od zera. Domyślnie: | ||
+ | |||
+ | < | ||
+ | $IPT -t filter -I FORWARD -p tcp -d %i -m limit --limit %plimit/s -m ipp2p --ipp2p -j ACCEPT | ||
+ | $IPT -t filter -I FORWARD -p tcp -s %i -m limit --limit %plimit/s -m ipp2p --ipp2p -j ACCEPT | ||
+ | </ | ||
+ | |||
+ | Przykład: host_plimit = "" | ||
+ | |||
+ | * networks | ||
+ | |||
+ | Lista nazw sieci, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie sieci). | ||
+ | |||
+ | Przykład: networks = "lan1 lan2" | ||
+ | |||
+ | * customergroups | ||
+ | |||
+ | Lista nazw grup klientów, które mają być brane pod uwagę. Wielkość liter nie ma znaczenia. Domyślnie: pusta (wszystkie grupy). | ||
+ | |||
+ | Przykład: customergroups = " |
tc.txt · ostatnio zmienione: 2013/01/15 00:00 (edycja zewnętrzna)