Narzędzia użytkownika

Narzędzia witryny


sk2:tc

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
sk2:tc [2021/10/07 08:00]
jkonczak [htb]
sk2:tc [2023/01/10 10:35] (aktualna)
jkonczak [htb]
Linia 7: Linia 7:
  
 "​Kolejka"​ domyślnie jest kolejką – system wyciąga pakiety z kolejki w kolejności w jakiej zostały dodane. "​Kolejka"​ domyślnie jest kolejką – system wyciąga pakiety z kolejki w kolejności w jakiej zostały dodane.
-Można jednak zastąpić to zachowanie (dyscyplinę kolejkowania – Queueing DISCipline, qdisc) innym.+Można jednak zastąpić to zachowanie (dyscyplinę kolejkowania – Queueing DISCipline, qdisc) innym [[https://​en.wikipedia.org/​wiki/​Network_scheduler|[2]]].
  
 Pozwala to kształtować ruch – ograniczać prędkość i priorytetyzować wybrane pakiety ([[https://​en.wikipedia.org/​wiki/​Traffic_shaping|Traffic shaping]]). Pozwala to kształtować ruch – ograniczać prędkość i priorytetyzować wybrane pakiety ([[https://​en.wikipedia.org/​wiki/​Traffic_shaping|Traffic shaping]]).
Linia 136: Linia 136:
  
 ===== prio + filtry ===== ===== prio + filtry =====
 +
 +==== prio ==== 
  
 **[[http://​www.cs.put.poznan.pl/​ddwornikowski/​sieci/​sieci2/​ts.html#​prio]]** **[[http://​www.cs.put.poznan.pl/​ddwornikowski/​sieci/​sieci2/​ts.html#​prio]]**
  
-''​tc qdisc add dev eth0 handle 1 root prio''​ – ustawienie klasowego qdisc, kolejki priorytetowej+''​tc qdisc add dev //eth0// handle ​//1// root prio''​ – ustawienie klasowego qdisc, kolejki priorytetowej
  
-''​tc class show dev eth0''​ – wyświetlenie klas (prio automatycznie tworzy 3 klasy) \\ +''​tc class show dev //eth0//''​ – wyświetlenie klas (prio automatycznie tworzy 3 klasy) \\ 
-''​tc -s class show dev eth0''​ – wyświetlenie statystyk klas+''​tc -s class show dev //eth0//''​ – wyświetlenie statystyk klas
  
 //Zadanie 3. // Zmień dyscyplinę kolejkową na ''​p4p1''​ na ''​prio''​. Wyświetl listę klas i ich statystyki. Zbadaj gdzie domyślnie trafia ruch (patrząc na statystyki lub używając ''​bmon''​). //Zadanie 3. // Zmień dyscyplinę kolejkową na ''​p4p1''​ na ''​prio''​. Wyświetl listę klas i ich statystyki. Zbadaj gdzie domyślnie trafia ruch (patrząc na statystyki lub używając ''​bmon''​).
  
-Filtry: +==== Filtry ​==== 
-  * Podstawa działania: pakiet ​który trafia do "​kolejki"​ pakietów czekających na wysłanie trafia wpierw do root qdisc. Ten decyduje co z nim zrobić: przegląda filtry i jeśli któryś pasuje – stosuje go. Jeśli żaden nie pasuje – wykonuje domyślną akcję. ​Dla ''​prio''​ domyślna akcja to wybór jednej z 3 kolejek bazując na polu TOS w nagłówku IP (''​man tc-prio''​) + 
-  ​* ​''​tc filter show dev eth0'' ​– listuje filtry +Pakiet ​który trafia do "​kolejki"​ pakietów czekających na wysłanie trafia wpierw do root qdisc. ​\\ Ten decyduje co z nim zrobić: przegląda filtry i jeśli któryś pasuje – stosuje go. Jeśli żaden nie pasuje – wykonuje domyślną akcję. 
-  ​* ​Filtr ** ''​u32'' ​** +\\ 
-    * Przykładowy filtr: \\ ''​tc filter add dev eth0 parent 1:0 protocol ip u32 match ip dst 150.254.32.130/​32 flowid 1:​3''​ <​code>​+Np. dla ''​prio''​ domyślna akcja to wybór jednej z 3 kolejek bazując na polu TOS w nagłówku IP (''​man tc-prio''​). 
 + 
 +Polecenie ​''​tc filter show dev //eth0//''​ listuje filtry. \\ //Uwaga:// samo <​html><​span style="​text-decoration:​ line-through;"></​html>''​tc filter show''<​html></​span></​html>​ zwróci pusty wynik nawet jeśli dodano filtry. 
 + 
 +<​html><​small></​html>​ 
 + 
 +Więcej informacji o filtrach: http://​www.lartc.org/​howto/​lartc.qdisc.filters.html 
 + 
 +=== Filtr ''​u32'' ​=== 
 +++++ Filtr u32 | 
 +  ​* Przykładowy filtr: \\ ''​tc filter add dev eth0 parent 1:0 protocol ip u32 match ip dst 150.254.32.130/​32 flowid 1:​3''​ <​code>​
             dodaj           na klasie/​dycyplinie ​                                             dodaj           na klasie/​dycyplinie ​                                
              /​-\ ​               /​-------\ ​                       ​              /​-\ ​               /​-------\ ​                       ​
Linia 156: Linia 168:
  ​\_____/ ​            ​\____/ ​                  ​\_______/ ​         \______________________________________________/ ​  ​\_____/ ​            ​\____/ ​                  ​\_______/ ​         \______________________________________________/ ​
  ​filtry ​         na urządzeniu ​          filtr ma dotyczyć IP   filtr '​u32' ​   dopasowujący się do IP     ​wymuszający przydzielenie do klasy 1:​3</​code>​  ​filtry ​         na urządzeniu ​          filtr ma dotyczyć IP   filtr '​u32' ​   dopasowujący się do IP     ​wymuszający przydzielenie do klasy 1:​3</​code>​
-    ​* Przetestuj działanie filtra komendą \\ ''​netperf -H 150.254.32.130 & netperf -H 150.254.32.131 ; wait''​ +  ​* Przetestuj działanie filtra komendą \\ ''​netperf -H 150.254.32.130 & netperf -H 150.254.32.131 ; wait''​ 
-    * Przetestuj działanie filtra komendą \\ ''​netperf -t UDP_STREAM -H 150.254.32.130 & netperf -t UDP_STREAM -H 150.254.32.131 ; wait''​ +  * Przetestuj działanie filtra komendą \\ ''​netperf -t UDP_STREAM -H 150.254.32.130 & netperf -t UDP_STREAM -H 150.254.32.131 ; wait''​ 
-    * Wypisz statystyki dla klas, wygeneruj ruch, wypisz ponownie statystyki i porównaj \\ ''​tc -s class show dev eth0''​ \\ <​html><​small></​html>​Możesz też skorzystać z programu ''​bmon''​ do monitorowania na bieżąco przepustowości dla klas \\ (żeby zainstalować ''​bmon'',​ użyj polecenia ''​zypper install bmon''​)<​html></​small></​html>​ +  * Wypisz statystyki dla klas, wygeneruj ruch, wypisz ponownie statystyki i porównaj \\ ''​tc -s class show dev eth0''​ \\ <​html><​small></​html>​Możesz też skorzystać z programu ''​bmon''​ do monitorowania na bieżąco przepustowości dla klas \\ (żeby zainstalować ''​bmon'',​ użyj polecenia ''​zypper install bmon''​)<​html></​small></​html>​ 
-    * Filtr ''​u32''​ w ''​tc''​ pozwalają filtrować:​ +  * Filtr ''​u32''​ w ''​tc''​ pozwalają filtrować:​ 
-      * adresy IP, źródłowe i docelowe +    * adresy IP, źródłowe i docelowe 
-      * protokoły warstwy transportowej (icmp, tcp, udp) ++ przykład|: \\ ''​tc filter add dev eth0 parent 1:0 u32 match ip protocol 1 0xff flowid 1:​1''​++ +    * protokoły warstwy transportowej (icmp, tcp, udp) ++ przykład|: \\ ''​tc filter add dev eth0 parent 1:0 u32 match ip protocol 1 0xff flowid 1:​1''​++ 
-      * pole TOS w nagłówku IP (https://​en.wikipedia.org/​wiki/​Differentiated_services) +    * pole TOS w nagłówku IP (https://​en.wikipedia.org/​wiki/​Differentiated_services) 
-      * <​html><​small></​html>​porty protokołów warstwy transportowej (ssh, dns, http, openvpn, xmpp) ++ przykład | (nie do końca poprawny): \\ ''​tc filter add dev eth0 parent 1:0 u32 match ip sport 443 0xffff match ip protocol 6 0xff flowid 1:​1''​++<​html></​small></​html>​ +    * <​html><​small></​html>​porty protokołów warstwy transportowej (ssh, dns, http, openvpn, xmpp) ++ przykład | (nie do końca poprawny): \\ ''​tc filter add dev eth0 parent 1:0 u32 match ip sport 443 0xffff match ip protocol 6 0xff flowid 1:​1''​++<​html></​small></​html>​
-  * Filtr ** ''​fw''​ ** +
-    * Do bardziej złożonego filtrowania można użyć filtru ''​fw'',​ który pozwala odpowiednio oznaczony ruch (np. przez iptables) wrzucać do wybranej klasy +
-    * Dodawanie filtrów z wykorzystaniem iptables: \\ ''​iptables -A OUTPUT -d 150.254.32.130 -j MARK --set-mark 130''​ – nakazuje iptables zaznaczać pakiety \\ ''​tc filter add   dev eth0   ​parent 1:0   ​handle 130   fw flowid 1:​3''​ – nakazuje pakiety zaznaczone jako 130 wrzucać do klasy 1:3 +
-  * http://​www.lartc.org/​howto/​lartc.qdisc.filters.html+
  
-//​Zadanie ​4. // Dodaj filtr typu ''​u32''​ który pakiety do wybranego komputera będzie umieszczał w klasie o niższym priorytecie. Korzystając ze statystyk klas sprawdź czy filtr działa. Sprawdź (np. netperfem) jakie są prędkości wysyłania danych jeśli jednocześnie dane są wysyłane tego komputera i do dowolnego innego.+//​Zadanie ​4a. // Dodaj filtr typu ''​u32''​ który pakiety do wybranego komputera będzie umieszczał w klasie o niższym priorytecie. Korzystając ze statystyk klas sprawdź czy filtr działa. Sprawdź (np. netperfem) jakie są prędkości wysyłania danych jeśli jednocześnie dane są wysyłane tego komputera i do dowolnego innego. 
 +++++ 
 + 
 +<​html></​small></​html>​ 
 +=== Filtr ''​fw''​ === 
 +  * W jądrze Linuksa z każdym pakietem jest powiązanych kilka znaczników (MARK, CONNMARK, SECMARK). 
 +  * Wartość znaczników można ustawiać (i sprawdzać) w filtrach iptables / nft, np: \\ ''​iptables -A OUTPUT -d 150.254.32.130 -j MARK --set-mark 0x130''​ \\    – dodaje znacznik 0x130 do pakietów idących do adresu 150.254.32.130 
 +  * Filtr ''​fw''​ dodany do qdisc kieruje do wybranej klasy pakiety ze znacznikiem MARK pasującym do podanego ''​handle'',​ np: \\ ''​tc filter add   dev eth0   ​parent 1:0   ​handle 0x130   fw flowid 1:​3''​ \\    – nakazuje pakiety zaznaczone jako 0x130 wrzucać do klasy 1:3 \\ <​html><​small><​pre>​ 
 +           ​dodaj ​            na qdisc/​klasie ​            ​wybór filtra fw   
 +           ​\---/ ​             \----------/ ​                   \--/ 
 +<b>tc filter ​  ​add ​  dev eth0     ​parent 1:0     ​handle 0x130     ​fw ​     flowid 1:​3</​b>​ 
 +\______/ ​        /​________\ ​                 /​____________\ ​          /​__________\ 
 + ​filtry ​        na urządzeniu ​            ​identyfikator używany ​     umieszcza pasujące 
 +                                          jednocześnie jako          pakiety w klasie 1:3 
 +                                          szukana wartość MARK</​pre></​small></​html>​ 
 +  * <​html><​small></​html>​Wartość ''​handle''​ może być też podana jako wartość z maską, np: \\ ''​tc filter add  dev eth0  parent 1:0  handle 0x30/​0xf0 ​ fw flowid 1:​3''​ \\ pozwala to na wykorzystywanie jedynie części znacznika MARK w tc (i umożliwia wykorzystanie reszty np. w filtrowaniu)<​html></​small></​html>​ 
 + 
 +//Zadanie 4b. // Dodaj filtr typu ''​fw''​ i regułę iptables tak żeby pakiety idące wybranego komputera były umieszczane w klasie o niższym priorytecie. Korzystając ze statystyk klas sprawdź czy ustawienia działają. Sprawdź (np. netperfem) jakie są prędkości wysyłania danych jeśli jednocześnie dane są wysyłane tego komputera i do dowolnego innego.
  
 //Zadanie 5. // Dodaj filtr typu ''​fw''​ i regułę iptables które pakiety protokołu icmp będą umieszczały w kolejce o najwyższym priorytecie. Korzystając ze statystyk klas sprawdź czy filtr działa. //Zadanie 5. // Dodaj filtr typu ''​fw''​ i regułę iptables które pakiety protokołu icmp będą umieszczały w kolejce o najwyższym priorytecie. Korzystając ze statystyk klas sprawdź czy filtr działa.
Linia 178: Linia 203:
  
 ++++ Gotowa konfiguracja htb (do użycia na laboratoriach w przypadku braku czasu)| ​ ++++ Gotowa konfiguracja htb (do użycia na laboratoriach w przypadku braku czasu)| ​
-<​code>​tc qdisc del dev p4p1 root+<​code>​tc qdisc del dev em1 root
  
-tc qdisc add dev p4p1 root handle 1 htb default 32+tc qdisc add dev em1 root handle 1 htb default 32
  
-tc class add dev p4p1 parent 1:0 classid 1:1  htb rate 100mbit +tc class add dev em1 parent 1:0 classid 1:1  htb rate 100mbit 
-tc class add dev p4p1 parent 1:1 classid 1:2  htb rate 60mbit +tc class add dev em1 parent 1:1 classid 1:2  htb rate 60mbit 
-tc class add dev p4p1 parent 1:classid 1:21 htb rate 20mbit ceil  60mbit +tc class add dev em1 parent 1:classid 1:21 htb rate 20mbit ceil  60mbit 
-tc class add dev p4p1 parent 1:classid 1:22 htb rate 40mbit ceil  60mbit +tc class add dev em1 parent 1:classid 1:22 htb rate 40mbit ceil  60mbit 
-tc class add dev p4p1 parent 1:1 classid 1:3  htb rate 40mbit ceil 100mbit +tc class add dev em1 parent 1:1 classid 1:3  htb rate 40mbit ceil 100mbit 
-tc class add dev p4p1 parent 1:classid 1:31 htb rate 30mbit ceil 100mbit +tc class add dev em1 parent 1:classid 1:31 htb rate 30mbit ceil 100mbit 
-tc class add dev p4p1 parent 1:classid 1:32 htb rate 10mbit ceil  50mbit+tc class add dev em1 parent 1:classid 1:32 htb rate 10mbit ceil  50mbit
  
-tc filter add dev p4p1 parent 1:0 handle 0x21 fw flowid 1:21 +tc filter add dev em1 parent 1:0 handle 0x21 fw flowid 1:21 
-tc filter add dev p4p1 parent 1:0 handle 0x22 fw flowid 1:22 +tc filter add dev em1 parent 1:0 handle 0x22 fw flowid 1:22 
-tc filter add dev p4p1 parent 1:0 handle 0x31 fw flowid 1:31 +tc filter add dev em1 parent 1:0 handle 0x31 fw flowid 1:31
-tc filter add dev p4p1 parent 1:0 handle 0x32 fw flowid 1:32+
  
 iptables -F  iptables -F 
-iptables -A OUTPUT -d 10.0.0.0/​30  ​-j MARK --set-mark 0x21 +iptables -A OUTPUT -d lab-net-X ​-j MARK --set-mark 0x21 
-iptables -A OUTPUT -d 10.0.0.4/​30  ​-j MARK --set-mark 0x22 +iptables -A OUTPUT -d lab-net-Y ​-j MARK --set-mark 0x22 
-iptables -A OUTPUT -d 10.0.0.8/​30  ​-j MARK --set-mark 0x31 +iptables -A OUTPUT -d lab-net--j MARK --set-mark ​0x31
-iptables -A OUTPUT -d 10.0.0.12/​30 ​-j MARK --set-mark ​0x32+
 </​code>​ </​code>​
 ++++ ++++
Linia 217: Linia 240:
 W HTB zwykle tworzy się klasy tak, by bezpośrednio do qdisc była podpięta jedna klasa, definiująca tylko rate (maksymalny dla łącza), a pod nią były podpięte kolejne, definiujące rate i ceil (których sumaryczny rate ani pojedynczy ceil jest nie większy niż możliwości łącza). W HTB zwykle tworzy się klasy tak, by bezpośrednio do qdisc była podpięta jedna klasa, definiująca tylko rate (maksymalny dla łącza), a pod nią były podpięte kolejne, definiujące rate i ceil (których sumaryczny rate ani pojedynczy ceil jest nie większy niż możliwości łącza).
  
-Dodaj regułę wrzucającą wybrany ruch do klasy 1:3, sprawdź pożyczanie 
  
 Klasy w HTB mogą tworzyć dowolną hierarchię (drzewo) – można wpinać klasy do klas, np: Klasy w HTB mogą tworzyć dowolną hierarchię (drzewo) – można wpinać klasy do klas, np:
Linia 232: Linia 254:
   * na pakiety idące do drugiego wybranego komputera było zagwarantowane 20mbit ruchu z możliwością pożyczania do 100mbit   * na pakiety idące do drugiego wybranego komputera było zagwarantowane 20mbit ruchu z możliwością pożyczania do 100mbit
   * na pozostałe pakiety było zagwarantowane 70mbit ruchu z możliwością pożyczania do 100mbit   * na pozostałe pakiety było zagwarantowane 70mbit ruchu z możliwością pożyczania do 100mbit
 +
 //Zadanie 6b. // Dodaj odpowiednie filtry i przetestuj czy działają korzystając ze statystyk klas. //Zadanie 6b. // Dodaj odpowiednie filtry i przetestuj czy działają korzystając ze statystyk klas.
-//Zadanie 6c. // Sprawdź przestrzeganie limitów i działanie pożyczania używając programu netperf.+ 
 +//Zadanie 6c. // Sprawdź przestrzeganie limitów i działanie pożyczania używając programu netperf ​/ iperf / nc+pv
  
 ===== Dodawanie qdisc do klas ===== ===== Dodawanie qdisc do klas =====
sk2/tc.1633586419.txt.gz · ostatnio zmienione: 2021/10/07 08:00 przez jkonczak