Tunnel bauen
IPv6 in der Praxis
IPv6-Adressen fürs LAN
Damit auch andere Rechnern aus dem lokalen Netz via IPv6 auf das Internet zugreifen können, benötigen diese ebenfalls eine entsprechende Adresse. Für deren Zuweisung gibt es mehrere Lösungsansätze. Zum einen können Sie eine IPv6-Adresse aus dem zugewiesenen Subnetz manuell in die Netzwerk-Konfigurationsdatei eintragen. Im gezeigten Beispiel lautet der von SixXS zugewiesene Subnetz-Präfix 2a01:198:514::/48. Da er nur 48 Bit in Anspruch nimmt, verbleiben 16 Bits für die Definition eigener Netze – damit lassen sich bis zu 65535 Subnetze aufbauen.
Für unseren Zweck genügt ein einzelnes Subnetz, sodass Sie den Rest der Adresse lediglich mit Nullen ausfüllen. Die Interface-ID besteht lediglich aus einer einzelnen Ziffer, der "1". Die so erzeugte IP-Adresse tragen Sie auf einem Fedora-System dann zusätzlich zur bereits bestenden IPv4-Konfiguration in der Datei ifcfg-eth0 unter /etc/sysconfig/network-scripts/ ein. Verwenden Sie ein anderes Interface, müssen Sie den Dateinamen entsprechend anpassen.
Die komplette Konfiguration könnte so aussehen, wie das Listing 2 zeigt. Nach einem Neustart des Netzwerkes mittels /etc/init.d/network restart zeigt der Aufruf von ip -6 a s eth0 und ip -6 r die konfigurierte IPv6-Adresse mitsamt des Default-Gateways an – zumindest, falls alles geklappt hat.
# ifconfig-eth0 (Beispiel) IPV6INIT=YES IPV6_AUTOCONF=NO IPV6ADDR=2a01:198:514::1/64 IPV6_DEFAULTGW=2a01:198:200:6f7::2
Natürlich lassen sich weitere Rechner auf die selbe Weise konfigurieren, einfacher geht es jedoch mit Hilfe der Stateless-Autokonfiguration. Hierzu setzen Sie die Anweisung IPV6_AUTOCONF aus der Konfigurationsdatei der Netzwerkkarte einfach auf den Wert NO. Daraufhin sendet der Client selbständig sogenannte Solicitation Messages an die Multicast-Adresse ff02::2. Als Absenderadresse kommt hierbei die verbindungslokale Adresse (fe80::) zum Einsatz, die Ihr System bei aktivem IPv6 automatisch erzeugt.
Auf einem Fedora-System aktivieren Sie den IPv6-Support gegebenenfalls über die Anweisung NETWORKING_IPV6=yes in der Datei /etc/sysconfig/network. Allerdings verwenden alle gängigen Linux-Distributionen diesen Wert in den aktuellen Releases als Vorgabe, so dass Sie hier meist nichts ändern müssen. Überprüfen Sie im Zweifelsfall einfach mithilfe von ip, ob der Rechner eine solche verbindungslokale Adresse besitzt (Listing 3, oben)
Existiert im LAN ein IPv6-fähiger Router, so antwortet er beim Empfang der Solicitation Messages eines Clients mit einer sogenannten Advertisement Message antworten. Dieses Antwort-Paket enthält unter anderem den Subnetz-Präfix für Ihr Netzwerk. Aus der Hardware-Adresse der Netzwerkkarte generiert der Client dann die Interface-ID, die zusammen mit dem Subnetz-Präfix die IPv6-Adresse ergibt. Klappt alles, dann besitzt der Rechner nun neben der verbindungslokalen Adresse auch eine globale Adresse aus dem oben genannten Subnetz (Listing 3, unten).
# ip -6 a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 100
inet6 fe80::208:74ff:fea8:dd17/64 scope link
valid_lft forever preferred_lft forever
# ip -6 a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2a01:198:514:0:21b:77ff:fe40:9e8e/64 scope global dynamic
valid_lft 2587384sec preferred_lft 600184sec
inet6 fe80::208:74ff:fea8:dd17/64 scope link
valid_lft forever preferred_lft forever
Über diese Adresse kann der Client dann durch den IPv6-Tunnel mit anderen Rechnern im Internet zu kommunizieren. Natürlich muss er dazu wissen, dass er die Pakete in den Tunnel senden soll. Diese Information bildet in Form des angegebenen Default-Gateways jedoch bereits einen Teil der Advertisement Message des Routers, sodass Sie sie nicht manuell liefern müssen.
IPv6 auf dem Router
Bleibt die spannende Frage: Wie lässt sich solch ein IPv6-fähiger Router konfigurieren? Zum einen gibt es Hardware wie beispielsweise die Fritzbox, die den notwendigen IPv6-Support bereits mitbringt. Solche Geräte können selbstständig einen IPv6-Tunnel zu einem Tunnel-Broker aufzubauen. Zum anderen gibt es mit radvd auch eine passende Software für Linux. Die Anwendung findet sich in den Software-Repositories der meisten Linux-Distributionen, sodass die Installation mit dem jeweiligen Paketmanager leicht gelingt. Unter Fedora rufen Sie dazu einfach yum install radvd auf.
In die Konfigurationsdatei /etc/radvdv.conf tragen Sie anschließend den von SixXS zugewiesen Prefix ein (Listing 4). Nach einem Start des Dienstes mittels /etc/init.d/radvd start lauscht Radvd nun auf entsprechende Client-Anfragen und sendet sogar selbständig in regelmäßigen Zeitintervallen Informationen über den konfigurierten IPv6-Prefix in das Netzwerk.
# /etc/radvdv.conf (Beispiel)
interface eth0
{
AdvSendAdvert on;
prefix 2a01:198:514::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
Damit der Router nun auch alle Anfragen der Clients über den IPv6-Tunnel weiterleitet, müssen Sie noch das IP-Forwarding aktivieren. Das erledigen Sie im einfachsten Fall mit dem Befehl
sysctl -w net.ipv6.conf.all.forwarding=1
Für eine dauerhafte Aktivierung setzen Sie diese Variable einfach statisch in der Datei /etc/sysctl.conf.
Danach sind Ihre Rechner ab sofort unter einer IPv6-Adresse direkt aus dem Internet zu erreichen, also nicht mehr hinter einer NAT-Adresse versteckt. Das bringt neben vielen Vorteilen freilich auch etliche Gefahren mit sich. Es führt demgemäß kein Weg daran vorbei, auf dem zentralen IPv6-Router entsprechende Paketfilter-Regeln zu definieren, um den Zugriff von außen auf das Netzwerk einschränken. Eine beispielhafte Konfiguration für einen solchen Paketfilter zeigt das Listing 5.
# Alle bestehenden Regeln loeschen ip6tables -F ip6tables -X # Zugriff über das Loopback-Device erlauben ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A OUTPUT -o lo -j ACCEPT # Uneingeschraenkter Zugriff auf den IPv6-Tunnel vom Router aus ip6tables -A OUTPUT -o sixxs -j ACCEPT # Zugriff aus dem lokalen Subnetz ebenfalls erlauben ip6tables -A INPUT -i eth0 -j ACCEPT ip6tables -A OUTPUT -o eth0 -j ACCEPT # Source-Routing-Pakete gefaehrlich, nicht zugelassen ip6tables -A INPUT -m rt --rt-type 0 -j DROP ip6tables -A FORWARD -m rt --rt-type 0 -j DROP ip6tables -A OUTPUT -m rt --rt-type 0 -j DROP # Verbindungslokale Adressen erlaubt ip6tables -A INPUT -s fe80::/10 -j ACCEPT ip6tables -A OUTPUT -s fe80::/10 -j ACCEPT # Multicast-Pakete zulassen ip6tables -A INPUT -s ff00::/8 -j ACCEPT ip6tables -A OUTPUT -s ff00::/8 -j ACCEPT # ICMP-Protokoll zur Fehlersuche zulassen ip6tables -I INPUT -p icmpv6 -j ACCEPT ip6tables -I OUTPUT -p icmpv6 -j ACCEPT ip6tables -I FORWARD -p icmpv6 -j ACCEPT # Uneingeschraenkter Zugriff auf den IPv6-Tunnel aus dem Subnetz ip6tables -A FORWARD -m state --state NEW -i eth0 -o sixxs -s 2a01:198:514::/48 -j ACCEPT ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # Ueber den Tunnel eingehende SSH-Verbindungen zulassen #ip6tables -A FORWARD -i sixxs -p tcp -d 2a01:198:514::1 --dport 22 -j ACCEPT # Ueber den Tunnel eingehenden Bittorrent-Traffic erlauben ip6tables -A FORWARD -i sixxs -p tcp -d 2a01:198:514::1 --dport 33600:33604 -j ACCEPT # Alles andere ist verboten ip6tables -P INPUT DROP ip6tables -P FORWARD DROP ip6tables -P OUTPUT DROP
Speichern Sie das Skript aus Listing 5 als /root/fw.sh und aktivieren Sie dann die Regeln über den Befehl sh /root/fw.sh. Der Aufruf /etc/init.d/iptables-save sorgt dafür, dass die Regeln auch nach einem Neustart des Rechners aktiv bleiben.
Der Paketfilter erlaubt sämtlichen Traffic aus dem eigenen Subnetz über den IPv6-Tunnel nach außen. Er lässt eingehende Pakete jedoch nur dann zu, wenn als Protokoll entweder SSH oder aber Bittorrent zum Einsatz kommen. Bei Bedarf erweitern Sie das Skript nach Belieben um zusätzliche Protokolle. Eine sehr gute Einführung in das Thema Paketfilter auf Basis von Netfilter finden Sie unter [3].



