Adressöversättning inom samma nät

Det går att adressöversätta till adresser som ligger på samma nät som originaladressen. Dock måste även avsändaradressen översättas.

Antag att vi har två servrar, server A med IP 10.0.0.1 och server B med IP 10.0.0.9.

B har en kör en webbserver som lyssnar på port 80/tcp.

Nu vill vi göra en portforward av port 80/tcp på A till port 80/tcp på B, så att vi kan ansluta till A, men komma till tjänsten på B.

Börja med att slå på IP forwarding i kerneln:

echo 1 > /proc/sys/net/ipv4/ip_forward

Om vi gör en vanlig DNAT (Destination Network Address Translation, eller adressöversättning av destinationsadressen) enligt följande regel kommer anropet gå fram:

iptables -t nat -A PREROUTING -d 10.0.0.1 -p tcp –dport 80 -j DNAT –to 10.0.0.9

Däremot kommer avsändaradressen fortfarande vara orörd. Om B inte har A som standardgateway, eller om avsändaradressen sitter på samma nät som A och B kommer B försöka skicka svaret direkt till avsändaren. Avsändaren förväntar sig dock få svaret från A, vilket var den ip som anslutningen skedde till.

För att få det att fungera måste även avsändaren översättas, så att B tror att det är A som är avsändaren. På så sätt tar svarspaketen rätt väg tillbaka, och A kan göra de översättningar som förväntas.

iptables -t nat -A POSTROUTING -d 10.0.0.9 -p tcp –dport 80 -j SNAT –to 10.0.0.1

Vi behöver alltså två regler för att få trafiken att flyta. Tänk även på att det kommer se ut som att anslutningarna kommer från A i loggfiler på B, eftersom originalavsändaren går förlorad.