Policy routing ============== Wstęp ----- Polityki routing są techniką pozwalającą na podejmowanie decyzji związanych z trasowaniem na podstawie polityk zdefiniowanych przez administratora. W tradycyjnym routingu, gdy router otrzymuje pakiet, podejmuje decyzję na podstawie adresu docelowego zawartego w pakiecie IP. Porównując adres IP z tablicą routingu wie dokąd skierować pakiet (next-hop). Bywają jednak sytuacje stwarzające potrzebę kierowania pakietów na podstawie innych przesłanek. Administrator sieci może stwierdzić, że chciałby podejmować decyzję o kierowaniu pakietów na podstawie adresu źródłowego, czy portu docelowego, wielkości pakietu, czy przenoszonego protokołu warstwy wyższej. .. note:: Uwaga !!! Fakt kierowania pakietami na podstawie adresu źródłowego nie oznacza, że jest to tzw. source routing. Tablice routingu w systemie Linux --------------------------------- W systemach Linux polityki routingu można tworzyć od wersji jądra 2.2. Umożliwia to pakiet iproute, który daje możliwość tworzenia wielu tablic routingu oraz reguł. Dodatkowo współpracując ze znacznikami nadawanymi przez iptables, administrator jest w stanie uzyskać bardzo zaawansowane polityki routingu. Tablice routingu w systemie Linux zdefiniowane są w pliku :file:`/etc/iproute2/rt_tables`. Można je także wyświetlić komendą: `ip rule show`. Wylistowanie wpisów w odpowiedniej tablicy routingu wykonuje się poleceniem: `ip route list table NAZWA`, np. poniższe polecenie pokaże nam tablicę główną. .. code-block:: bash #> ip route list table main Tworzenie nowych tablic wykonuje się dodając wpis do pliku :file:`rt_tables`, np. dodanie tablicy `mops`, można zrobić następująco: `echo 200 mops >> /etc/iproute2/rt_tables`. Numer 200 oznacza priorytet tablicy (niższy priorytet przetwarzany jest wcześniej). Reguły routingu --------------- Gdy mamy zdefiniowane tablice, można dodawać reguły, pakiet iproute2 pozwala nam na zdefiniowanie reguł bazujących na kilku wyznacznikach: adresie docelowym, adresie źródłowym, znaczniku iptables :samp:`fwmark`, polu tos, interfejsie wejściowym i wyjściowym, więcej informacji - `ip rule add help`. W poniższym przykładzie zdefiniowana zostanie polityka routingu na podstawie adresu źródłowego, mówiąca, że pakiety z adresu 192.168.1.2 będą przetwarzane przez tablicę `mops`, zdefiniowaną we wcześniejszym punkcie. Następnie stworzona zostaje trasa domyślna dla tablicy `mops`. .. code-block:: bash #> ip rule add from 192.168.1.2 table mops #> ip route add default via 1.2.3.4 dev eth0 table mops Reguły wbudowane w pakiet iproute2 dają dość ograniczone możliwości klasyfikowania ruchu. Więcej opcji można osiągnąć stosując mechanizm znaczników iptables. Poniższy przykład znakuje pakiety z adresu 192.168.1.2 wychodzące na port 90 znacznikiem 90. .. code-block:: bash #> iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 90 -j MARK --set-mark 90 Tak oznaczone pakiety, można klasyfikować za pomocą komendy `ip rule` i przełącznika `fwmark`. Ćwiczenia --------- .. _Rys. 1: .. figure:: img/policy-routing1.png :align: center :width: 700px Rys.1. Policy routing zadanie 1. Stwórz politykę routingu zgodnie z rysunkiem :ref:`Rys. 1`. Router A powinien trasować pakiety od komputera X bramą C, od komputera Y bramą B. 2. Korzystając z pakietu :samp:`iptables`, spraw, żeby ruch z komputera X na port 80 wychodził bramą B, reszta ruchu bramą C.