Musisz stworzyæ takie reguły NAT, by kernel wiedział które połączenia
poddawaæ modyfikacjom i jak to robiæ. By tego dokonaæ, używamy bardzo
szczegółowego narzêdzia iptables i wskazujemy kernelowi jak
zmieniæ tabelê NAT przez podanie opcji '-t nat'.
Tabela NAT zawiera dwie listy zwane 'łañcuchami' (ang. chains): każda reguła w takiej liście jest sprawdzana dopóki któraś nie pasuje. Te dwa łañcuchy nazywają siê: PREROUTING (dla DNAT, ponieważ pakiety najpierw do nas docierają), POSTROUTING (dla SNAT, po którym pakiety opuszczają nasz system) i OUTPUT (dla DNAT, dla pakietów generowanych lokalnie).
Poniższy rysunek ilustrowałby to dosyæ dobrze gdybym miał choæ trochê talentu artystycznego:
_____ _____
/ \ / \
PREROUTING -->[Decyzja ]----------------->POSTROUTING----->
\D-NAT/ [Rutingu ] \S-NAT/
| ^
| |
| |
| |
| |
| |
| |
--------> Local Process ------
W każdym z wêzłów powyżej, gdy dociera do niego pakiet, sprawdzane jest z jakim połączeniem jest skojarzony. Jeśli jest to nowe połączenie, sprawdzamy odpowiedni łañcuch w tabeli NAT by sprawdziæ co mamy z nim zrobiæ. Odpowiedź której udziela tabela dotyczyæ bêdzie wszystkich przyszłych pakietów dla tego połączenia.
iptables pobiera pewną liczbê standardowych opcji tak jak
podano to niżej. Wszystkie opcje z podwójnym znakiem minus mogą byæ skrócone,
tak długo jak iptables może je rozróżniæ od innych możliwych znaczeñ.
Jeśli twój kernel ma wkompilowaną obsługê iptables jako moduł, musisz go
najpierw załadowaæ: 'insmod ip_tables'.
Najważniejszą opcją jest wybierająca tabelê, '-t'. Dla
wszystkich operacji które dotyczą NAT, używaæ bêdziesz opcji '-t nat'.
Drugą ważną opcją jest '-A', która służy do dodawania nowej reguły
na koniec łañcucha (np. '-A POSTROUTING'), oraz '-I', która
służy do dodawania jej na początku (np. '-I PREROUTING').
Możesz podawaæ adresy źródłowe ('-s' lub '--source') i
docelowe ( '-d' lub '--destination' ) pakietów których ma
dotyczyæ NAT. Opcjom tym może towarzyszyæ pojedyñczy adres IP (np. 192.168.1.1),
nazwa (np. www.gnumonks.org) lub adres sieci (np. 192.168.1.0/24 albo
192.168.1.0/255.255.255.0).
Możesz również wskazaæ interfejs wejściowy ( '-i' lub
`--in-interface' ) lub wyjściowy ( '-o' lub
`--out-interface'), ale który konkretnie zależy również od
tego który łañcuch wskażesz: w łañcuchu PREROUTING możesz wskazaæ tylko
interfejs wejściowy, a w łañcuchu POSTROUTING możesz wskazaæ tylko
interfejs wyjściowy. Jeśli użyjesz niewłaściwego, iptables
zwrócą błąd.
Powiedziałem wyżej, że możesz wskazaæ adresy źródłowe i docelowe. Jeśli ominiesz adres źródłowy, pasowaæ bêdzie każdy adres źródłowy. Jeśli pominiesz adres docelowy, pasowaæ bêdzie każdy adres docelowy.
Możesz również wskazaæ konkretny protokół ( '-p' lub
`--protocol' ), taki jak TCP czy UDP; pasowaæ bêdą pakiety
tylko z tego protokołu. Głównym powodem dla którego chciałbyś
wskazaæ konkretny protokół jest to, że z każdym z nich skojarzone
są dodatkowe opcje: w szczególności '--source-port'
i '--destination-port' (które można skróciæ do
`--sport' i '--dport').
Opcje te pozwalają ci określiæ o jakie pakiety chodzi z dokładnością do portu źródłowego i docelowego. Jest to użyteczne w przekazywaniu na przykład wywołañ do serwerów WWW (port TCP 80 lub 8080) i jednocześnie pomijaniu innych pakietów.
Opcjom tym musi towarzyszyæ opcja '-p' (która ma ten
skutek uboczny, że doładowywuje współdzielone rozszerzenie
biblioteczne dla konkretnego protokołu). Do wskazania numeru
portu możesz używaæ numerów, lub nazw z pliku /etc/services.
Wszystkie sposoby na które możesz wskazaæ określony typ pakietów
wyszczególnione zostały w podrêczniku (man iptables).