Mit Network Address Translation kann ein ganzes lokales Netzwerk, mit nur einer IP, ins Internet.
Für eine ISDN-Verbindung muss zum Beispiel der Datenaustausch zwischen der Netzwerkkarte und der ISDN-Karte wie folgt hergestellt werden:
Parameter, die in der Kernelkonfigurationsdatei aktiviert werden müssen, damit sie in den Kernel einkompiliert werden können:
options IPFIREWALL options IPDIVERT options IPFIREWALL_VERBOSE options IPFIREWALL_DEFAULT_TO_ACCEPT
oder man läd die entsprechenden Module beim Systemstart:
# echo 'ipfw_load="YES"' >> /boot/loader.conf # echo 'ipdivert_load="YES"' >> /boot/loader.conf
In der Testphase ist es auch eine gute Idee, die Option net.inet.ip.fw.default_to_accept auf "1" zu setzen:
# echo 'net.inet.ip.fw.default_to_accept="1"' >> /etc/sysctl.conf
diese Option entspricht der Kerneloption options IPFIREWALL_DEFAULT_TO_ACCEPT.
den NATD von Hand starten:
# /sbin/natd -dynamic -n isp0
hierdurch wird der NATD bootfest gemacht:
# echo 'natd_enable="YES"' >> /etc/rc.conf # echo 'natd_interface="isp0"' >> /etc/rc.conf # echo 'natd_flags="-dynamic -u"' >> /etc/rc.conf
hiermit wir der Rechner zum Gateway (sysctl net.inet.ip.forwarding=1):
# echo 'gateway_enable="YES"' >> /etc/rc.conf
die Firewall ohne Beschränkungen aktivieren:
# echo 'firewall_enable="YES"' >> /etc/rc.conf # echo 'firewall_type="OPEN"' >> /etc/rc.conf
Diese Regeln muss man nicht unbedingt von Hand eingeben.
Wenn der NATD aktiviert ist (natd_enable=YES), dann
werden die divert-Regeln automatisch aktiviert.
Jetzt müssen noch die Regeln gesetzt werden, mit denen der Datenaustausch zwischen den beiden Karten von Statten geht. Grundsätzlich sind hier eigentlich nur die beiden Regeln "200" und "300" nötig:
ipfw add 101 deny tcp from any to any 515 via isp0 ipfw add 102 deny udp from any to any 515 via isp0 ipfw add 200 divert natd all from any to any via isp0 ipfw add 300 pass all from any to any ipfw add 64000 deny all from any to any
natd_flags="-f /etc/natd.conf"
redirect_port tcp 192.168.0.2:6667 6667 redirect_port tcp 192.168.0.3:80 80
Jedem Rechner und jeder Schnittstelle des lokalen Netzwerks sollte eine IP-Adresse des im RFC 1918 definierten privaten Adressraums zugewiesen werden. Der Standardgateway entspricht der internen IP-Adresse des natd-Rechners.
Im Beispiel werden den LAN-Clients A und B die IP-Adressen 192.168.0.2 und 192.168.0.3 zugewiesen, während die LAN-Netzwerkkarte des natd-Rechners die IP-Adresse 192.168.0.1 erhält. Der natd-Rechner mit der IP-Adresse 192.168.0.1 wird als Standardgateway für die Clients A und B gesetzt. Die externe Netzwerkkarte des natd-Rechners muss für die korrekte Funktion von natd(8) nicht konfiguriert werden.
anzeigen aller Regeln:
# iptables -L
Diese Variante ist zwar nicht die sauberste, dafür ist sie aber universell.
# vi /etc/rc.local
erstmal die iptables sauber machen:
iptables -F iptables -X iptables -F -t nat iptables -X -t nat
# /sbin/sysctl -w net.ipv4.ip_forward=1
# /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # /sbin/iptables -P FORWARD ACCEPT
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/10-routing.conf # /sbin/sysctl -p # iptables-save > /etc/firewall.conf # echo '#!/bin/sh' > /etc/network/if-up.d/10-iptables # echo "iptables-restore < /etc/firewall.conf" >> /etc/network/if-up.d/iptables # chmod 0755 /etc/network/if-up.d/iptables
Die gespeicherte Konfiguration könnte so z.B. aussehen:
# Generated by iptables-save v1.4.4 on Wed Sep 14 11:35:08 2011 *filter :INPUT ACCEPT [2336802:513004800] :FORWARD ACCEPT [714:345423] :OUTPUT ACCEPT [2057134:3044911796] COMMIT # Completed on Wed Sep 14 11:35:08 2011 # Generated by iptables-save v1.4.4 on Wed Sep 14 11:35:08 2011 *nat :PREROUTING ACCEPT [999669:77314199] :POSTROUTING ACCEPT [10663:658470] :OUTPUT ACCEPT [10656:658106] -A POSTROUTING -o eth0 -j MASQUERADE COMMIT # Completed on Wed Sep 14 11:35:08 2011