Syftet med att maskera IP:n är att ge datorer med privata, icke-routebara IP-adresser på ditt nätverk tillgång till internet genom datorn som sköter maskeringen. Trafik från ditt privata nätverk på väg mot internet måste manipuleras så att svaren går att routas tillbaka till datorn som skickade förfrågan. För att göra det måste kärnan modifiera ursprungs-IP-adressen i varje paket så att svaren kommer tillbaka till datorn, istället för att skickas till den privata IP-adressen som datorn som skickade förfrågan, vilket inte går att göra över internet. Linux använder spårning av anslutningar (conntrack) för att hålla ordning på vilka anslutningar som hör till vilka datorer, och skicka vidare alla paket baserat på det. Trafik som lämnar ditt privata nätverk "maskeras" därför så att de ser ut att komma från din gateway-dator. Den här funktionen kallas i Microsofts dokumentation Internetanslutningsdelning.
Du kan åstadkomma det här med en enda iptables-regel, som kan variera något beroende på din nätverkskonfiguration:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
Ovanstående kommando antar att ditt privata adressrum är 192.168.0.0/16 och att enheten som ansluts till internet ppp0. Syntaxet är uppdelat i bitar som följande:
-t nat -- regeln som ska läggas till nat-tabellen
-A POSTROUING -- regeln som ska läggas till (-A) till POSTROUTING-kedjan.
-s 192.168.0.0/16 -- den här regeln gäller all trafik som kommer från det specificerade adressutrymmet
-o ppp0 -- den här regeln gäller trafik som ska skickas genom den specificerade nätverksenheten
-j MASQUERADE -- trafik som matchar den här regeln ska "hoppa" (-j) till MASQUERADE-målet för att bli manipulerad enligt vad som beskrivs ovan
Varje kedja i filtertabellen (standardtabellen, där nästan all paketfiltrering utförs) har normalt policyn ACCEPT för all trafik, men om du skapar en brandvägg på din gatewaydator vill du kanske sätta stardardpolicyn till DROP eller REJECT, varpå all maskerad trafik måste släppas igenom FORWARD-kedjan för att ovanstående regel ska fungera:
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
Ovanstående kommandon kommer att tillåta alla anslutningar från ditt lokala nätverk till internet och all trafik som har med de anslutningarna att göra släpps tillbaka till datorn som skapade den dator som skapade dem.