===6.2.11. Tc-new (HTB)===
==6.2.11.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. Działa podobnie do modułu 'tc', lecz obsługuje funkcjonalność pozwalającą na powiązywanie taryf z komputerami. Skrypt tworzy tzw. kanały dla komputerów klienta przypisanych do tej samej taryfy. Przykładowo: dla klienta z dwoma komputerami przypisanymi do tej samej taryfy zostaną utworzone dwie klasy (upload i download) oraz po dwa filtry dla każdego komputera. W przypadku gdy klient ma dwie taryfy i do każdej po jednym komputerze powstaną po dwie klasy dla każdej taryfy i odpowiednia ilość filtrów. Wartość początkowa liczników (%x i %h w regułach) wynosi 100.
==6.2.11.2. Konfiguracja==
Wartości domyślne niektórych opcją są zgodne z modułem tc.
* file
Lokalizacja pliku wynikowego. Domyślnie: /etc/rc.d/rc.htb.
Przykład: file = /tmp/rc.htb
* command
Polecenie powłoki wykonywane po utworzeniu pliku. Domyślnie: "sh /etc/rc.d/rc.htb start".
Przykład: command = "chmod 700 /tmp/rc.htb; /tmp/rc.htb start"
* begin
Nagłówek skryptu. Domyślnie: jak w module tc
Przykład: begin = "#!/bin/bash\n$TC=/usr/local/sbin/tc\n"
* end
Stopka skryptu. Domyślnie: jak w module tc
Przykład: end = ""
* class_up
Definicja klasy dla uploadu, w której możemy użyć następujących zmiennych: %cid - ID klienta, %cname - nazwa klienta, %h - numer uchwytu klasy %uprate, %upceil. Domyślnie:
# %cname (ID:%cid)
$TC class add dev $WAN parent 2:1 classid 2:%h htb rate %upratekbit ceil %upceilkbit $BURST prio 2 quantum 1500
$TC qdisc add dev $WAN parent 2:%h esfq perturb 10 hash dst
Przykład: class_up = "$TC class add dev $WAN parent 2:1 classid 2:%h htb rate %upratekbit ceil %upceilkbit $BURST prio 2 quantum 1500"
* class_down
Definicja klasy dla downloadu, w której możemy użyć następujących zmiennych: %cid - ID klienta, %cname - nazwa klienta, %h - numer uchwytu klasy, %downrate, %downceil. Domyślnie:
$TC class add dev $LAN parent 1:2 classid 1:%h htb rate %downratekbit ceil %downceilkbit $BURST prio 2 quantum 1500
$TC qdisc add dev $LAN parent 1:%h esfq perturb 10 hash dst
Przykład: class_up = "$TC class add dev $LAN parent 1:2 classid 1:%h htb rate %downratekbit ceil %ceilceilkbit $BURST prio 2 quantum 1500"
* filter_up
Definicja filtrów dla ruchu w kierunku od hosta. Dozwolone zmienne: %n - nazwa hosta, %if - nazwa interfejsu sieci, %i - adres, %m - mac, %ms - lista adresów MAC hosta (oddzielonych przecinkiem), %o1, %o2, %o3, %o4 - oktety adresu dziesiętnie, %h1, %h2, %h3, %h4 - oktety adresu w zapisie szesnastkowym, %h - uchwyt klasy, %x - uchwyt filtra (unikalny numer reguły). Domyślnie:
# %n
$IPT -t mangle -A LIMITS -s %i -j MARK --set-mark %x
$TC filter add dev $WAN parent 2:0 protocol ip prio 5 handle %x fw flowid 2:%h
Przykład: class_up = "%n\n$IPT -A src%o3 -s %i -j CLASSIFY --set-class 2:%h\n"
* filter_down
Definicja filtrów dla ruchu w kierunku do hosta. Dozwolone zmienne: %n - nazwa hosta, %if - nazwa interfejsu sieci, %i - adres, %m - mac, %ms - lista adresów MAC hosta (oddzielonych przecinkiem), %o1, %o2, %o3, %o4 - oktety adresu dziesiętnie, %h1, %h2, %h3, %h4 - oktety adresu w zapisie szesnastkowym, %h - uchwyt klasy, %x - uchwyt filtra (unikalny numer reguły). Domyślnie:
$IPT -t mangle -A LIMITS -d %i -j MARK --set-mark %x
$TC filter add dev $LAN parent 1:0 protocol ip prio 5 handle %x fw flowid 1:%h
Przykład: class_down = "%n\n$IPT -A dst%o3 -d %i -j CLASSIFY --set-class 1:%h\n"
* climit
Definicja reguły dla limitu połączeń hosta. Dozwolone zmienne: %n - nazwa hosta, %if - nazwa interfejsu sieci, %i - adres, %m - mac, %ms - lista adresów MAC hosta (oddzielonych przecinkiem), %o1, %o2, %o3, %o4 - oktety adresu dziesiętnie, %h1, %h2, %h3, %h4 - oktety adresu w zapisie szesnastkowym, %climit - limit połączeń. Domyślnie:
$IPT -t filter -I FORWARD -p tcp -s %i -m connlimit --connlimit-above %climit -j REJECT
Przykład: climit = ""
* plimit
Definicja reguły dla limitu pakietów dla hosta. Dozwolone zmienne: %n - nazwa hosta, %if - nazwa interfejsu sieci, %i - adres, %m - mac, %ms - lista adresów MAC hosta (oddzielonych przecinkiem), %o1, %o2, %o3, %o4 - oktety adresu dziesiętnie, %h1, %h2, %h3, %h4 - oktety adresu w zapisie szesnastkowym, %plimit - limit pakietów. Domyślnie:
$IPT -t filter -I FORWARD -d %i -m limit --limit %plimit/s -j ACCEPT
$IPT -t filter -I FORWARD -s %i -m limit --limit %plimit/s -j ACCEPT
Przykład: 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 = "grupa1 grupa2"
* night_hours
Zakres godzin nocnych w formacie 24-godzinnym. Np. "22-5" oznacza, że podczas uruchomienia modułu w godzinach od 22:00 do 4:59 brane będą wartości taryf dla godzin nocnych. Obowiązują następujące ograniczenia dla formatu zakresu: nie może zawierać spacji, okres nie może zaczynać się przed godziną 18. Domyślnie: pusta.
Przykład: night_hours = "24-6"
* night_no_debtors
Włączenie tej opcji spowoduje sprawdzenie czy klient posiada nierozliczone faktury przeterminowane. Jeśli tak, taryfa nocna nie zostanie zastosowana. Domyślnie: false.
Przykład: night_no_debtors = tak
* night_deadline
Dodatkowy czas (ilość dni) po terminie płatności, zanim faktura zostanie potraktowana jako przeterminowana. Opcja działa w połączeniu z 'night_no_debtors'. Domyślnie: 0.
Przykład: night_deadline = 7
* multi_mac
Jeśli ustawiona na tak (yes, true) utworzony zostanie osobny rekord dla każdego adresu MAC. Tzn. jeśli komputer ma przypisanych kilka adresów MAC, będzie utworzone tyle wpisów ile tych adresów. Domyślnie: nie
Przykład: multi_mac = tak