====== NAT (Network Address Translation) ====== Mit //Network Address Translation// kann ein ganzes lokales Netzwerk, mit nur einer IP, ins Internet. ===== FreeBSD ===== * [[http://www.freebsd.org/doc/de/books/handbook/network-natd.html]] 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 === /etc/rc.firewall === 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 ==== optionale Einstellungen ==== === /etc/rc.conf === natd_flags="-f /etc/natd.conf" === /etc/natd.conf === * [[http://www.freebsd.org/cgi/man.cgi?query=natd&sektion=8]] 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. ===== Linux ===== anzeigen aller Regeln: # iptables -L ==== universell ==== === sauber machen === 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 === Rechner zum Gateway machen === # /sbin/sysctl -w net.ipv4.ip_forward=1 === Gateway zum NAT erweitern === - eth0 - externes Netz - eth1 - internes Netz # /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # /sbin/iptables -P FORWARD ACCEPT === Regeln Boot-fest machen === # 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 == /etc/firewall.conf == 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