| 7-04-06 08:31 Usmjeravanje na temelju pravila: ip rule naredba
 
  piše ANA KUKEC
 
 
 U prošlom smo članku opisali tablice usmjeravanja u linux jezgrama >=2.2. Podsjetimo se, svakoj je tablici pridružen broj (od 1 do 255), pri čemu su tri broja rezervirana - za lokalnu tablicu (ID 255), glavnu tablicu (ID 255) i default tablicu (ID 253) kako to opisuje /etc/iproute2/rt_tables. Preostale tablice, prema potrebi, dodaje administrator. 
   Veći broj tablica usmjeravanja uz Rule-Policy bazu (RPDB) omogućavaju naprednije usmjeravanje od tradicionalnog, koje se bazira na poklapanju odredišne adrese paketa i adrese odredišne mreže zapisane u ruti s najdužim mrežnim prefiksom (longest-prefix match). Spomenuta baza propisuje redoslijed pregledavanja tablica usmjeravanja. Odluka o tome zadovoljava li neki paket pravilo iz RPDB baze donosi se na temelju nekih polja iz zaglavlja paketa: izvorišna adresa, odredišna adresa, ToS zastavice, fwmark oznaka i ulazno sučelje. 
   Ukoliko se paket ne može usmjeriti po nekoj od ruta iz priručnog spremnika ruta, tada se konzultiraju pravila iz RPDB baze. Svakom je pravilu pridružen broj (od 0 do 32767) pri čemu manji redni broj označava veći prioritet. Pregledavanje pravila počinje od pravila 0 pa nadalje. Za svako se pravilo, na temelju relevantnih polja iz zaglavlja paketa, provjerava da li paket zadovoljava pravilo. Ukoliko zadovoljava, pravilo propisuje koju je akciju potrebno izvesti; najčešće je to pregledavanje zadane tablice usmjeravanja u potrazi za rutom ili primjerice slanje ICMP unreachable poruke na izvorišnu adresu. Ukoliko je akcija bila potraga za rutom i ako je ruta u zadanoj tablici pronađena, paket se usmjerava prema toj ruti. U suprotnom, jezgra nastavlja prolazak kroz RPDB tablicu ka sljedećem pravilu. Ovaj se postupak ponavlja dok se ne prođe svih 32767 pravila iz baze.
   Ispišimo RPDB bazu naredbom ip rule:
   host:~# ip rule show
 0:      from all lookup local
 32766:  from all lookup main
 32767:  from all lookup default
   Kao i kod tablica, i kod pravila su 3 vrijednosti rezervirane. Pravilo 0 je najvišeg prioriteta što znači da se lokalna tablica uvijek provjerava prva (običaj je reći da su local, broadcast i nat rute visokog prioriteta). Zatim se prelazi na sljedeće pravilo, s brojem 32766 koje nalaže potragu za rutom u glavnoj tablici. Tek tada se potraga za rutom obavlja u default tablici, što je i razumljivo, jer ona obavlja funkciju naknadnog usmjeravanja. Kao što vidimo, ispred znaka „:“ nalazi se prioritet pravila, a nakon „:“ nalazi se pravilo (popis atributa iz zaglavlja paketa) i akcija koju je potrebno izvesti. U ovom slučaju, svaki paket zadovoljava pravilo, a zadana akcija je potraga za rutom u zadanoj tablici usmjeravanja.
   Pokažimo sada kako urediti RPDB bazu korištenjem naredbe ip rule. Tipovi pravila su isti kao i kod ruta. Najčešći tip je unicast pravilo (unicast se može izostaviti), koje kao akciju zadaje tablicu usmjeravanja u kojoj treba tražiti rutu. U sljedećem primjeru paketi s izvorišne adrese 192.168.122.128 i ulaznog sučelja eth1 usmjerit će se prema nekoj od ruta iz tablice 7, ukoliko takva ruta u njoj postoji:
    ip rule add unicast from 192.168.122.128 iif eth1 table 7
   Tip pravila nat uzrokuje prepisivanje izvorišne adrese paketa, a zatim se potraga za rutom obavlja u glavnoj tablici usmjeravanja:
    ip rule add nat 161.53.55.27 from 192.168.122.0/24
   Tip pravila unreachable ima za posljedicu generiranje poruke ICMP nedostupnosti na izvorišnu adresu paketa:
    ip rule add unreachable iif eth0 tos 0xf2 from 192.168.122.128/24
 Analogno tome dodaju se i pravila tipa prohibit i blackhole.
   Pogledajmo sada kako izgleda RPDB baza:
   host:~# ip rule show
 0:      from all lookup local
 32763:  from 192.168.122.128/24 iif eth0 tos 0xf2 lookup main
 32764:  from 192.168.122.0/24 lookup main map-to 161.53.55.27
 32765:  from 192.168.122.128 iif eth1 lookup 7
 32766:  from all lookup main
 32767:  from all lookup default
     Stateless NAT implementacija
   NAT bez stanja (stateless NAT) najjednostavniji je oblik NAT-a. Podrazumijeva prepisivanje izvorišne adrese u izlaznim paketima i prepisivanje odredišne adrese u ulaznim paketima. U praksi se opisana funkcionalnost češće implementira netfilterom, no pokazat ćemo kako je ostvariti ip naredbom. Neka je primjerice privatna adresa našeg računala 192.168.122.129, a javna adresa kojom je prepisujemo 161.53.55.99:
   (1)  host:~# ip route add nat 161.53.55.99 via 192.168.122.129
 (2)  host:~# ip rule add nat 161.53.55.99 from 192.168.122.129
 (3)  host:~# ip route flush cache
     host:~# ip route show table local type nat
     nat 161.53.55.99 via 192.168.122.129  table local  scope host
     host:~# ip rule show
     0:      from all lookup local 
     32765:  from 192.168.100.17 lookup main map-to 205.254.211.17 
     32766:  from all lookup main 
     32767:  from all lookup 253
 
 U lokalnu tablicu usmjeravanja dodajemo rutu tipa nat koja propisuje prepisivanje odredišne adrese. U svakom pristiglom paketu s odredišnom adresom 161.53.55.99, ta se adresa prepisuje privatnom adresom 192.168.122.129.
   Dodajemo pravilo tipa nat u RPDB bazu. Pravilo tipa nat propisuje prepisivanje izvorišne adrese. U svakom izlaznom paketu, izvorišna adresa 192.168.122.129 prepisuje se javnom adresom 161.53.55.99.
   Nakon bilo kakvih promjena u tablicama ili u RPDB bazi dobro je očistiti priručni spremnik ruta, kako bi se osigurali da će jezgra sigurno pretraživati tablice usmjeravanja, odnosno neće pogoditi neku "zaostalu" rutu u spremniku.
 
 
 |