Zuletzt geändert: Di, 14.06.2005

«11C» Mini-HowTo: Wie bekommt mein Netz IPv6 «PDF», «POD»



Inhaltsverzeichnis:

0.0.1 Mini-HowTo: Wie bekommt mein Netz IPv6

0.0.1.1 Softwarevoraussetzungen
  • Auf dem Router testen, ob folgende Befehle funktionieren. Die genauen IPs sind (noch) nicht entscheidend. Wichtig ist nur, dass die Befehle überhaupt funktionieren. Wenn's irgendwo ein Problem gibt: ipv6-Kernelmodul geladen? Ist IPv6 im Kernel aktiviert?

    • # ip tunnel add tunnelbroker mode sit remote 80.81.x.y ttl 64

    • # ip link set tunnelbroker mtu 1472

    • # ip link set dev tunnelbroker up

    • # ip -6 addr add 2001:8e0:abcd::42/126 dev tunnelbroker

    • # ip -6 addr add 2001:8e0:abcd:14d::/64 dev eth0

    • # ip -6 route add 2000::/3 via 2001:08e0:abcd::535 dev tunnelbroker

    • # ip -6 route add 3ffe::/16 via 2001:08e0:abcd::535 dev tunnelbroker

    • # echo "1" > /proc/sys/net/ipv6/conf/all/forwarding

  • Auf den Clients:

    • # ping6 -I eth0 ff02::1

    Das sollte einfach nur alle Rechner des lokalen Netzes anpingen.

0.0.1.2 Tunnel von as8758.net
0.0.1.3 Konfiguration des Routers
  • Hier ein Perl 5-Programm, welches auf http://tunnelbroker.as8758.net/ geht und die Tunnelparameter entsprechend der aktuellen öffentlichen IPv4 ändert. Der Mechanismus zur Bestimmung der aktuellen IPv4-Adresse muss evtl. geändert werden. Oder das Programm wird in ip-up eingebaut, da gibt's die öffentliche IPv4 als Parameter, welcher dem Programm dann übergeben werden kann.

    • #!/usr/bin/perl

    •  

    • use warnings;

    • use strict;

    •  

    • INIT { $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}" }

    • use WWW::Mechanize;

    •  

    • use constant {

    •   USERNAME => "...",

    •   PASSWORD => "...",

    •   EXT_IF   => "ppp0",

    • };

    •  

    • my $ipv4_public =

    •   (split /\s+/, `ip addr show dev @{[EXT_IF]} | grep inet`)[2];

    • $ipv4_public =~ s/\/.*//;

    •  

    • die "Couldn't get public IPv4 address!\n" unless $ipv4_public;

    • print STDERR "Public IPv4 address: $ipv4_public\n";

    •  

    • print STDERR "Logging in to as8758...\n";

    • my $mech = WWW::Mechanize->new;

    • $mech->get("http://tunnelbroker.as8758.net/login.php");

    • $mech->form_number(1);

    • $mech->field(username => USERNAME);

    • $mech->field(password => PASSWORD);

    • $mech->click("Login");

    •  

    • print STDERR "Changing tunnel parameters...\n";

    • $mech->form_number(1);

    • $mech->field(ipv4tunnelend => $ipv4_public);

    • $mech->click("ipv4change");

  • Aufbauen des Tunnels nach Änderung des Tunnelkonfiguration durch das Programm des vorherigen Schritts:

    • #!/bin/sh

    • # Aufruf: skriptname "öffentliche_ipv4"

    •  

    • LOCAL4="$1"

    • REMOTE4=212.25.25.23             # Tunnelserver von as8758.net

    • LOCAL6=2001:08e0:abcd::536/126   # Zugeteilter IPv6-Endpunkt, wir

    • REMOTE6=2001:08e0:abcd::535      # Zugeteilter IPv6-Endpunkt, as8758

    • NET6=2001:8e0:abcd:14d::/64      # Zugeteiltes /64er-Subnetz

    •  

    • # Tunnel hochbringen

    • ip tunnel add tunnelbroker mode sit remote ${REMOTE4} ttl 64

    • ip link set tunnelbroker mtu 1472

    • ip link set dev tunnelbroker up

    • ip -6 addr add ${LOCAL6} dev tunnelbroker

    • ip -6 addr add ${NET6} dev eth0

    •  

    • # Standardrouten setzen

    • ip -6 route add 2000::/3 via ${REMOTE6} dev tunnelbroker

    • ip -6 route add 3ffe::/16 via ${REMOTE6} dev tunnelbroker

    •  

    • # Forwarding für andere Clients des Netzes aktivieren

    • echo "1" > /proc/sys/net/ipv6/conf/all/forwarding

    •  

    • # Firewall

    • ip6tables -F

    • ip6tables -A INPUT -i tunnelbroker \

    •     ! -s ${NET6} -p tcp --dport 6000:6010 -j DROP

  • Konfiguration des Router Advertisement Daemons (radvd) auf dem Router:

    • interface eth0 {

    •     # Router Advertisements rausschicken

    •     AdvSendAdvert on;

    •  

    •     MinRtrAdvInterval 3;

    •     MaxRtrAdvInterval 10;

    •  

    •     # Kein Mobile-IPv6

    •     AdvHomeAgentFlag off;

    •     AdvLinkMTU 1280;

    •  

    •     # Definition für zugewiesenes Netz

    •     prefix 2001:08e0:abcd:14d::/64 {

    •         # Wir sind zuständig...

    •         AdvOnLink on;

    •         AdvAutonomous on;

    •         # ...und geben den Clients auch unsere IPv6

    •         AdvRouterAddr on;

    •     };

    • };

  • Konfiguration auf den Clients: Keine notwendig, da IPv6 Stateless Autoconfiguration :)

0.0.1.4 Alternative zu as8758

Wenn man auf dem Router kein perl 5 installieren kann/will, und/oder sich nicht bei as8758 registrieren will/kann, muss man dennoch nicht auf IPv6 verzichten, die Antwort heißt 6to4.

Skript, welches von ip-up aufgerufen werden muss:

  • #!/bin/sh

  •  

  • LOCAL4="$1"

  • LOCAL6="`printf "2002:%02x%02x:%02x%02x::1" \

  •     $(echo "$LOCAL4" | tr "." " ")`"

  •  

  • ip tunnel add tun6to4 mode sit ttl 64 \

  •     remote any \

  •     local "$LOCAL4"

  • ip link set dev tun6to4 up

  • ip -6 addr add "$LOCAL6"/16 dev tun6to4

  • ip -6 route add 2000::/3 via ::192.88.99.1 dev tun6to4 metric 1

Die radvd-Konfiguration muss leicht angepasst werden:

  • interface eth0 {

  •     AdvSendAdvert on;

  •  

  •     MinRtrAdvInterval 3;

  •     MaxRtrAdvInterval 10;

  •  

  •     # Kein Mobile-IPv6

  •     AdvHomeAgentFlag off;

  •     AdvLinkMTU 1280;

  •  

  •     prefix 0:0:0:42::/64 { 

  •         AdvOnLink off;

  •         AdvAutonomous on;

  •         AdvRouterAddr on;

  •         Base6to4Interface ppp0;

  •         AdvPreferredLifetime 20;

  •         AdvValidLifetime 30;

  •     };

  • };

Wichtig ist noch, dass der radvd bei jeder Neueinwahl ein SIGHUP gesendet bekommt.