IPv6
IPv6 ist die Weiterentwicklung und der Nachfolger des Internet Protokolls IPv4. Für die Nutzung von IPv6 ist die Unterstützung seitens des Internet Service Providers (ISP) und des Betriebssystems erforderlich. Sollte der ISP noch kein IPv6 unterstützen (was derzeit noch die Regel ist), so bietet sich eine "sanfte" Migration per "IPv6 durch IPv4"-Tunnel an. Ein solcher IPv6-Tunnel-Provider ist z.B. SiXXS. Der Client läuft dann in der Regel in einem Dual-Stack Modus, bei dem IPv4 und IPv6 gleichzeitig unterstützt werden.
Grundlagen
Allgemeine Infos
- Wikipedia (de)
- Status-Reports
- IPv6 im Heimnetz, siehe c't 12/07 S.134
- kleine IPv6 FAQ: siehe c't 25/10 S.182
- Privatsphäre mit IPv6: siehe c't 03/11 S.146
- IPv6-Zugang im LAN per Tunnel-Provider: siehe c't 08/11 S.190
- IPv6 für kleine Netze (Heise)
- Mit IPv6 ins Internet, siehe c't 06/08 S.214, Soft-Link 0806214, Listings
- IPv6-Adressbereiche (Heise)
- Aspekte der und Argumente für die IPv6-Einführung, siehe iX 09/09 S.40 und S.48
- IPv6 Crash Course For Linux (linux.com)
- Simple IPv6 HOWTO
- Understanding IP Addressing (ripe.net)
- IPv6 Address Allocation and Assignment Policy (ripe.net)
- IPv6-Einführung, siehe LU 01/10 S.84 (Grundlagen) und LU 02/10 S.80 (SixXS)
- IPv6 Präsentation vom CCC
- Liste der nativen IPv6-Provider in Deutschland (sixxs.net)
- ipv6-ops Mailingliste
- 6DISS E-Learning (Videos) , 6DISS Tutorials (PDF)
- 6DEPLOY Tutorials (PDF)
Neighbor Discovery und Autoconfiguration
- RFC 2461
- IPv6: Stateless Address Autoconfiguration mit Router Advertisement Daemon (radvd) (it-academy.cc)
- EUI/MAC
- EUI48 (ieee.org)
- EUI64 (ieee.org)
- IPv6 Autoconfiguration (cisco.com)
Beispiel für Erstellung des Local Identifiers, siehe cisco.com:
- MAC Adresse: 00-0C-29-C2-52-FF
- Konvertiert zu EUI-64: 00-0C-29-FF-FE-C2-52-FF (FF-FE wird dazwischen geschoben)
- In IPv6 Notation: 000c:29ff:fec2:52ff
- Dann wird gemäß RFC 3513,de das Universal Bit ("u" bit) auf der 7. Position des 1. Octets auf 1 gesetzt.
- Ergebnis: 020c:29ff:fec2:52ff (aus 00h (binär 00000000) wird 02h (binär 00000010))
Sicherheit
- Linux-Firewall
- Sicherheitsaspekte des Routing-Headers: siehe iX 08/07 S.114 und Schwachstelle im IPv6-Routing
- Sicherer als IPv4, aber nicht sicher genug – IPv6 braucht Filter
- IPv6 ist weit sicherer als IPv4 (silicon.de)
- Neues Internet-Protokoll erschwert anonymes Surfen (spiegel.de)
Programmieren mit IPv6
- IPv6-Sockets: siehe c't 19/10 S.160
Routing
Tools
- test-ipv6.com - Test your IPv6 connectivity
- Online Port Scanner IPv6 (subnetonline.com)
- Online Ping IPv6 (subnetonline.com)
- IPv6 Subnet Calculator
- Online web IPv4 and IPv6 IP subnet Calculator
- IPv6 Subnet Prefix Reference Chart (CIDR)
- Ping
- IPv6 Tool
- TAHI Project - Test and Verification for IPv6
Anzahl der Adressen als Beispielrechnung im Heise-Forum
System- und Diagnosetools
- siehe iX 04/11 S.148
- EtherApe - grafischer Netzwerkmonitor
- NDisc6-Sammlung
- ndisc6 - Neighbor Discovery Tool
- rdisc6 - Router Discovery Tool
- tcptraceroute6, traceroute6, rdnssd
- oping
- nc6 (netcat Klon)
IPv6 unter Linux
Autoconfiguration unter Linux
Autoconfiguration unter Linux ausschalten (z.B. wenn man statische Adressen vergeben will):
sysctl -w net.ipv6.conf.eth0.autoconf=0 sysctl -w net.ipv6.conf.default.autoconf=0
Oder Eintrag in /etc/sysctl.conf:
net.ipv6.conf.eth0.autoconf = 0
Hinweis: Obwohl Autoconfiguration mit der IPv6 Prefix nun ausgeschaltet ist, setzt der Rechner noch das Default Gateway auf den Router.
Auch Setzen des Default Gateways deaktivieren:
net.ipv6.conf.eth0.accept_ra = 0 net.ipv6.conf.default.accept_ra = 0
Hinweis: Dabei werden aber auch Router Advertisements auf z.B. eth1 deaktiviert.
Siehe auch
Privacy Extension
Weblinks
- Heise bzw. c't 22/10 S.169
- IPv6 Tipps unter Linux
- IPv6 Auto-Configuration
- Linux IPv6
Bedingungen
- Autoconfiguration muss aktiviert sein (autoconf=1), zu prüfen mittels
sysctl net.ipv6.conf.default.autoconf sysctl net.ipv6.conf.eth0.autoconf
bzw. für alle Interfaces mittels
sysctl -A | grep autoconf
Konfiguration
Um die Privacy Extensions zu aktivieren, muss man bestimmte Kernel-Parameter setzen, was auch im laufenden Betrieb funktioniert, jedoch bootfest gemacht werden sollte.
Folgende Einstellungen sind in /etc/sysctl.conf zu machen, wobei die Lifetimes der Adressen den Wünschen entsprechend angepasst werden können:
net.ipv6.conf.all.use_tempaddr = 2 net.ipv6.conf.all.temp_valid_lft = 604800 net.ipv6.conf.all.temp_prefered_lft = 86400 net.ipv6.conf.default.use_tempaddr = 2 net.ipv6.conf.default.temp_valid_lft = 604800 net.ipv6.conf.default.temp_prefered_lft = 86400 net.ipv6.conf.eth0.use_tempaddr = 2 net.ipv6.conf.eth0.temp_valid_lft = 604800 net.ipv6.conf.eth0.temp_prefered_lft = 86400 net.ipv6.conf.wlan0.use_tempaddr = 2 net.ipv6.conf.wlan0.temp_valid_lft = 604800 net.ipv6.conf.wlan0.temp_prefered_lft = 86400
Die tatsächlich vorhandenen Interfaces (eth0, wlan0, etc.) müssen angegeben werden. Eigentlich sollte es sogar reichen, nur die default Parameter zu setzen, wenn nämlich die Netzwerkschnittstellen erst nach dem Setzen der Kernel-Parameter eingerichtet werden.
Manuelles Aktivieren dieser Parameter im laufenden System:
sysctl -e -q -p /etc/sysctl.conf
Alternativ kann man auch die o.g. Parameter im /proc Filesystem setzen, z.B. mittels
echo 2 > /proc/sys/net/ipv6/conf/default/use_tempaddr echo 2 > /proc/sys/net/ipv6/conf/eth0/use_tempaddr
Als weitere Alternative funktioniert auch sysctl einzeln aufzurufen, z.B.
sysctl -w net.ipv6.conf.eth0.use_tempaddr=2 sysctl -w net.ipv6.conf.eth0.use_tempaddr=2
Bedeutung der Parameter:
- use_tempaddr = 2 aktiviert die Privacy Extensions.
- temp_prefered_lft [sec]: nach dieser Zeit wird eine neue IPv6-Adresse erzeugt und zugewiesen und für neue ausgehende Verbindungen genutzt.
- temp_valid_lft [sec]: die IPv6-Adresse bleibt so lange gültig (wichtig für bestehende Verbindungen und eingehende Verbindungen auf die alte Adresse)
- Die Einträge oben bedeuten also: Alle 24h (86400 sec) wird eine neue IPv6 Adresse zugewiesen, die dann 7 Tage (604800 sec) gültig ist. Das Interface hat also nach 7 Tagen mindestens 7 IPv6-Adressen, wobei immer die zuletzt erzeugte und alle 24h wechselnde Adresse für ausgehende Verbindungen genutzt wird.
Weitere Hinweise:
- Die "default" Parameter sollten auf jeden Fall gesetzt werden, da diese angewandt werden, wenn ein Interface neu initialisiert wird (z.B. mittels "rcnetwork restart") bzw. dynamisch neue Interfaces erzeugt werden.
- "use_tempaddr = 1" bewirkt zwar auch das Erzeugen einer temporären IPv6-Adresse, als Source-IP wird aber dann die EUI-64-basierte Adresse verwendet. Nur bei "use_tempaddr = 2" wird die temporäre Adresse auch in ausgehenden Paketen genutzt.
- Die aktuellen Lifetime der IPv6-Adressen kann mittels "ip -6 addr" angesehen werden.
Anscheinend gibt es einen Bug beim Erzeugen einer neuen temporären IPv6-Adresse, wenn die Lifetime abgelaufen ist und der vorgegebene Wert geringer als das Router Advertisement Retransmission Interval ist, siehe Google Group. Es wird nach Ablauf der Lifetime keine neue temporäre Adresse mehr erzeugt. Nach Tests habe ich herausgefunden, dass selbst mit Lifetime=900 keine neue temporäre Adresse erzeugt wird. Bug? Ggf. ist das aber auch so "per Design", da eine temporäre Adresse nur erzeugt wird, wenn die die "Hauptadresse" erzeugt wird. Also müsste man immer das Interface neu starten, um eine neue temporäre Adresse zu bekommen. Nachtrag: Man sollte beachten, dass auch temp_prefered_lft entsprechend zu setzen ist. Das hatte ich bei meinen Tests nicht gemacht.
Unter openSUSE
Die IPv6 Privacy Extensions lassen sich unter openSUSE zentral in /etc/sysconfig/sysctl aktivieren:
IPV6_PRIVACY=yes
Hinweise:
- Die eigentliche Konfiguration der Kernel-Parameter wird beim Booten in /etc/init.d/boot.ipconfig vorgenommen.
- Bis openSUSE 11.3 wird dort jedoch nur der "all" Parameter gesetzt mit use_tempaddr=1.
echo -n "Enabling IPv6 privacy" echo "1" > /proc/sys/net/ipv6/conf/all/use_tempaddr
Das ist schlecht, man muss also die dedizierten Parameter in /etc/sysctl.conf setzen.
- In openSUSE 11.4 ist es besser gelöst und sollte auch ohne Einträge in /etc/sysconfig/sysctl funktionieren. Wenn IPV6_PRIVACY=yes definiert ist, wird /proc/sys/net/ipv6/conf/default/use_tempaddr auf 2 gesetzt:
[ $IPV6_PRIVACY = yes ] && IPV6_PRIVACY=2 ... echo "$IPV6_PRIVACY" > /proc/sys/net/ipv6/conf/default/use_tempaddr
Damit sollten dann alle im Bootprozess oder im laufenden System neu generierten Netzwerkschnittstellen erfolgreich konfiguriert werden.
Unter Android
Siehe Android.
DNS bei IPv6
Unter Linux kann es vorkommen, dass es Probleme mit dem DNS-Resolver bei aktiviertem oder auch deaktiviertem IPv6 gibt. Diese Probleme betreffen das Auflösen von Namen in IPv4-Adressen, wenn man ein IPv4-Netz betreibt. Es kommt dann zu Verzögerungen bei der Namensauflösung (am besten zu sehen im Browser), da standardmäßig A und AAAA Records parallel abgefragt werden. Viele DNS-Server vertragen das wohl nicht und es kommt zu mehreren 5-Sekunden-Timeouts. Um das zu verhindern, kann man auf neueren Linux-Systemen (z.B. ab openSUSE 11.2) den folgenden Parameter in /etc/resolv.conf setzen:
options single-request
Mehr Infos zu DNS-Problemen:
Siehe auch:
- IPv6 DNS Setup Information Hinweis: Reverse-Zone ist ip6.arpa, nicht mehr ip6.int.
- How do I setup a reverse DNS? (sixxs.net)
DNS-Abfragen
Normales Lookup:
nslookup -type=AAAA sixxs.net dig sixxs.net AAAA
Reverse Lookup:
nslookup 2001:960:800::2 dig -x 2001:960:800::2
Wichtige Befehle und Syntax
ip -6 addr show netstat -A inet6 -a ping6 -I eth0 <IP-Adresse> route -A inet6 ip -6 route
Neighbors finden
ping6 -c4 -I eth0 ff02::1 ip -6 neigh show
IP Adresse löschen
ip -6 addr del 2001:8dc8:86a9::1/64 dev eth0
IPv6 in Linux deaktivieren
Drei Möglichkeiten:
a) /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
b) Kernel-Parameter (grub)
ipv6.disable=1
c) Proc
"echo 1 >/proc/sys/net/ipv6/conf/all/disable_ipv6"
Siehe [1].
URL Syntax
http://[2a01:1234:5678:2:585c:6552:1e40:ab1f]/path/to/page/
Weblinks
Tunnel-Provider
- SixXS siehe unten
- [http://gogonet.gogo6.com
- Miredo: getipv6.info, remlab.net
- Teredo
- siehe auch LM 11/09 S.75
SixXS
Konfiguration
- IPv6 Heimnetzwerk
- Heise-Artikel
- siehe LU 02/10 S.80
- openSUSE 11.1 Anleitung
ULA
IPv6 Heimnetzwerk
Im folgenden wird das Einrichten eines IPv6-Heimnetzwerks über einen SixXS-Tunnel beschrieben. Als IPv6-Router dient ein Linux-PC, auf dem der IPv6-Tunnel endet. Dieser IPv6-Router steht seinerseits hinter einem IPv4-Router, der per NAT die Internet-Verbindung für die PCs zum IPv4-ISP herstellt. Am LAN-Port (eth1) des IPv6-Routers hängen weitere PCs und Geräte, die mittels eines zusätzlichen IPv6-Subnetzes, dass von SixXS zum Tunnel-Endpunkt geroutet wird, ans IPv6-Netz angeschlossen werden sollen. Als Linux-Distribution wird in diesem Beispiel openSUSE 11.3 verwendet. Weitere Infos zu Einrichtung siehe SixXS.
Hinweis: Die IPv6-Adressen in den Beispielen sind abgeändert und daher fiktiv.
SixXS Account und IPv6-Tunnel
- SixXS Account beantragen vom Typ Dynamic (ayiya)
- SixXS Tunnel auf dem IPv6-Router (Linux-PC) einrichten mittels AICUU. Dazu das aiccu Paket installieren und bootfest machen:
zypper in aiccu insserv aiccu
- Die Datei /etc/aiccu.conf sieht dann wie folgt aus:
username MYUSERNAME password MYPASSWORD protocol tic server tic.sixxs.net ipv6_interface sixxs tunnel_id MYTUNNELID verbose true daemonize true automatic true requiretls false behindnat true
- Das Bootscript von aiccu bedarf eines Fixes in der start Sektion:
start) echo -n "Starting aiccu " startproc /usr/sbin/aiccu start /etc/aiccu.conf
- aiccu starten
/etc/init.d/aiccu start
- Die Interfaces und das Routing sehen dann z.B. wie folgt aus:
ifconfig eth1:
eth1 Link encap:Ethernet HWaddr 00:01:80:5F:66:E5 inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::201:80ff:fe5f:2222/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:9875101 errors:0 dropped:0 overruns:0 frame:0 TX packets:5990546 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4222558594 (4026.9 Mb) TX bytes:1830703552 (1745.8 Mb) Interrupt:21 Base address:0x8000
ifconfig sixxs:
sixxs Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet6 addr: 2a01:789:123:5d4::2/64 Scope:Global inet6 addr: fe80::89:123:5d4:2/64 Scope:Link UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1280 Metric:1 RX packets:7721 errors:0 dropped:0 overruns:0 frame:0 TX packets:7794 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:1722303 (1.6 Mb) TX bytes:905774 (884.5 Kb)
ip -6 route:
::/96 via :: dev sit0 metric 256 mtu 1480 advmss 1420 hoplimit 0 2a01:789:123:5d4::/64 dev sixxs proto kernel metric 256 mtu 1280 advmss 1220 hoplimit 0 fe80::/64 dev sixxs proto kernel metric 256 mtu 1280 advmss 1220 hoplimit 0 fe80::/64 dev eth1 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 fe80::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 default via 2a01:789:123:5d4::1 dev sixxs metric 1024 mtu 1280 advmss 1220 hoplimit 0
- IPv6 Verbindung vom IPv6-Router testen mittels
ping6 ipv6.google.com
oder im Browser
http://ipv6.whatismyv6.com
- Damit ist der IPv6-Tunnel fertig und der Router kann als Tunnel-Endpunkt im IPv6-Netz kommunizieren und kann auch von außerhalb erreicht werden.
Firewall
Auf dem IPv6-Router sollte eine Firewall laufen, da nun alle offenen Ports transparent im IPv6-Netz "zu sehen" sind. Denn der NAT-IPv4-Router ist aus der IPv6-Kommunikation komplett herausgenommen.
Unter openSUSE bietet SuSEfirewall2 IPv6-Unterstützung. Alle IPv4-Regeln werden dabei auch für IPv6 eingerichtet. Einige Default-Einstellungen in /etc/sysconfig/SuSEfirewall2:
# Leave empty to automatically detect whether your kernel supports stateful matching. FW_IPv6="" # Defaults to "yes" if not set # FW_IPv6_REJECT_OUTGOING=""
IPv6-Subnet
Nach einer Woche Laufzeit des SixXS Tunnels kann man ein /48-Subnet bei SixXS bestellen, welches dann zum Tunnel-Endpunkt (also zum Linux-PC als IPv6-Router) geroutet wird.
Die Schritte dazu sind:
- SixXS Subnet beantragen
- IPv6-Forwarding auf dem IPv6-Router einrichten manuell mittels
echo "1" > /proc/sys/net/ipv6/conf/all/forwarding
bzw. bootfest mittels Eintrag in /etc/sysconfig/sysctl
IPV6_FORWARD="yes"
- Für das LAN verwenden wir nur ein /64-Subnetz aus dem zugeteilten /48-Subnet. Insgesamt könnten so 65535 Subnetze gebildet werde. Dem IPv6-Router muss nun eine Adresse fest zu gewiesen werden, in unserem Beispiel die 2a01:123:456::1/64. Das geht am besten mittels yast2. Dort einfach eine weitere Adresse dem LAN-Interface (eth1) zuteilen in den IPv4-Feldern:
IP Address: 2a01:123:456::1 Netmask: /64
oder als Eintrag in /etc/sysconfig/network/ifcfg-eth1:
IPADDR_0='2a01:123:456::1/64'
- Netzwerk neu starten (falls manuelle Konfiguration ohne yast2):
rcnetwork restart
- RADVD (Router ADVertisement Daemon) auf dem IPv6-Router installieren, damit sich Clients im LAN automatisch konfigurieren können. Mindestens Version 1.5 sollte verwendet werden wegen eines Bugs in 1.3 hinsichtlich Interface-Handling. Siehe auch HOWTO und sixxs.net.
zypper in radvd insserv radvd
- RADVD konfigurieren in /etc/radvd.conf:
interface eth1 { AdvSendAdvert on; MinRtrAdvInterval 10; MaxRtrAdvInterval 30; AdvDefaultPreference medium; AdvHomeAgentFlag off; prefix 2a01:123:456::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr off; }; };
- RADVD starten
/etc/init.d/radvd start
- Die Interfaces und das Routing auf dem IPv6-Router sehen dann wie folgt aus:
ifconfig eth1:
eth1 Link encap:Ethernet HWaddr 00:01:80:5F:66:E5 inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: 2a01:123:456::1/64 Scope:Global inet6 addr: fe80::201:80ff:fe5f:2222/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:9888395 errors:0 dropped:0 overruns:0 frame:0 TX packets:6003962 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4224522107 (4028.8 Mb) TX bytes:1838849772 (1753.6 Mb) Interrupt:21 Base address:0x8000
ip -6 route:
::/96 via :: dev sit0 metric 256 mtu 1480 advmss 1420 hoplimit 0 2a01:789:123:5d4::/64 dev sixxs proto kernel metric 256 mtu 1280 advmss 1220 hoplimit 0 2a01:123:456::/64 dev eth1 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 fe80::/64 dev sixxs proto kernel metric 256 mtu 1280 advmss 1220 hoplimit 0 fe80::/64 dev eth1 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 fe80::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 default via 2a01:789:123:5d4::1 dev sixxs metric 1024 mtu 1280 advmss 1220 hoplimit 0
Firewall und Routing auf dem IPv6-Router für das Subnetz
Damit die Firewall auf dem IPv6-Router die IPv6-Pakete von den LAN-Clients ins Internet weiterleitet, muss der folgende Eintrag auf dem IPv6-Router in /etc/sysconfig/SuSEfirewall2 gemacht werden:
# - "fd76:9dbb:91a3:1::/64,fd76:9dbb:91a3:4::/64,tcp,ssh" # allow ssh from one IPv6 network to another FW_FORWARD="2a01:123:456::/64,0/0"
Damit werden alle IPv6-Pakete vom IPv6-Subnetz zu allen Destinations und Ports weitergeleitet. Eingehende Pakete für neue Verbindungen zum IPv6-Subnetz werden jedoch verworfen, so dass erst mal keine eingehenden Verbindungen durch den Tunnel nach 2a01:123:456::/64 möglich sind. Diese ermöglicht man durch einen Zusatz für die andere Richtung:
FW_FORWARD="2a01:123:456::/64,0/0 0/0,2a01:123:456::/64"
Danach die Firewall neu starten:
rcSuSEfirewall2 restart
ACHTUNG - NEU in openSUSE 11.4:
Die o.g. Forward-Regel FW_FORWARD="2a01:123:456::/64,0/0" reicht leider nicht mehr für ausgehende Verbindungen aus. Eingehende Pakete auf SYN-Requests werden nun geblockt. Daher müssen nun auch die eingehenden Verbindungen erlaubt werden. Mir ist unklar, ob dieses Verhalten ein Bug in der openSUSE Firewall ist oder einer Änderung im Kernel oder in iptables geschuldet ist. Denn es sollte doch hoffentlich weiterhin möglich sein, das Forwarding für eingehende Pakete als Antwort zu Verbindungsaufbauten (SYN,ACK) und bereits bestehende Verbindungen zu erlauben, ohne das ganze Netz für eingehende Verbindungen zu öffnen. Aber wie?
Update zu openSUSE 11.4: Das o.g. Verhalten war ein Bug in der openSUSE Firewall. Ein Update auf SuSEfirewall2-3.6.261-3.4.1 aus dem Update-Repository behebt das Problem. Es ist also nicht mehr nötig, auch eingehende Verbindungen zu erlauben. Vielen Dank an Thomas Schulte für diesen Hinweis.
IPv6 auf den LAN-Clients
Nach Starten des RADVD sollten nun alle IPv6-fähigen Clients im LAN eine IPv6-Adressen aus dem Subnetz 2a01:123:456::/64 automatisch konfiguriert haben. Dabei wird i.d.R. die MAC-Adresse verwendet, um die IPv6-Adresse zu vervollständigen. Auch eine Default Route sollte eingerichtet worden sein.
Die Interfaces und das Routing auf dem IPv6-Client-PC sehen dann wie folgt aus:
ifconfig eth0:
eth0 Link encap:Ethernet HWaddr 00:26:18:83:0A:DF inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: 2a01:123:456:0:226:18ff:fe83:adf/64 Scope:Global inet6 addr: fe80::226:18ff:fe83:adf/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:25705 errors:0 dropped:0 overruns:0 frame:0 TX packets:27673 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:10179904 (9.7 Mb) TX bytes:4060206 (3.8 Mb) Interrupt:26 Base address:0x6000
ip -6 route:
2a01:123:456::/64 dev eth0 proto kernel metric 256 expires 86382sec mtu 1500 advmss 1440 hoplimit 4294967295 fe80::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 4294967295 default via fe80::201:80ff:fe5f:2222 dev eth0 proto kernel metric 1024 expires 85sec mtu 1500 advmss 1440 hoplimit 64
Die zugewiesene Default Route entspricht der Link Local Adresse des IPv6-Router als Source Adresse der Router Advertisements, siehe IPv6 Router Advertisement Problem Statement,ICMPv6.
Die IPv6 Verbindung vom IPv6-LAN-Client kann getestet werden mittels
ping6 ipv6.google.com
oder im Browser
http://ipv6.whatismyv6.com
Firewall für die IPv6-Clients im LAN
Alle Geräte im IPv6-Subnetz sind nun auch aus dem IPv6-Netz weltweit erreichbar, wenn das IP-Forwarding für eingehenden Verkehr in der Firewall eingerichtet wurde. Dann sollte unbedingt eine Firewall für die IPv6-Clients eingerichtet werden. Entweder geschieht das zentral auf dem IPv6-Router oder auf jedem Client selbst. Da mein Client ebenfalls ein Linux-PC ist, bietet sich die lokale SuSEfirewall2-Firewall auf dem Client an. Diese muss so eingerichtet werden, dass nur Ports geöffnet werden, die im IPv6 erreichbar sein sollen, ggf. unter Angabe von Source und Destination IP-Adressen.
Per nmap kann man offene Ports im IPv6 Netz erkunden:
nmap -6 -PN 2a01:123:456:0:226:18ff:fe83:adf
Ein zweites Subnetz aufmachen
Aus dem zugeteilten /48-Subnetz kann man 65535 /64-Subnetze (64-48=16, 2 hoch 16 = 65535) ableiten mit jeweils 18446744073709551616 (1.845e19 bzw. ca. 18 Trillionen) Hosts (2 hoch 64). Siehe CIDR6.
Bisher haben wir nur ein /64-Subnetz (2a01:123:456::/64) erstellt. Wenn der IPv6-Router ein zweites (ggf. virtuelles) Ethernet-Interface hat, kann man ein zweites /64-Subnetz 2a01:123:456:1::/64 aufmachen.
Erweiterung des RADVD (/etc/radvd.conf) für eth0:
interface eth1 { AdvSendAdvert on; MinRtrAdvInterval 10; MaxRtrAdvInterval 30; AdvDefaultPreference medium; AdvHomeAgentFlag off; prefix 2a01:123:456::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr off; }; }; interface eth0 { AdvSendAdvert on; MinRtrAdvInterval 10; MaxRtrAdvInterval 30; AdvDefaultPreference medium; AdvHomeAgentFlag off; prefix 2a01:123:456:1::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr off; }; };
Erweiterung der Firewall (/etc/sysconfig/SuSEfirewall2), siehe auch Hinweis zu Firewall-Update in openSUSE 11.4 oben:
# Nur ausgehende Verbindungen vom gesamten /48-Subnetz erlauben FW_FORWARD="2a01:123:456::/48,0/0" # auch eingehende Verbindungen aus dem Inet zum /48-Subnetz erlauben: #FW_FORWARD="2a01:123:456::/48,0/0 0/0,2a01:123:456::/48" # auch eingehende Verbindungen aus dem Inet nur zum ersten /64-Subnetz erlauben: #FW_FORWARD="2a01:123:456::/48,0/0 0/0,2a01:123:456::/64" # auch eingehende Verbindungen aus dem Inet nur zum zweiten /64-Subnetz erlauben: #FW_FORWARD="2a01:123:456::/48,0/0 0/0,2a01:123:456:1::/64"
Damit haben wir ausgehende Verbindungen für das gesamte /48-Subnetz erlaubt. Eingehende Verbindungen kann man nun nach Subnetzen trennen.
Ausgabe der Interfaces und Routen:
ifconfig eth0:
eth0 Link encap:Ethernet HWaddr 00:11:95:D9:E6:B4 inet addr:10.1.1.3 Bcast:10.1.1.255 Mask:255.255.255.0 inet6 addr: 2a01:123:456:1::1/64 Scope:Global inet6 addr: fe80::211:95ff:fed9:1111/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:784 errors:0 dropped:0 overruns:0 frame:0 TX packets:765 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:92036 (89.8 Kb) TX bytes:92262 (90.0 Kb) Interrupt:18
ip -6 route
::/96 via :: dev sit0 metric 256 mtu 1480 advmss 1420 hoplimit 0 2a01:789:123:5d4::/64 dev sixxs proto kernel metric 256 mtu 1280 advmss 1220 hoplimit 0 2a01:123:456::/64 dev eth1 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 2a01:123:456:1::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 fe80::/64 dev sixxs proto kernel metric 256 mtu 1280 advmss 1220 hoplimit 0 fe80::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 fe80::/64 dev eth1 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 default via 2a01:789:123:5d4::1 dev sixxs metric 1024 mtu 1280 advmss 1220 hoplimit 0
Server-Dienste
Apache Webserver auf dem IPv6-Router
SixXS vergibt für die IPv6-Adresse des Tunnel-Endpunkts einen DNS-Namen, den man auf für einen lokalen Webserver verwenden kann. Die Apache-Konfiguration sieht dann z.B. so aus:
# IPv6 SixXS, myname.dus-01.de.sixxs.net has AAAA address 2a01:789:123:5d4::2
<VirtualHost *:80>
ServerName myname.dus-01.de.sixxs.net
ServerAdmin webmaster@example.com
DocumentRoot /srv/www/htdocs
ErrorLog /var/log/apache2/error_log
CustomLog /var/log/apache2/access_log combined
HostnameLookups Off
UseCanonicalName Off
ServerSignature On
Redirect /index.html http://myname.dus-01.de.sixxs.net/wiki/
</VirtualHost>
SSH Server
Für IPv6 muss der Daemon wie folgt konfiguriert werden (was dem Default entspricht):
AddressFamily any
Nur IPv4:
AddressFamily inet
Nur IPv6:
AddressFamily inet6
Postfix
Allgemeine Hinweise zu Postfix und IPv6 siehe Postfix IPv6 Support.
Beispiel Konfiguration main.cf:
# inet_interfaces = 192.168.10.1 127.0.0.1 ::1 2a01:123:456::1 inet_interfaces = all mynetworks = 192.168.1.0/24, 127.0.0.0/8, [::1]/128, [fe80::]/10, [2a01:123:456::]/64, [2a01:123:456:1::]/64
Hinweis: Falls das IPv6-Interface beim Starten von Postfix noch nicht konfiguriert ist, startet Postfix nicht. Daher ist inet_interfaces = all eine gute Wahl.
Weitere Weblinks
- IPv6.com, IPv6 - The History and Timeline
- Understanding IP Addressing (ripe.net)
- IPv6 Address Allocation and Assignment Policy (ripe.net)
- IPv6 Adressen in Europa
- IPv6 Überblick
- getipv6.info - ARIN IPv6 Wiki, Educating Yourself about IPv6
- IPv6 bei Cisco
- IPv6-Rat verabschiedet "Nationalen Aktionsplan" für Web-Zugang
- ipv6actnow.org: IPv6 Howto - Richtlinien vom RIPE NCC
- RFCs
- RFC 3513 - Internet Protocol Version 6 (IPv6) Addressing Architecture
- RFC 3531 - A Flexible Method for Managing the Assignment of Bits of an IPv6 Address Block
- RFC 3769 - Requirements for IPv6 Prefix Delegation
- RFC 3177 - Address Delegation Recommendations
- IPv6 Rapid Deployment in IPv4 Infrastructures" (6RD) (Heise), http://tools.ietf.org/html/rfc5569
- IPv6 Forum (ipv6-forum.com)
- unitymediaforum.de
- DOCSIS 3.0 Requirements for IPv6 support
- Der Deutsche IPv6 Rat (ipv6council.de)
- IPv6-Kongress, Heise
Tunnel-Mechanismen
- Teredo, Miredo Linux Tool, getipv6.info, siehe auch LM 11/09 S.75
Unique Local Adressen ("private Adressen" bei IPv6)
NAT
IPv6-enabled Sites: