IPv6

aus www.kruedewagen.de, Homepage von Ralf und Judith Krüdewagen (Kruedewagen)
Zur Navigation springen Zur Suche springen

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

Neighbor Discovery und Autoconfiguration

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

Programmieren mit IPv6

  • IPv6-Sockets: siehe c't 19/10 S.160

Routing

Tools

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

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:

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

Konfiguration

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

Tunnel-Mechanismen

Unique Local Adressen ("private Adressen" bei IPv6)

NAT

IPv6-enabled Sites:

Siehe auch