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.
|