Content tagged IPv6

VDSL von der Telekom mit IPv6 und Debian

posted on

IPv6 is the new normal

Meine letzten IPv6-Tunnel werden langsam überflüssig. Seit letzter Woche haben wir auch im Büro natives IPv6. Die Telekom hat uns auf einen NGN-Anschluss umgestellt.

Setup

IPv6 aktivieren

Kurz zusammengefasst

Für den IPv6-Zugang muss der pppd IPv6 auf der PPP-Verbindung aktivieren. Die Telekom benutzt dann Router-Advertisements (radv) um dem ppp0-Device eine IPv6-Adresse zu geben. Soll IPv6 im LAN weiterverteilt werden, bekommen wir Präfixe hierfür über Präfix-Delegation per DHCPv6. Letzteres kann aber nicht als Ersatz für die Router-Advertisements genutzt werden, da die Telekom nur Präfixdelegation darüber macht.

pppd konfigurieren

Nachdem der IPv4-Internetzugang konfiguriert ist muss nur noch IPv6 im pppd aktiviert werden. Hierzu muss an das Ende von /etc/ppp/options eine Zeile +ipv6 eingefügt werden.

echo "+ipv6" >> /etc/ppp/options

poff
pon dsl-provider

Das ppp0-Device sollte jetzt eine link local IPv6-Adresse haben (fe80:…). Wir können das mit ifconfig ppp0 kontrollieren.

IPv6-Adresse per Router Advertisement (radv) erhalten

Wir benutzen das Linux-System als Router. Wenn wir das Routing von IPv6-Traffic einschalten bezieht Linux seine IPv6-Adressen normalerweise nicht mehr automatisch. Über den Config-Wert 2 für die Einstellung accept_ra lässt sich dies jedoch überschreiben:

echo net.ipv6.conf.all.forwarding = 1 > /etc/sysctl.d/01-ipv6-forward.conf
echo net.ipv6.conf.ppp0.accept_ra = 2 >> /etc/sysctl.d/01-ipv6-forward.conf

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
echo 2 > /proc/sys/net/ipv6/conf/ppp0/accept_ra

Wir müssen jetzt gegebenfalls auf das nächste Router Advertisement der Telekom warten. Dies kommt nur alle fünf Minuten. Haben wir diese Gedult nicht, können wir mit poff und pon dsl-provider uns nochmals neu einwählen. Danach sollte unser Interface ppp0 auch eine öffentliche IPv6-Adresse haben (2003:…).

Präfixe für die Subnetzs von DHCPv6

Als DHCPv6-Client habe ich dibbler-client und wide-dhcpv6-client ausprobiert letzterer war in der Lage deutlich schneller zu starten und zu stoppen, so dass ich mich für die WIDE-Implementierung des DHCPv6-Clients entschieden habe:

apt update
apt install wide-dhcpv6-client

Folgende Konfiguration habe ich als /etc/wide-dhcpv6/dhcp6c.conf angelegt:

interface ppp0 {
        send ia-pd 0;
};

id-assoc pd 0 {
        prefix-interface eth1 {
                sla-len 8;
                sla-id 1;
        };
        prefix-interface eth2 {
                sla-len 8;
                sla-id 2;
        };
};

Mit dieser Konfiguration wird ein Präfix über das Interface ppp0 vom DHCPv6-Server der Telekom angefordert. Dieses Präfix wird dann benutzt um Subnetze für eth1 und eth2 abzuleiten. Hierzu wird das von der Telekom erhaltene Präfix um 0001 verlängert für eth1 (sla-id 1) und entsprechend um 0002 für eth2.

Abschließend muss der wide-dhcpv6-client noch über die Datei /etc/default/wide-dhcpv6-client für das Interface ppp0 aktiviert werden:

# Defaults for dhcpv6 client initscript
# Used by /etc/init.d/wide-dhcpv6-client

# Interfaces on which the client should send DHCPv6 requests and listen to
# answers. If empty, the client is deactivated.
INTERFACES="ppp0"
service wide-dhcpv6-client restart

Jetzt sollten auch unsere Netzwerkinterfaces eth1 und eth2 IPv6-Adressen (und zugehörige Subnetze /64) erhalten haben.

Den Rechnern im LAN eine IPv6-Adresse zuweisen

(Genauer: Den Rechnern im LAN ihr Präfix mitteilen, so dass diese sich eine IPv6-Adresse geben können.)

Wir müssen auf dem Linux-Router hierzu selbst Router Advertisements auf unseren LANs verschicken. Dies geschieht mit dem Router Advertisement Daemon radvd:

apt install radvd

Für diesen Dämon legen wir die Konfigurationsdatei /etc/radvd.conf an:

interface eth1
{
        AdvSendAdvert on;
        prefix ::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr on;
        };

        RDNSS 2001:4860:4860::8888  2001:4860:4860::8844
        {
        };
};

interface eth2
{
        AdvSendAdvert on;
        prefix ::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr on;
        };

        RDNSS 2001:4860:4860::8888  2001:4860:4860::8844
        {
        };
};

Das Präfix ::/64 in dieser Konfiguration ist ein spezieller Wert. Der radvd benutzt für die Advertisements die auf dem jeweiligen Interface konfigurierten IPv6-Adressen um den Präfix selbst zu erreichnen. Die IPv6-Adresse hat uns im vorherigen Schritt der DHCPv6-Client automatisch gesetzt.

Der radvd muss noch mit der neuen Konfiguration aktiviert werden:

service radvd restart

Rechner im LAN vor eingehenden Verbindungen schützen (optional)

Wer es wirklich will und NAT bisher als Schutz seiner Rechner angesehen hat, kann über ip6tables noch einrichten, dass auch über IPv6 nur Verbindungen vom LAN ins Internet aufgebaut werden. TCP-Verbindungen aus dem Internet ins LAN werden damit abgewiesen. Hier die Datei /etc/init.d/ipv6-firewall anlegen:

#!/bin/sh
# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
    set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
fi
### BEGIN INIT INFO
# Provides:          ipv6-firewall
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starting IPv6 firewall
# Description:       This are some firewalling rules for our
#                    IPv6 connection to the internet.
### END INIT INFO

DESC="Starting IPv6 firewall"


case "$1" in
  start)
     /sbin/ip6tables -A FORWARD -m state --state NEW -i eth1 -o ppp0 -j ACCEPT
     /sbin/ip6tables -A FORWARD -m state --state NEW -i eth2 -o ppp0 -j ACCEPT
     /sbin/ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
     /sbin/ip6tables -A FORWARD -p tcp -j REJECT

     /sbin/ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
     /sbin/ip6tables -A INPUT -p tcp -j REJECT
     ;;
  stop)
     /sbin/ip6tables -F INPUT
     /sbin/ip6tables -F OUTPUT
     /sbin/ip6tables -F FORWARD
     ;;
  force-reload|restart)
     $0 stop
     $0 start
     ;;
  *)
     echo "Usage: /etc/init.d/ipv6-firewall {start|stop|restart}"
     exit 1
esac

exit 0

Dieses Skript installieren und aktivieren:

update-rc.d ipv6-firewall enable
service ipv6-firewall start

Das war's … die lokalen Netze haben jetzt IPv6-Zugang.


Unless otherwise credited all material Creative Commons License by Matthias Wimmer