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.

Lokalizacja pliku wynikowego. Domyślnie: /etc/rc.d/rc.htb.

  Przykład: file = /tmp/rc.htb

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"

Nagłówek skryptu. Domyślnie: jak w module tc

  Przykład: begin = "#!/bin/bash\n$TC=/usr/local/sbin/tc\n"

Stopka skryptu. Domyślnie: jak w module tc

  Przykład: end = ""

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"

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"

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"

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"

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

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

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"

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"

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"

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

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

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