W jądrach wersji 2.4 maskarada włączona jest bezpośrednio do kodu jądra i zintegrowana z firewallem. Za to wszystko odpowiada Netfilter. Maskarada ma na celu umożliwienie korzystania z sieci komputerowej z jednego adresu sieciowego. W praktyce wygląda to tak iż pod jednym (przeważnie publicznym) adresem IP działa cała sieć zamaskowana przez komputer z uruchomioną maskaradą.
Połączenia z sieci wewnętrznej wychodzące na zewnątrz są zamieniane na routerze z maskaradą tak aby wyglądały iż pochodzą właśnie z tego komputera a nie z sieci wewnętrznej. Podobnie jest z przychodzącymi odpowiedziami z serwerów internetowych. Router z maskaradą pamięta które zapytanie z którego komputera przyszło i odpowiednio kieruje przychodzące odpowiedzi. Dodatkowym plusem stosowania maskarady jest zwiększenie bezpieczeństwa sieci wewnętrznej, trudno atakować komputer, jeżeli nie wie się gdzie on jest…
Włączanie maskarady
Najpierw należy włączyć forwardowanie pakietów między kartami sieciowymi. Dokonujemy tego przez przekazanie parametru "1" do jądra przy pomocy systemu plików /proc.
echo "1" > /proc/sys/net/ipv4/ip_forward
Następnie w iptables wykorzystujemy opcję -j MASQUERADE. Należy podać przy interfejsie wychodzącym (przy parametrze -o) nazwę urządzenia, na którym nastąpi maskowanie.
Przykład 1 (maskowanie połączeń na łączu modemowym):
#iptables -t nat -P POSTROUTING DROP #iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Przykład 2 (maskowanie połączeń na łączu stałym gdzie zewnętrznym interfejsem jest eth1):
#iptables -t nat -P POSTROUTING DROP #iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Aby zobaczyć reguły maskowania powinniśmy użyć następującego polecenia
# iptables -t net -L -n
Obsługa przeszukiwania serwerów nazw
Problem obsługi zapytań typu DNS z sieci maskowanych można rozwiązać na dwa sposoby. Albo nakazać korzystanie komputerom za maskarady z serwerów DNS takich samych, jakich używa router. Albo uruchomić serwer pamięci podręcznej DNS. Wtedy każdy komputer z sieci wewnętrznej będzie odpytywał router zamiast słać zapytania do serwerów zewnętrznych. Rozwiązanie takie jest trudniejsze w wykonaniu ale zmniejsza ruch na łączu zewnętrznym.
Więcej o translacji adresów sieciowych
Więcej o translacji adresów jak również możliwościach IPTABLES w tym zakresie możesz poczytać w IPTABLES-HOWTO.