Natives IPv6
mit TNG und
OpenWRT

 

Stefan.Walter.Nehlsen@gmxtest.depp.be

Die Einführung von IPv6 steht seit 15 Jahren unmittelbar bevor.

Provider TNG/ennit

  • lokaler Anbieter
  • eigene Technik in den Vermittlungstellen
  • "Longreach" im Kieler Umland
  • TNG-Box

TNG Technik

  • kein Splitter
  • TNG-Box direkt am Telefonkabel
  • Hardware: Copperjet, Starvoice oder FritzBox
  • Telefonie: füttert normale Telefone per VOIP
  • Daten: Ethernet / PPPoE
  • Box muß gegebenenfalls in den Bridge-Modus geschaltet werden.

IPv6 für TNG-Privatkunden

  • ist eigentlich fertig (Herbst 2012)
  • ist normalerweise abgeschaltet
  • ist "fast überall" verfügbar
  • wird noch nicht propagiert

OpenWRT

  • Eine alternative Firmware für DSL-Router
  • Linux und ulibc basierend
  • Software-Paket Management
  • Management über HTTP und SSH
  • relativ regelmäßige Releases
  • exotische Features

Hardware

Eine Liste unterstützter Hardware findet man auf http://openwrt.org/.

Geeignet ist zum Beispiel der TL-WR841N von TP-Link für 20€.

OpenWRT Installation

  1. Anleitung auf der OpenWRT Webseite lesen.
  2. Zur Hardware passende, aktuelle Firmware-Version herunterladen. (Herbst 2012: Version 12.09-rc1)
  3. Router mit der neuen Firmware flashen
  4. IPv4 (PPPoE) Funktionalität einrichten
  5. neuen Router als DSL-Router einsetzen und testen

zusätzliche OpenWRT Pakete

Es muß zusätzliche Software installiert werden.

# opkg update
# opkg install kmod-ipv6 ip kmod-ip6tables ip6tables
# opkg install radvd wide-dhcpv6-client luci-app-radvd
# /etc/init.d/network restart

PPPoE Konfiguration

Um beim PPPoE Verbindungsaufbau auch eine IPv6 Verbindung zu initialisieren, muß die Konfiguration des PPP-Daemon erweitert werden. Das kann im Webinterface erfolgen oder an der Kommandozeile:

# uci set network.wan.mtu=1452
# uci set network.wan.ipv6=1
# uci commit network
# /etc/init.d/network restart

PPPoE Konfiguration prüfen

Man kann die IPv6 Konfiguration des Routers auch über die Statusseite des Webinterfaces sehen.

# ps w | grep -v grep | grep pppd
 4484 root      1620 S    /usr/sbin/pppd nodetach ipparam wan ifname pppoe-wan +ipv6 nodefaultroute usepeerdns persist maxfail 1 us
# ip -6 address show dev pppoe-wan
14: pppoe-wan:  mtu 1452 qlen 5
    inet6 fe80::1d37:3584:ee8a:258c/10 scope link 
       valid_lft forever preferred_lft forever
# ip -6 route show default
default via fe80::90:1a00:140:7bb4 dev pppoe-wan  proto static  metric 1024
Es gibt nur eine Link-Local Verbindung zum nächsten Router und der ist der Default-Router.

Erreichbarkeit des
Default-Routers testen

# ping6 -c 1 fe80::90:1a00:140:7bb4%pppoe-wan
PING fe80::90:1a00:140:7bb4%pppoe-wan (fe80::90:1a00:140:7bb4): 56 data bytes
64 bytes from fe80::90:1a00:140:7bb4: seq=0 ttl=255 time=9.023 ms

--- fe80::90:1a00:140:7bb4%pppoe-wan ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 9.023/9.023/9.023 ms

Der Weg in die Welt

Im nächsten Schritt wird per DHCPv6 ein weltweit gültiger /56 IPv6-Prefix und andere Konfigurationsdaten vom Provider geholt. Dafür muß der DHCP6 Client konfiguriert werden.

# uci set dhcp6c.basic.enabled=1
# uci set dhcp6c.basic.interface=wan
# uci set dhcp6c.basic.pd=1
# uci set dhcp6c.basic.na=0
# uci set dhcp6c.basic.rapid_commit=1
# uci set dhcp6c.basic.domain_name_servers=1
# uci set dhcp6c.basic.domain_name=0
# uci set dhcp6c.lan=interface
# uci set dhcp6c.lan.enabled=1
# uci set dhcp6c.lan.sla_id=1
# uci set dhcp6c.lan.sla_len=8
# uci commit dhcp6c
# /etc/init.d/network restart

generierte /var/etc/dhcp6c.conf

interface pppoe-wan {
        send ia-pd 0;
        send rapid-commit;
        script "/usr/bin/dhcp6c-state";
        request domain-name-servers;
};

id-assoc pd 0 {
        prefix-interface br-lan {
                sla-id 1;
                sla-len 8;
        };
};

dhcp6c Funktion überprüfen

Nach der Neuinitialisierung der PPP-Verbindung sollte eine global gültige Adresse auf dem LAN-Interface sein.

# ip -6 address show dev br-lan
7: br-lan:  mtu 1500 
    inet6 2a00:12d0:a200:fe01:224:a5ff:feda:f7f9/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::224:a5ff:feda:f7f9/64 scope link 
       valid_lft forever preferred_lft forever
Zu beachten ist hierbei der /64 Prefix.

dhcp6 setzt IPv6 DNS-Server

dhcp6c fügt 2 IPv6-DNS Server hinzu.

# cat /tmp/resolv.conf.auto
# Interface wan
nameserver 82.97.146.3
nameserver 213.178.66.111
nameserver 2a00:12d0::53
nameserver 2a00:12d0:2::53
Der lokale DNS-Server dnsmasq benutzt diese Einstellungen um Anfragen weiterzuleiten.

Testen der Verbindung
ins Internet

ipv6.google.com ist nur per IPv6 erreichbar.

# ping6 -c 3 ipv6.google.com
PING ipv6.google.com (2a00:1450:4008:c01::63): 56 data bytes
64 bytes from 2a00:1450:4008:c01::63: seq=0 ttl=54 time=29.851 ms
64 bytes from 2a00:1450:4008:c01::63: seq=1 ttl=54 time=29.825 ms
64 bytes from 2a00:1450:4008:c01::63: seq=2 ttl=54 time=32.086 ms

--- ipv6.google.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 29.825/30.587/32.086 ms
geht!

Adressen an Clients verteilen

Der Router Advertisement Daemon hilft LAN-Clients an eine weltweit gültigen Adresse zu kommen.

# uci set radvd.lan=interface
# uci set radvd.lan.AdvSendAdvert=1
# uci set radvd.lan.client=
# uci set radvd.lan.ignore=0
# uci set radvd.lan.interface=lan
# uci set radvd.lan.IgnoreIfMissing=1
# uci set radvd.lan.AdvSourceLLAddress=1
# uci set radvd.lan.AdvDefaultPreference=medium
# uci set radvd.@prefix[0]=prefix
# uci set radvd.@prefix[0].interface=lan
# uci set radvd.@prefix[0].AdvOnLink=1
# uci set radvd.@prefix[0].AdvAutonomous=1
# uci set radvd.@prefix[0].AdvRouterAddr=0
# uci set radvd.@prefix[0].ignore=0
# uci set radvd.@route[0]=route
# uci set radvd.@route[0].interface=lan
# uci set radvd.@route[0].prefix=
# uci set radvd.@route[0].ignore=0
# uci set radvd.@rdnss[0]=rdnss
# uci set radvd.@rdnss[0].interface=lan
# uci set radvd.@rdnss[0].addr=
# uci set radvd.@rdnss[0].ignore=0
# uci set radvd.@dnssl[0]=dnssl
# uci set radvd.@dnssl[0].interface=lan
# uci set radvd.@dnssl[0].ignore=0
# uci set radvd.@dnssl[0].suffix=zuhause
# uci commit radvd

generierte /var/etc/radvd.conf

interface br-lan
{
	AdvDefaultPreference medium;
	IgnoreIfMissing on;
	AdvSendAdvert on;
	AdvSourceLLAddress on;

	prefix 2a00:12d0:a200:fe01:224:a5ff:feda:f7f9/64
	{
		AdvOnLink on;
		AdvAutonomous on;
		AdvRouterAddr off;
	};

	RDNSS fe80::224:a5ff:feda:f7f9
	{
	};

	DNSSL zuhause
	{
	};
};

Debian Client

# ip -6 address show
1: lo:  mtu 16436 
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qlen 1000
    inet6 2a00:12d0:a200:fe01:21c:c0ff:fec4:ddcf/64 scope global dynamic 
       valid_lft 86396sec preferred_lft 14396sec
    inet6 fe80::21c:c0ff:fec4:ddcf/64 scope link 
       valid_lft forever preferred_lft forever
# ip -6 route show
2a00:12d0:a200:fe01::/64 dev eth0  proto kernel  metric 256  expires 86328sec mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
default via fe80::224:a5ff:feda:f7f9 dev eth0  proto kernel  metric 1024  expires 1723sec mtu 1500 advmss 1440 hoplimit 64

Ubuntu Client
mit Privacy Enhancements

Privacy Enhancements sind ein Standard der gewährleistet das Clients nicht an Hand ihrer eindeutigen Hardwareadresse getrackt werden können.
Der Client generiert dafür temporäre Adressen.

Ubuntu PE Adressen

# ip -6 address show eth0
2: eth0:  mtu 1500 qlen 1000
    inet6 2a00:12d0:a200:1001:98e4:dc86:85af:1d28/64 scope global temporary deprecated dynamic
       valid_lft 14568sec preferred_lft 0sec
    inet6 2a00:12d0:a200:1301:f8ac:46c4:706a:a6c0/64 scope global temporary dynamic
       valid_lft 86206sec preferred_lft 14017sec
    inet6 2a00:12d0:a200:1301:21d:7dff:fea4:519b/64 scope global dynamic
       valid_lft 86206sec preferred_lft 14206sec
    inet6 2a00:12d0:a200:1001:f8ac:46c4:706a:a6c0/64 scope global temporary deprecated dynamic
       valid_lft 14568sec preferred_lft 0sec
    inet6 2a00:12d0:a200:1001:c40b:c5b7:90bf:58a1/64 scope global temporary deprecated dynamic
       valid_lft 14568sec preferred_lft 0sec
    inet6 2a00:12d0:a200:1001:21d:7dff:fea4:519b/64 scope global deprecated dynamic
       valid_lft 14568sec preferred_lft 0sec
    inet6 fe80::21d:7dff:fea4:519b/64 scope link
       valid_lft forever preferred_lft forever

Ubuntu PE Routen

# ip -6 route show dev eth0
2a00:12d0:a200:1001::/64 dev eth0  proto kernel  metric 256  expires 14316sec
2a00:12d0:a200:1301::/64 dev eth0  proto kernel  metric 256  expires 86263sec
2a00:1450:4008:c01::5e via fe80::224:a5ff:feda:f7f9 dev eth0  proto static  metric 1024 
2a00:1450:4013:c01::65 via fe80::224:a5ff:feda:f7f9 dev eth0  proto static  metric 1024  mtu 1452 rtt 48ms rttvar 29ms cwnd 10
2a00:1450:4013:c01::66 via fe80::224:a5ff:feda:f7f9 dev eth0  proto static  metric 1024  mtu 1452 rtt 62ms rttvar 20ms cwnd 10
2a00:1450:4013:c01::84 via fe80::224:a5ff:feda:f7f9 dev eth0  proto static  metric 1024  rtt 52ms rttvar 38ms cwnd 10
2a00:1450:4013:c01::8a via fe80::224:a5ff:feda:f7f9 dev eth0  proto static  metric 1024  mtu 1452 rtt 48ms rttvar 26ms cwnd 10
2a00:1450:4013:c01::8b via fe80::224:a5ff:feda:f7f9 dev eth0  proto static  metric 1024  mtu 1452 rtt 50ms rttvar 16ms cwnd 10
fe80::/64 dev eth0  proto kernel  metric 256 
default via fe80::224:a5ff:feda:f7f9 dev eth0  proto static  metric 1 
default via fe80::224:a5ff:feda:f7f9 dev eth0  proto kernel  metric 1024  expires 1653sec

Windows 7

Windows 7 ipconfig Ausgabe

was gibt es?

nicht viel immer mehr:

  • heise.de
  • Google
  • 2a03:2880:10:8f01:face:b00c:0:1
  • 1&1 Kundenserver
  • http://www.kame.net/
  • Dual-Stack ist angesagt!

andere Provider

  • Telekom macht Dual-Stack
  • Unitymedia macht Dual Stack lite !!!!!
    • kein IPv4 (nur Tunnel und Carrier-grade NAT)
    • xbox live Probleme
    • c't 6/2013 hat einen Artikel dazu.
  • Tunnel Provider: SixXs, Hurrican Electric, ...

mehr Informationen