Benutzer-Werkzeuge

Webseiten-Werkzeuge


nat

NAT (Network Address Translation)

Mit Network Address Translation kann ein ganzes lokales Netzwerk, mit nur einer IP, ins Internet.

FreeBSD

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

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

  1. eth0 - externes Netz
  2. 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
/home/http/wiki/data/pages/nat.txt · Zuletzt geändert: von 127.0.0.1