Christian Garbs <
mi...@cgarbs.de> wrote:
>Hat etwas gedauert und ist etwas länger geworden. Ich warte mal
>Kommentare und Korrekturen ab und kippe es dann auch in mein Blog,
>daher die etwas Usenet-untypische Formatierung.
Vielen Dank dafür, dass Du Dir diese Arbeit gemacht hast! Ich weiß das
sehr zu schätzen. Kommentare besonders zu meiner Konfiguration sind
inline. Meine IPv6-Adressen hole ich mir per OpenVPN von einem Server
im Rechenzentrum, deswegen sind sie komplett statisch und ich habe
keine Erfahrungen mit Dynamik. Das Bedürfnis, das IPv6 von meinem
Provider 1&1 zu benutzen, ist über Ostern stärker geworden, weil
Google meine RZ-IP-Adressen zunehmend nicht mag und ich ständig statt
Suchergebnisse zu bekommen erstmal Captchas ausfüllen muss.
> Ziel: Im Hausnetz dynamisch zugeordnete IPv6-Adressen aus dem
s/Adressen/Netze/
> Dialup-Internetzugang bereitstellen. Die Fritz!Box bekommt bei der
... in Deutschland ... bei den großen Providern, z.B. Telekom und 1&1
...
> Einwahl ein /56 und reicht daraus ein /64 über den internen
> Router/Server an das dahinterliegende Hausnetz weiter. Alle paar
> Stunden wird das ausgewählte /64 gewechselt, ebenso bei einem
> Reconnect (denn dann gibt es ein neues /56).
PPP-Reconnect, damit das niemand mit dem DSL-Reconnect verwechselt. Es
gibt ja immer noch Provider mit 24h-Zwangstrennung.
> ,----
> | __________
> | ( Internet )
> | """"""""""
> | |
> | [FritzBox]
> | |
> | | DMZ
> | |
> | [Linux-Server]
> | |
> | | Hausnetz
> | |
> | |- Client 1
> | |- Client 2
> | …
> `----
Können wir uns auf "Transfernetz" statt "DMZ" einigen? Das ist aber
eine Stilfrage.
> Je nach Netz ist die DMZ mal komplett leer (Ethernetkabel vom Server
> direkt zur Fritz!Box) oder sie umfasst das Haus-WLAN und dort tummeln
> sich Drucker, Fernseher, Laptops, Smartphones etc. – alles, was nicht
> an das „wichtige“ interne Hausnetz ran muss.
>
> (DISCLAIMER: der Rechnerzoo schrumpft zusammen und teilweise ist das
> Hausnetz inzwischen leer – ich bin mir aber 100% sicher, dass die
> Prefix-Delegation dort früher, als es noch mehr Geräte gab, korrekt
> funktioniert hat.)
Man könnte natürlich auch dem Linux-Server mehrere (ggf virtuelle)
Imterfaces verpassen und jeweils ein /64 dorthin verteilen, ggf. mit
einem VLAN-fähigen Switch.
> Als lokalen IPv6-Adressraum nehme ich `fdXX/64', der Server kriegt
> dort jeweils Adresse `1'. Das ist leicht zu merken und
> dementsprechend ist seine IPv6-Adresse kürzer als unter IPv4:
> `fdXX:1/64' vs. `192.168.XX.1/24' :)
>
> `XX' ist für IPv4 und IPv6 gleich, so muss ich mir nur merken „ah, das
> 13er Netz“ und der Rest ergibt soch von alleine.
Das für Demo und Dokumentationszwecke vorgesehene IPv6-Netz ist
2001:db8::/32, ein /56 könnte z.B. 2001:db8:1111:11xx::/56 sein.
> Ich weiß nicht, ob alles davon relevant ist. Das wichtigste dürfte
> die Einstellung /DNS-Server und IPv6-Präfix (IA_PD) zuweisen/ sein.
> Ich benutze in der Weboberfläche die _Erweiterte Ansicht_.
>
> - Internet
> - Zugangsdaten
> - IPv6
> - IPv6-Unterstützung
> - Unterstützung für IPv6 aktiv
> - IPv6-Anbindung
> - (x) Immer eine native IPv5-Anbindung nutzen (empfohlen)
> - Heimnetz
> - Heimnetzübersicht / Netzwerk (je nach FritzOS-Version)
> - Netzwerkeinstellungen
> - IP-Adressen
> - IPv6-Adressen / IPv6-Konfiguration
> - Unique Local Adresses
> - (x) Unique Local Addresses (ULA) zuweisen, solange keine
> IPv6-Internetverbindung besteht (empfohlen)
> - Weitere IPv6-Router im Heimnetz
> - Diese Fritz!Box stellt die Standard Internetverbindung
> zur Verfügung
> - DHCPv6-Server im Heimnetz
> - (x) DHCPv6-Server in der FRITZ!Box für das Heimnetz
> aktivieren
> - (x) DNS-Server und IPv6-Präfix (IA_PD) zuweisen
Zieht die Fritzbox nach einem Prefixwechsel bzw. beim Nichtbestehen
einer Netzverbindung das zugewiesene Präfix zuverlässig, sofort und
korrekt zurück, oder sind Dir da irgendwelche Ungereimtheiten
aufgefallen? Kommt es vor, dass beim Prefixwechsel seitens des
Providers zwischendurch ULA-Adressen verteilt und direkt wieder
zurückgezogen werden? Oder lässt die Fritzbox das Announcement für die
ULA-Adressen einfach die ganze Zeit "draußen"?
> Ich habe gerne sprechende Namen, bin mit `eth0', `tr0' usw. groß
> geworden und möchte auf allen Servern direkt die logische Funktion
> eines Devices erkennen. Daher benenne ich die Devices manuell um:
>
> - `dmz0' geht nach außen Richtung Fritz!Box
> - `eth0' geht nach innen ins Hausnetz
Ja, so mache ich das auch, allerdings sind bei mir da noch VLANs
dazwischen (mein Linux-Router hat keinen Link ohne VLAN-Tags, da war
ich ganz konsequent), da kann man die Interfacenamen sowieso frei
belegen. Bei Interesse kann ich dazu noch etwas mehr sagen.
> Für die weitere Konfiguration benutze ich klassisch `ifupdown'.
Ich benutze systemd-networkd.
> | iface dmz0 inet6 auto
> | dhcp 1
> | request_prefix 1
> | accept_ra 2
> | pre-down /sbin/start-stop-daemon -s USR1 --stop --pidfile /run/dhclient6.dmz0.pid --exec /sbin/dhclient
> | pre-down rm /run/dhclient6.dmz0.pid
Ok, da wird also viel Magie aus ifupdown-Skripten benutzt. Da muss ich
mal wieder in das Paket reinschauen.
> - `YY' ist das kürzel für den IPv4-DMZ-Adressraum Das ginge auch
> einfacher über DHCP, aber wenn sich in der DMZ noch andere Geräte
> tummeln und ich den Server ansprechen will, habe ich gerne eine
> feste Adresse. (Gut, die Fritz!Box kann auch feste Adressen per
> DHCP vergeben. Ich ziehe die „historisch gewachsen“-Karte.) Für
> IPv6 kommen wir in der DMZ auf jeden Fall ohne feste Adresse aus,
> daher steht da nichts.
Das mache ich genauso. Die Fritzbox ist zwar der Meister über die
IPv4-Adressen in "ihrem" LAN und hat einen kleinen DHCP-Range, der
Linux-Router hat aber eine fest konfigurierte statische Adresse
außerhalb des DHCP-Ranges.
> - `dhcp 1', `request_prefix 1' und `accept_ra 2' sind die magischen
> Schlüsselwörter, die ich irgendwann mal ausgependelt habe, siehe
> _interfaces(5)_.
>
> - Der `dhclient6' stoppt(e) nicht ganz sauber, wenn das Interface
> runterfährt. Um es wieder hochfahren zu können, muss man as
> PID-File manuell entfernen.
Ok, das wird also der Bereich, wo mir mein systemd-networkd weh tun
wird. Eventuell doch erst mal den Router nach Bullseye updaten, der
systemd dort ist halt doch erheblichst frischer.
>1.4.3 Netzwerk-Konfiguration
>----------------------------
>
> In der `/etc/sysctl.conf' habe ich unter anderem folgendes stehen.
> Sieht wichtig aus:
>
> ,----
> | # EXPERIMENTAL
> | # ipv6 privacy extension ONLY on external device
> | #
https://wiki.ubuntuusers.de/IPv6/Privacy_Extensions/
> | net.ipv6.conf.dmz0.use_tempaddr = 2
> | net.ipv6.conf.dmz0.temp_prefered_lft = 14400
Auf dem Router halte ich das für unnötig, es sei denn, Du hast auch
Benutzer dort. Der Transport von Nutztraffic läuft nach meiner
Erwartung sowieso über die Link-Local-Adressen; ich wäre überrascht
wenn das bei Prefix Delegation anders wäre.
Möchtest Du Systeme im Hausnetz über IPv6 aus dem Internet adressieren
können, d.h. hat die Fritzbox eine Route für die delegierten Prefixe
angelegt?
> | # Uncomment the next line to enable packet forwarding for IPv6
> | # Enabling this option disables Stateless Address Autoconfiguration
> | # based on Router Advertisements for this host
> | net.ipv6.conf.all.forwarding=1
> |
> | ### enable SLAAC autoconfiguration for IPv6 even when we are forwarding:
> | net.ipv6.conf.all.accept_ra=2
> `----
Ja, wichtig, beides. accept_ra=2 ist eine Linux-Spezialität.
> Mit der bisherigen Konfiguration sollte der Server die von der
> Fritz!Box delegierten Präfixe bereits sehen und benutzen. Allerdings
> leitet er sie nicht an die Clients im Hausnetz weiter. Dafür nehmen
> wir `radvd'. Hier ist der entscheidende Knackpunkt, dass die
> dynamische Konfiguration des delegierten Prefixes nur mit /64
> funktioniert. Wenn uns der Internetprovider nur ein /64 gibt, können
> wir das nicht einfach kleinschneiden und weiterverteilen. Größer als
> /64 geht wohl auch nicht. (Ist länger her, dass ich das
> zusammengebaut habe, ich kann jetzt nur nach Aktenlage – also den
> Kommentaren im Configfile – berichten.)
Ja, das ist richitg, SLAAC braucht zwingend ein /64. Offensichtlicher
Grund: Innerhalb des Prefix nimmt jeder Client ein EUI-64 (bzw. eine
ähnlich gebildete privacy-extension-Adresse) und die ist nun mal 64
Bits lang.
Ich persönlich finde radvd nicht so toll, das ist voller Fallstricke -
und das, obwohl es im September 2020 das letzte Release gab. So ganz
tot ist der Upstream also nicht, aber ein Release alle drei Jahre
finde ich nicht toll.
> ,----
> | interface eth0
> | {
> | AdvSendAdvert on;
> |
> | # special prefix for prefix delegation ("grab current IP address from that interface")
> | prefix ::/64
> | {
> | DeprecatePrefix on;
> | DecrementLifetimes on;
> | };
> | RDNSS fdXX::1 {
> | };
> | DNSSL interne.dns.domsain.foo {
> | };
> | };
> `----
>
> Wie üblich ist da ein `XX' für den Server und hier kann sogar das
> interne DNS (Server + Domain) gesetzt werden.
RDNSS ist leider nicht besonders gut und breit unterstützt, es gibt
haufenweise Systeme die das nicht können. Ich liefere den DNS-Server
noch zusätzlich per stateless DHCPv6 dazu und prügle den internen
Servern ihre Service-Adressen ebenfalls per stateless DHCPv6
hinterher. Statische Adressen werden bei IPv6 mit einem DUID
konfiguriert; ich kratze mir den mit Wireshark aus der Leitung und
ärgere mich jedes Mal dass der ISC DHCPv6 den DUID nicht einfach
loggt. Zum Mäusemelken.
Im Zweifel nehmen die Clients eh den IPv4-DNS-Server :-( wenn man
sich nicht getraut hat ein IPv6-only-Netz zu definieren (das scheitert
bei mir regelmäßig an github).
>1.4.6 Firewall auf dem Server
>-----------------------------
>
> Ist ein eigenes Kapitel :-) Gleichlautende Regeln für IPv4/IPv6 lassen
> sich ganz wunderbar über `nftables' erledigen, die Config ist viel
> einfacher und übersichtlicher als mit `iptables'.
Das würde mich auch etwas detaillierter interessieren, ich hänge da
immer noch bei iptables über ferm fest (ein cooles Tool, leider auch
nur noch so barely alive).
> Wenn ich nichts vergessen habe, ist das alles.
DANKE!