VDSL von der Telekom mit IPv6 und Debian
Written on
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
- Zugang zum Internet über VDSL der Telekom mit statischer IP
- Speedport als VDSL-Modem
- Linux-Box mit Debian terminiert PPPoE und verteilt es an zwei Subnetze
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.