===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