Narzędzia użytkownika

Narzędzia witryny


sk1:routing_wstep

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
sk1:routing_wstep [2017/04/03 19:16]
jkonczak
sk1:routing_wstep [2019/04/08 15:03] (aktualna)
jkonczak [Tworzenie tablicy tras]
Linia 11: Linia 11:
   * cel - sieć docelową (np. 1.2.0.0/16, 192.168.2.0/​24)   * cel - sieć docelową (np. 1.2.0.0/16, 192.168.2.0/​24)
   * trasę - adres następnego skoku (np. 3.4.5.6, 192.168.1.1) lub/i port wyjściowy (slo1, tun2)   * trasę - adres następnego skoku (np. 3.4.5.6, 192.168.1.1) lub/i port wyjściowy (slo1, tun2)
-    ​* **typowo** podaje się tylko **adres następnego skoku** (czyli adres z bezpośrednio połączonej sieci) +    * typowo podaje się tylko adres następnego skoku (czyli adres z bezpośrednio połączonej sieci) 
-    ​* **dla sieci bezpośrednio podłączonych** podaje się tylko urządzenie+    * dla sieci bezpośrednio podłączonych podaje się tylko urządzenie
   * metrykę - koszt wysłania daną trasą pakietu, używany do porównywania tras, (np. 0, 1, 10, 679842)   * metrykę - koszt wysłania daną trasą pakietu, używany do porównywania tras, (np. 0, 1, 10, 679842)
   * <​html><​small></​html>​ w routerach CISCO (na których będą kolejne zajęcia) dodatkowo parametr //​administrative distance// (AD), który jest używany do rozstrzygania wyboru trasy jeśli więcej protokołów routingu poda trasę do tej samej sieci<​html></​small></​html>​   * <​html><​small></​html>​ w routerach CISCO (na których będą kolejne zajęcia) dodatkowo parametr //​administrative distance// (AD), który jest używany do rozstrzygania wyboru trasy jeśli więcej protokołów routingu poda trasę do tej samej sieci<​html></​small></​html>​
 +
 +==== Wybór trasy ====
  
 Schemat wyboru trasy: Schemat wyboru trasy:
-  * wybiera się trasy do sieci w których znajduje się docelowy adres o najdłuższej masce, np.:<​code>​172.21.0.0/​16 via 172.16.0.16 dev eth2+  * z tras do sieci w których znajduje się docelowy adres wybiera się trasy do sieci o najdłuższej masce, np.:<​code>​172.21.0.0/​16 via 172.16.0.16 dev eth2
 172.21.0.0/​24 via 172.16.0.24 dev eth2  172.21.0.0/​24 via 172.16.0.24 dev eth2 
 172.21.0.0/​28 via 172.16.0.28 dev eth2</​code>​ pakiet kierowany do 172.21.0.15 zostanie wysłany przez 172.16.0.28,​ a \\ pakiet kierowany do 172.21.0.55 zostanie wysłany przez 172.16.0.24 172.21.0.0/​28 via 172.16.0.28 dev eth2</​code>​ pakiet kierowany do 172.21.0.15 zostanie wysłany przez 172.16.0.28,​ a \\ pakiet kierowany do 172.21.0.55 zostanie wysłany przez 172.16.0.24
-  * jeśli wybór nie jest jednoznaczny - trasa o najmniejszym koszcie, np.:<​code>​150.254.44.0/​23 dev wlan0  proto kernel ​ scope link  src 150.254.45.39 ​ metric 2003+  * jeśli wybór nie jest jednoznaczny - trasa o najmniejszym koszcie, np.:<​code>​150.254.44.0/​23 dev wlan0  proto kernel ​ scope link  src 150.254.45.39 ​  ​metric 2003
 150.254.44.0/​23 dev wlan1  proto kernel ​ scope link  src 150.254.44.149 ​ metric 1002</​code>​tu zawsze wybrana jest trasa przez 150.254.44.149,​ jako ta o niższym koszcie 150.254.44.0/​23 dev wlan1  proto kernel ​ scope link  src 150.254.44.149 ​ metric 1002</​code>​tu zawsze wybrana jest trasa przez 150.254.44.149,​ jako ta o niższym koszcie
   * jeśli wybór nie jest jednoznaczny - pierwsza w tablicy.<​code>​default via 150.254.44.1 dev wlan0   * jeśli wybór nie jest jednoznaczny - pierwsza w tablicy.<​code>​default via 150.254.44.1 dev wlan0
Linia 28: Linia 30:
 Czasam jest ona traktowana "​specjalnie"​ – pokazywana w osobnym miejscu lub opisana jako //default// (zamiast adresu sieci). \\ Czasam jest ona traktowana "​specjalnie"​ – pokazywana w osobnym miejscu lub opisana jako //default// (zamiast adresu sieci). \\
 Jeśli nie – do zdefiniowania trasy domyślnej używa się adresu 0.0.0.0/0 Jeśli nie – do zdefiniowania trasy domyślnej używa się adresu 0.0.0.0/0
 +
 +==== Tworzenie tablicy tras ====
  
 Sposoby uzyskiwania informacji o trasach: Sposoby uzyskiwania informacji o trasach:
Linia 33: Linia 37:
   * użycie protokołów routingu   * użycie protokołów routingu
  
-Protokoły trasowania można podzielić ze względu na obszar działania:+Protokoły trasowania można podzielić ze względu na obszar działania ​(w odniesieniu do obszarów autonomicznych (AS) [[https://​en.wikipedia.org/​wiki/​Autonomous_system_(Internet)|[1]]]):
   * wewnętrzne (IGP - Interior Gateway Protocol), np. RIP, EIGRP, OSPF, IS-IS   * wewnętrzne (IGP - Interior Gateway Protocol), np. RIP, EIGRP, OSPF, IS-IS
-  * zewnętrzna (EGP - Exterior Gateway Protocol) - obecnie (jedynym) używanym jest BGP+  * zewnętrzne (EGP - Exterior Gateway Protocol) - obecnie (jedynym) używanym jest BGP
 albo ze względu na sposób działania: albo ze względu na sposób działania:
   * wektora odległości (distance vector), np. RIP, IGRP – wymieniają się z sąsiadami informacjami o osiągalnych sieciach; wyznaczają tylko koszty dotarcia do sieci   * wektora odległości (distance vector), np. RIP, IGRP – wymieniają się z sąsiadami informacjami o osiągalnych sieciach; wyznaczają tylko koszty dotarcia do sieci
Linia 44: Linia 48:
 ===== Wyświetlanie tablic routingu w systemie Linux ===== ===== Wyświetlanie tablic routingu w systemie Linux =====
 Narzędzia ''​route''​ (net-tools) i ''​ip route''​ (iproute2) Narzędzia ''​route''​ (net-tools) i ''​ip route''​ (iproute2)
 +
 Wypisanie trasy: Wypisanie trasy:
   * ''​route''​   * ''​route''​
   * ''​ip route [list/​show]''​\\   * ''​ip route [list/​show]''​\\
-Sprawdzenie ​trasy do konkretnego ​adresu: +Sprawdzenie ​adresu następnego skoku do podanego ​adresu ​docelowego
-  * ''​ip route get [addr]''​+  * ''​ip route get <addr>''​
  
 +++++ Przykłady poleceń | 
 +<​html><​pre>​
 +<b>/ # ip route</​b>​
 +<span title="​Trasa domyślna (trasa do 0.0.0.0/​0)"​ style="​background-color:​rgba(0,​255,​0,​0.2)">​default</​span>​ via 10.0.1.2 dev br0 proto dhcp src 10.0.1.3 metric 3 
 +<span title="​Cel trasy - sieć 10.0.0.0/​24"​ style="​background-color:​rgba(0,​255,​0,​0.2)">​10.0.0.0/​24</​span>​ <span title="​Następny skok" style="​background-color:​rgba(255,​0,​0,​0.2)">​via 10.0.1.1</​span>​ <span title="​Urządzenie przez które dostępny jest adres następnego skoku" style="​background-color:​rgba(255,​255,​0,​0.4)">​dev br0</​span>​ proto dhcp <span title="​Adres używany jako źródłowy,​ ma znaczenie jeśli komputer ma wiele adresów IP" style="​background-color:​rgba(0,​0,​255,​0.15)">​src 10.0.1.3</​span>​ <span title="​Metryka (koszt) trasy" style="​background-color:​rgba(255,​0,​255,​0.2)">​metric 3</​span> ​
 +<span title="​Trasa bez adresu IP następnego skoku oznacza, że komputery z tej sieci są bezpośrednio połączone do podanego interfejsu"​ style="​background-color:​rgba(255,​0,​0,​0.2)">​10.0.1.0/​24 dev br0</​span>​ proto dhcp scope link src 10.0.1.3 metric 3 
 +10.0.2.0/24 via 10.0.1.254 dev br0 
 +10.0.3.0/24 via 10.0.1.254 dev br0 metric 200 <span title="​Przykład dodatkowej opcji trasy" style="​background-color:​rgba(0,​0,​0,​0.1)">​mtu 1480</​span> ​
 +<span title="​Przykład specjalnego typu trasy (tutaj: zaznaczenie,​ że tych adresów nie ma w sieci)"​ style="​background-color:​rgba(0,​0,​0,​0.1)">​blackhole 10.0.4.0/​24</​span> ​
 +
 +<b>/ # route -n</​b>​
 +Kernel IP routing table
 +Destination ​    ​Gateway ​        ​Genmask ​        Flags Metric Ref    Use Iface
 +<span title="​Trasa domyślna"​ style="​background-color:​rgba(0,​255,​0,​0.2)">​0.0.0.0</​span> ​        ​10.0.1.2 ​       0.0.0.0 ​        ​UG ​   3      0        0 br0
 +<span title="​Cel trasy - sieć lub komputer 10.0.0.0, w zależności od maski podanej dalej" style="​background-color:​rgba(0,​255,​0,​0.2)">​10.0.0.0</​span> ​       10.0.1.1 ​       <span title="​Maska adresu docelowego – w tym przypadku /24, czyli jest to adres do sieci" style="​background-color:​rgba(0,​255,​0,​0.2)">​255.255.255.0</​span> ​  ​UG ​   3      0        0 br0
 +10.0.1.0 ​       <span title="​Brak adresu następnego skoku oznacza sieć bezpośrednio połączoną"​ style="​background-color:​rgba(255,​0,​0,​0.2)">​0.0.0.0</​span> ​        ​255.255.255.0 ​  ​U ​    ​3 ​     0        0 br0
 +10.0.2.0 ​       <span title="​Adres następnego skoku" style="​background-color:​rgba(255,​0,​0,​0.2)">​10.0.1.254</​span> ​     255.255.255.0 ​  ​UG ​   0      0        0 br0
 +10.0.3.0 ​       10.0.1.254 ​     255.255.255.0 ​  ​UG ​   200    0        0 br0
 +10.0.4.0 ​       0.0.0.0 ​        ​255.255.255.0 ​  ​U ​    ​0 ​     0        0 *
 +
 +<b>/ # ip route get 10.0.1.2</​b>​
 +10.0.1.2 dev br0 src 10.0.1.3 uid 1000 
 +    cache 
 +
 +<b>/ # ip route get 10.0.0.1</​b>​
 +10.0.0.1 via 10.0.1.1 dev br0 src 10.0.1.3 uid 1000 
 +    cache 
 +
 +<b>/ # ip route get 150.254.32.129</​b>​
 +150.254.32.129 via 10.0.1.2 dev br0 src 10.0.1.3 uid 1000 
 +    cache
 +
 +<b>/ # ip route get 10.0.3.3</​b> ​   ​
 +10.0.3.3 via 10.0.1.254 dev br0 src 10.0.1.3 uid 1000 
 +    cache mtu 1480
 +</​pre></​html>​
 +++++
 ===== Polityka systemu względem ruchu przechodzącego ===== ===== Polityka systemu względem ruchu przechodzącego =====
 Domyślnie Linux **nie** pozwala na przekazywanie (forward) pakietów. \\ Domyślnie Linux **nie** pozwala na przekazywanie (forward) pakietów. \\
 Aby zmienić to zachowanie, należy zmienić parametry jądra wykonując jedno z: Aby zmienić to zachowanie, należy zmienić parametry jądra wykonując jedno z:
-  * ''​sysctl net.ipv4.conf.all.forwarding=1''​ \\ <​html><​small></​html>​lista dostępnych zmiennych: ''​sysctl -a -r 'net\.ipv.\.conf\..*\.forwarding'​ ''​ \\ więcej informacji: ''​man 8 sysctl''​ oraz ''​man 7 ip''<​html></​small></​html>​+  * ''​sysctl net.ipv4.conf.all.forwarding=1''​ \\ <​html><​small></​html>​lista dostępnych zmiennych: ''​sysctl -a -r 'ip.*\.forwarding'​ ''​ \\ więcej informacji: ''​man 8 sysctl''​ oraz ''​man 7 ip''<​html></​small></​html>​
   * albo starsze: \\ ''​sysctl net.ipv4.ip_forward=1''​   * albo starsze: \\ ''​sysctl net.ipv4.ip_forward=1''​
  
Linia 80: Linia 122:
 Podanie samego urządzenia starczy **tylko** w specjalnych przypadkach,​ takich jak np. sieć bezpośrednio połączona. Podanie samego urządzenia starczy **tylko** w specjalnych przypadkach,​ takich jak np. sieć bezpośrednio połączona.
  
-Przy definiowaniu trasy można podać też inne opcje mające wpływ na wybór trasy (''​metric,​ src, mtu''​) jak i też na sposób wysyłania nią pakietów (np. opcje TCP).+Przy definiowaniu trasy można podać też inne opcje mające wpływ na wybór trasy (''​metric,​ src''​) jak i też na sposób wysyłania nią pakietów (np. ''​mtu'', ​opcje TCP).
  
 Pomoc: ''​man route''​ / ''​ man ip-route''​ Pomoc: ''​man route''​ / ''​ man ip-route''​
Linia 95: Linia 137:
 ''​ip r a blackhole 10.0.0.0/​8''​ \\ ''​ip r a blackhole 10.0.0.0/​8''​ \\
 ''​ip r a unreachable 10.0.0.0/​8''​ \\ ''​ip r a unreachable 10.0.0.0/​8''​ \\
-(zamiast takich tras zaleca się stosowanie firewalla) 
 <​html></​small></​html>​ <​html></​small></​html>​
  
 **[[http://​www.cs.put.poznan.pl/​mlibuda/​routing_stat_Linux.pdf|Slajdy]]** **[[http://​www.cs.put.poznan.pl/​mlibuda/​routing_stat_Linux.pdf|Slajdy]]**
-=====  ​Appendix: Komendy dla Windowsa =====+===== [Ekstra] Wybrane mechanizmy odrzucające nielogiczne pakiety w Linuksie ===== 
 + 
 +Linux, widząc pakiet wysłany z adresu A i wchodzący na interfejs If sprawdza, czy zna trasę do nadawcy A (2) i czy trasa do A jest przez interfejs If (1). Jeśli nie jest spełnione (2) lub (1), to pakiet jest odrzucany ​ o ile zmienna jądra ''​rp_filter''​ ma wartość odpowiednio 2 lub 1. 
 +\\ 
 +Aby wyłączyć to zachowanie, należy  
 +  sysctl net.ipv4.conf.all.rp_filter=0 
 +  sysctl net.ipv4.conf.p4p1.rp_filter=0 
 +  sysctl net.ipv4.conf.p4p2.rp_filter=0 
 + 
 +Linux, widząc pakiet od adresu A wchodzący na interfejs I sprawdza, czy nie ma ustawionego adresu A na którymś ze swoich interfejsów (czyli: czy ktoś się pod niego nie podszywa). Jeśli tak jest, pakiet jest odrzucany o ile zmienna ''​accept_local''​ nie jest włączona.\\ 
 +Aby wyłączyć to zachowanie, należy: ​  
 +  sysctl net.ipv4.conf.p4p1.accept_local=1 
 +  sysctl net.ipv4.conf.p4p2.accept_local=1 
 + 
 +Dokładny opis: https://​www.kernel.org/​doc/​Documentation/​networking/​ip-sysctl.txt 
 +===== [Ekstra] ​Komendy dla Windowsa =====
   * Obsługa tablicy routingu – polecenie ''​route''​   * Obsługa tablicy routingu – polecenie ''​route''​
     * Wyświetlenie tablicy tras ''​route print''​     * Wyświetlenie tablicy tras ''​route print''​
sk1/routing_wstep.1491239811.txt.gz · ostatnio zmienione: 2017/04/03 19:16 (edycja zewnętrzna)