Geschichte/Server/charm3/IPv6

Aus UUGRN

charm.[forum41.]uugrn.org ist ein IPv6-Router für das LAN im Forum41.

Es gibt einen statischen IP-IP Tunnel von http://tunnelbroker.net/ bzw http://he.net/.

Unser Prefix bzw Netzwerk ist 2001:470:9e62::/48

Aus diesem /48-Netzwerk wird 2001:470:9e62:23::/64 im Forum41-LAN angeboten, wobei charm.forum41.uugrn.org mit seinem Interface em1 das Gateway auf 2001:470:9e62:23::1 ist.

Konfiguration

Bei der Konfiguration von tunnelbroker.net fällt für FreeBSD >4 folgendes Shellscript als copy-paste Vorlage zum Starten des Tunnels heraus:

start_ipv6.sh
#! /bin/sh
ifconfig gif0 create
ifconfig gif0 tunnel 62.157.153.59 216.66.80.30
ifconfig gif0 inet6 2001:470:1f0a:38c::2 2001:470:1f0a:38c::1 prefixlen 128
route -n add -inet6 default 2001:470:1f0a:38c::1
ifconfig gif0 up

Das funktionierte auch leidlich, ist aber hässlich, weil es nicht die internen Startmechanismen verwendet bzw. die Settings dort komplett ignoriert. Deswegen haben wir die Settings mehr oder weniger sinnvoll als Variablen in /etc/rc.conf verpackt und getestet.

/etc/rc.conf
# Grundeinstellungen
network_ipv6_enable="YES"
ipv6_enable="YES"
ipv6_gateway_enable="YES"

# braucht man, damit gif0 erzeugt wird.
cloned_interfaces="gif0"
ipv6_network_interfaces="em1 gif0"

# IPv4-Tunnel
ifconfig_gif0="tunnel 62.157.153.59 216.66.80.30"

# IPv6-Adressen
ipv6_ifconfig_em1_alias0="2001:470:9e62:23::1 prefixlen 64"
ipv6_ifconfig_gif0="2001:470:1f0a:38c::2 2001:470:1f0a:38c::1 prefixlen 128"
ipv6_defaultrouter="2001:470:1f0a:38c::1"

# Router Advertisement Daemon starten, damit das Netz auch verteilt wird.
rtadvd_enable="YES"
rtadvd_interfaces="em1"         # Interfaces rtadvd sends RA packets.

Der rtadvd benötigt außerdem folgende Konfiguration:

/etc/rtadvd.conf
# 2001:470:9e62::/48
em1:\
        :addr="2001:470:9e62:23::":prefixlen#64:maxinterval#60:mininterval#40:vltime#3600:tc=ether:

Firewall

Damit IPv6-Traffic auch ankommt, muss das entsprechende IP-Protokoll erlaubt werden. Auf charm.[forum41].uugrn.org verwenden wir ipfw als Packetfilter, der sowohl für v4 als auch für v6 die Filterregeln verwaltet.

ipfw_forum41
[...]
add allow ip6 from any to any
# gif0 62.157.153.59 --> 216.66.80.30
add allow all from 62.157.153.59 to 216.66.80.30
add allow all from 216.66.80.30 to 62.157.153.59
[...]

De facto gibt es derzeit noch keine IPv6-Filterregeln, auch nicht für eingehenden Traffic!

Auto-Configuration

Alle Betriebssysteme, die sich auto-konfigurieren lassen (per router advertisements) sollten automatisch eine IPv6-Adresse aus 2001:470:9e62:23::/64 bekommen und diese auch direkt nutzen können. Der Host-Teil der IPv6-Adresse leitet sich typischerweise aus den 48Bit der Mac-Adresse ab (nicht 1:1).

DNS

Derzeit haben wir noch keine DNS-Delegation für unser Netz. Bei dynamisch verwalteten IPv6-Adressen macht das üblicherweise auch wenig Sinn. Denkbar wäre, dass wir ein weiteres /64 für statische Adressen reservieren und routen und hier dann auch entsprechende DNS-Einträge anbieten. Da dies unter uugrn.org sein wird, wird dies voraussichtlich nur für UUGRN-Mitglieder möglich sein.

Geschwindigkeit

Bei IPv6-Tunneln gibt es häufig genug das Problem, dass auf IPv4 der Tunnel erstmal um die halbe Welt gespannt wird, um dann von dort über häufig viel zu langsame Leitungen verbreitet zu werden. Unser Tunnel von he.net scheint aber ganz vernünftige Latenzen zu haben. Interessanterweise scheint IPv6 eine geringere Latenz zu haben als IPv4, wobei man die roundtrip-time von ICMP nicht unbedingt immer als Vergleichswert hernehmen darf:

ping www.google.com
root@charm:~# ping -c 10 www.google.com
PING www.l.google.com (74.125.43.99): 56 data bytes
64 bytes from 74.125.43.99: icmp_seq=0 ttl=56 time=31.456 ms
64 bytes from 74.125.43.99: icmp_seq=1 ttl=56 time=26.771 ms
64 bytes from 74.125.43.99: icmp_seq=2 ttl=56 time=25.683 ms
64 bytes from 74.125.43.99: icmp_seq=3 ttl=56 time=24.714 ms
64 bytes from 74.125.43.99: icmp_seq=4 ttl=56 time=49.109 ms
64 bytes from 74.125.43.99: icmp_seq=5 ttl=56 time=26.785 ms
64 bytes from 74.125.43.99: icmp_seq=6 ttl=56 time=25.689 ms
64 bytes from 74.125.43.99: icmp_seq=7 ttl=56 time=24.722 ms
64 bytes from 74.125.43.99: icmp_seq=8 ttl=56 time=27.754 ms
64 bytes from 74.125.43.99: icmp_seq=9 ttl=56 time=26.788 ms

--- www.l.google.com ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 24.714/28.947/49.109/6.967 ms
ping6 ipv6.google.com
root@charm:~# ping6 -c 10 ipv6.google.com
PING6(56=40+8+8 bytes) 2001:470:1f0a:38c::2 --> 2001:4860:a003::68
16 bytes from 2001:4860:a003::68, icmp_seq=0 hlim=59 time=16.422 ms
16 bytes from 2001:4860:a003::68, icmp_seq=1 hlim=59 time=15.841 ms
16 bytes from 2001:4860:a003::68, icmp_seq=2 hlim=59 time=22.123 ms
16 bytes from 2001:4860:a003::68, icmp_seq=3 hlim=59 time=15.907 ms
16 bytes from 2001:4860:a003::68, icmp_seq=4 hlim=59 time=15.823 ms
16 bytes from 2001:4860:a003::68, icmp_seq=5 hlim=59 time=37.343 ms
16 bytes from 2001:4860:a003::68, icmp_seq=6 hlim=59 time=15.762 ms
16 bytes from 2001:4860:a003::68, icmp_seq=7 hlim=59 time=15.798 ms
16 bytes from 2001:4860:a003::68, icmp_seq=8 hlim=59 time=37.194 ms
16 bytes from 2001:4860:a003::68, icmp_seq=9 hlim=59 time=29.110 ms

--- ipv6.l.google.com ping6 statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 15.762/22.132/37.343/8.593 ms

Ping auf die Tunnelgegenstelle

Ein direkter Vergleich der Latenzen auf v4 ./. v6 ist beim Ping auf die Gegenstelle des Tunnels möglich


ifconfig gif0
gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1280
        tunnel inet 62.157.153.59 --> 216.66.80.30
        inet6 fe80::209:6bff:fe09:7f36%gif0 prefixlen 64 scopeid 0x4 
        inet6 2001:470:1f0a:38c::2 --> 2001:470:1f0a:38c::1 prefixlen 128 


Vergleich
IPv4 IPv6
# ping -qc 10 216.66.80.30
--- 216.66.80.30 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 8.947/17.020/37.345/10.776 ms
--- 2001:470:1f0a:38c::1 ping6 statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 10.986/17.847/35.374/8.348 ms

Danke

Danke an SECuRE für seine Initiative beim UUGRN:10 Jahre UUGRN e.V. und die Hilfe bei der Konfiguration und debugging (insbesondere rtadvd).