harald99
Goto Top

IPv6 für Faule

Hi!
Bisher hatte ich ipv6 nur für ganz Faule getestet: Proxy face-big-smile
Der nächste dirty Schritt wäre NAT.
Angeblich soll das auch mit der fe80-Adresse gehen, also habe ich auf dem Router eine netfilter-Regel angelegt:

-A POSTROUTING -s fe80::/64 -o ppp0 -j MASQUERADE

/proc/sys/net/ipv6/conf/ppp0/forwarding ist 1.

Eigentlich müsste das reichen. Ein Ping-Versuch auf dem Client zeigt mir aber:
Destination unreachable: Beyond scope of source address (kommt von meinem Router)

Also entweder geht das gar nicht oder SNAT greift nicht.
Meine Routen auf dem Client sehen so aus:
ip6-localhost/128  [::]                          Un   0   8      0 lo
fe80::8cc3:9434:5247:85ef/128  [::]  Un   0   4      0 enp9s0
fe80::/64  [::]                                         U    1024 4      0 enp9s0
ip6-mcastprefix/8  [::]                         U    256 17      0 enp9s0
[::]/0  fe80::1efd:8ff:fe7c:b4b9          UG   1024 11      0 enp9s0

Content-ID: 670473

Url: https://administrator.de/forum/ipv6-fuer-faule-670473.html

Ausgedruckt am: 05.01.2025 um 15:01 Uhr

aqui
aqui 03.01.2025 aktualisiert um 19:30:58 Uhr
Goto Top
Der nächste dirty Schritt wäre NAT.
NAT?? Seit wann gibt es NAT bei IPv6??!
https://danrl.com/ipv6/
Lesen und verstehen! face-wink
Mal ganz davon abgesehen das FE80:: Link Local Adressen unroutebar sind was du als gestandener Netzwerk Admin eigentlich wissen solltest. 🧐
Fazit: Workshop durchlesen und nochmal von vorn...
Harald99
Harald99 03.01.2025 um 19:31:14 Uhr
Goto Top
Bestimmt schon seit Dekaden (hier 2013):
https://mirrors.deepspace6.net/Linux+IPv6-HOWTO/nat-netfilter6..html

FE80 soll ja nicht geroutet werden, sondern "übersetzt".
aqui
aqui 03.01.2025 aktualisiert um 19:36:11 Uhr
Goto Top
Geht ja nicht weil die immer nur innerhalb einer Layer 2 Domain funktionieren...
Hast du denn überhaupt eine öffentliche v6 IP am ppp Interface und eine v6 Default Route mit der ein v6 Ping in die weite v6 Welt funktioniert?
gastric
gastric 03.01.2025 aktualisiert um 20:09:58 Uhr
Goto Top
Beyond scope of source address
Works as designed 😉, wie aqui schon schreibt LinkLocals sind dafür ungeeignet auch mit NAT ...
Zitat von @aqui:
Mal ganz davon abgesehen das FE80:: Link Local Adressen unroutebar sind
Eben, du brauchst mindestens ULAs im LAN und ne globale IPv6 am WAN damit funktioniert dann auch dein NAT mit IPv6 wenn du unbedingt willst, warum auch immer...
Aber auch nur mit ULA ist nicht 100% sichergestellt das der Client auch tatsächlich IPv6 verwendet wenn IPv4 auch noch verfügbar ist, das hängt dann vom Client ab ...

Sofern in einem privaten Netz im Dualstack mit IPv4 nur ULA-Adressen verwendet werden, bevorzugt die Mehrheit der Clients bei einer DNS-Auflösung die IPv4-Adresse, auch wenn ein AAAA-Record existiert, da davon auszugehen ist, dass mit einer ULA-Adresse niemals der öffentliche IPv6-Adressraum erreicht werden kann. Dies führt in der Praxis dazu, dass in privaten Netzen (insbesondere beim Einsatz von NAT6) im Dualstack von ULA-Adressen abgeraten wird.[35]
https://oldwiki.archive.openwrt.org/doc/howto/ipv6.nat6#why_should_the_u ...

Die Verwendung eines noch nicht vergebenen globalen Prefixes wäre also für Experimente damit zu bevorzugen, z.B. 4abc::/64

Gruß gastric
Harald99
Harald99 03.01.2025 aktualisiert um 20:09:35 Uhr
Goto Top
Der eingangs beschriebene Proxy läuft auf dem Router!
Also ja, ich hab ipv6 für "draussen".

Und mit ssh -6 und ping6 kann ich ipv6 erzwingen.
gastric
gastric 03.01.2025 aktualisiert um 20:25:21 Uhr
Goto Top
Ganz zu schweigen davon das man bei Verwendung des LinkLocal Raums immer das Quell-Interface mit angeben müsste da sonst nicht sichergestellt ist von welchem Interface die Pakete kommen. Denn fe80::/64 gibt es ja i.d.R. an mehreren Interfaces, aber auch wenn es nur ein einzelnes gibt erwarten das die Systeme auch wenn es aktuell nur einen Neighbor mit der entsp. Adresse gäbe.
Aber die Meldung
Beyond scope of source address
sagt ja eigentlich schon alles.
Harald99
Harald99 03.01.2025 um 22:11:09 Uhr
Goto Top
Die Meldung sagt, nur dass der Router nicht nattet. Aber das schreib ich oben schon.
gastric
gastric 03.01.2025, aktualisiert am 04.01.2025 um 08:12:00 Uhr
Goto Top
Zitat von @Harald99:

Die Meldung sagt, nur dass der Router nicht nattet. Aber das schreib ich oben schon.

Nein, sie sagt das der Adresstyp nicht mit der LL erreichbar ist .
LordGurke
LordGurke 04.01.2025 aktualisiert um 02:21:00 Uhr
Goto Top
Es wurde zwar schon mehrfach gesagt, aber nicht von jedem: Link-Local kann/darf nach Standard nicht geroutet werden. Deshalb versucht kein IPv6-Stack GUA zu kontaktieren und dabei eine LLA als Quelle zu verwenden. Da es keine anderen verfügbaren gebundenen Adressen gibt, ist das Ziel "beyond scope" und nicht erreichbar.
Das ist halt nunmal der Standard.
Du brauchst mindestens eine ULA für dein Vorhaben, aber ich frage mal, warum du unbedingt NAT machen willst. Speziell wenn du es einfach haben willst, ist die Verwendung der GUA auf dem Client und normales Routing, das einfachste, was man machen kann.
mossox
mossox 04.01.2025 um 15:46:49 Uhr
Goto Top
Hallo,

ipv6 ist nichts, was man mal mit Klick Klack einfach so schnell umsetzt.. zumindest nicht in einem einigermaßen professionell aufgezogenen Netzwerk.

Wenn es dennoch einfach und faul sein soll, klemmt dir eine FRITZ!Box dran und folge dem Einrichtungsassistenten.

Ansonsten kann ich das hier, zitierte Tutorial nur empfehlen. Da wirst du durch müssen, wenn du auch nur ansatzweise verstehen möchtest, wie ipv6 funktioniert. Viel Glück.
Harald99
Harald99 04.01.2025 um 23:59:35 Uhr
Goto Top
Kann nicht so ganz stimmen, denn mein Client gibt ja die Pakete dem default router.
Da ist also eine Routingentscheidung gefallen.

Das kann man den Kernel sogar direkt fragen:
#ip -6 route get 2a01:x:y:z::a
2a01:x:y:z::a via fe80::1efd:8ff:fe7c:b4b9 dev enp9s0 src fe80::8cc3:9434:5247:85ef metric 1024 pref medium

;-P
bitnarrator
bitnarrator 05.01.2025 aktualisiert um 06:47:55 Uhr
Goto Top
Wenn du grade erst anfängst dich mit IPv6 zu beschäftigen, warum dann gleich mit Erweiterungen, die nur geschaffen worden sind, weil einige „Netzwerk-Spezialisten“ zu faul waren ihre Netze vernünftig zu planen?

NAT ist und bleibt (wie auch schon bei IPv4) eine Methode, die nur dafür da ist Workarounds zu schaffen, mehr nicht.

NAT bei IPv6 ist ein sehr spezielles Thema und wird auch nicht von jedem Router unterstützt. Ich durfte mich damit mal auseinandersetzen, als man bei Strato für seinen VServer nur eine (!) Adresse bekommen hatte, und ich aber dahinter Container bereitstellen wollte. Ging nicht, bin dann weg von Strato zu nem vernünftigen Anbieter.


Die fe80::-Adresse von deinem Router ist nicht dafür gedacht um sie als Standard-Gateway zu nutzen. Dazu solltest du mindestens eine ULA (dann aber ohne Internetzugriff), oder wie es normalerweise ist, deine per SLAAC/DHCPv6 zugewiesene.

Und lass dich nicht von den fec0::-Adressen aus dem verlinkten Beispiel verwirren. Das ist der (mittlerweile auch schon deprecated) Nachfolger von RFC1918-Adressen. Sie funktionieren aber trotzdem anders als fe80::-Adressen.
gastric
gastric 05.01.2025 aktualisiert um 09:21:05 Uhr
Goto Top
Zitat von @Harald99:

Kann nicht so ganz stimmen, denn mein Client gibt ja die Pakete dem default router.
Da ist also eine Routingentscheidung gefallen.

Das kann man den Kernel sogar direkt fragen:
#ip -6 route get 2a01:x:y:z::a
2a01:x:y:z::a via fe80::1efd:8ff:fe7c:b4b9 dev enp9s0 src fe80::8cc3:9434:5247:85ef metric 1024 pref medium

;-P
Mit dem def. Gateway selbst kommuniziert der Client i.d.R. immer über die LinkLocal-Adresse, that's normal, da er nur die fe80 hat bleibt ihm nur die als SRC, heißt aber nicht das das GW mit der fe80 auch weiterleitet, was ein Router niemals tut ...

Die fe80::-Adresse von deinem Router ist nicht dafür gedacht um sie als Standard-Gateway zu nutzen
Doch das ist vollkommen normal, schau mal in deine IPv6 Routing Tabelle, da wirst du immer eine LL Adresse als Def GW vorfinden falls nicht manuell geändert. Ist nicht anders als bei IPv4 auch ...
Harald99
Harald99 05.01.2025 um 10:44:52 Uhr
Goto Top
Zitat von @gastric:

Die fe80::-Adresse von deinem Router ist nicht dafür gedacht um sie als Standard-Gateway zu nutzen
Doch das ist vollkommen normal, schau mal in deine IPv6 Routing Tabelle, da wirst du immer eine LL Adresse als Def GW vorfinden falls nicht manuell geändert. Ist nicht anders als bei IPv4 auch ...

Nö!
Du musst die Route selbst setzen, sonst hast du keine:
Kernel-IPv6-Routentabelle
Destination                    Next Hop                   Flag Met Ref Use If
::1/128                        [::]                       Un   0   6     0 lo
::1/128                        [::]                       U    256 1     0 lo
fe80::e23f:49ff:feb2:9d4b/128  [::]                       Un   0   5     0 eth0
fe80::/64                      [::]                       U    256 2     0 eth0
ip6-mcastprefix/8              [::]                       U    256 6     0 eth0
[::]/0                         [::]                       !n   -1  1     0 lo
gastric
gastric 05.01.2025 aktualisiert um 11:39:22 Uhr
Goto Top
Wenn du nen Router hast der RAs und sich als Router announced schon.

Du versuchst hier etwas umzusetzen was der Standard eben nicht vorsieht.

Btw. was soll darn jetzt "faul" sein wenn du manuell am Client rumpfuschen musst ??

Wenn du keine GUAs hast, announce nen ULA per RA ins Netz, NATe den am GW, und gut is, done.
Harald99
Lösung Harald99 05.01.2025 um 11:42:02 Uhr
Goto Top
ich sprach von fe80; dass ich mit einer fd-Adresse rauskomme, habe ich schon gesehen.
Mich wundert es nur, dass der Kernel fe80 schon routen will.
Vielleicht baue ich mal ein Testnetz und Teile fe80 in 2 Netze und guck mal ob Linux da routen würde.

Eigentlich ist das schon aussagekräftig, wenn ich meinen Router frage, wohin er meine Anfrage zu Google schicken würde, wenn sie von meinem Desktop kommt:
#ip -6 route get 2a00:1450:4001:812::2003 from fe80::8cc3:9434:5247:85ef
2a00:1450:4001:812::2003 from fe80::8cc3:9434:5247:85ef via fe80::8aa2:5eff:feb8:de98 dev ppp0 proto ra src 2003:e0:a:b:x:d:e:f metric 1024 hoplimit 64 pref medium

fe80::8aa2:5eff:feb8:de98/128 ist die Adresse des ISP-Routers face-big-smile
gastric
gastric 05.01.2025 aktualisiert um 12:20:27 Uhr
Goto Top
Das ist normal wenn du den Router selbst fragst. Forwarden tut er die Pakete trotzdem nicht, weil fe80 gar nicht erst in die FORWARD-Chain kommen kann, und da das SRCNAT bekanntlich erst in der POSTROUTING-Chain stattfindet und diese in der Reihenfolge erst nach der Forwarding-Chain kommt geht es wie x mal gesagt aus Prinzip nicht da kannst du probieren so viel du willst.
Deswegen ist die ICMPv6-Antwort des Routers auch vollkommen korrekt

screenshot

screenshot

Der Router verhindert also schon anhand der fe80 das der Traffic ins Forwarding gelangen kann und somit kann auch niemals das SRCNAT greifen face-wink.
gastric
gastric 05.01.2025 aktualisiert um 13:20:39 Uhr
Goto Top
Hier auch noch die RFC dazu
RFC 4291 - Link-Local IPv6 Unicast Addresses
Link-Local addresses are designed to be used for addressing on a single link for purposes such as automatic address configuration, neighbor discovery, or when no routers are present.
Routers must not forward any packets with Link-Local source or destination addresses to other links.
Harald99
Harald99 05.01.2025 um 13:26:56 Uhr
Goto Top
Das ist normal wenn du den Router selbst fragst. Forwarden tut er die Pakete trotzdem nicht, weil fe80 gar nicht erst in die FORWARD-Chain kommen kann, und da das SRCNAT bekanntlich erst in der POSTROUTING-Chain stattfindet und diese in der Reihenfolge erst nach der Forwarding-Chain kommt geht es wie x mal gesagt aus Prinzip nicht da kannst du probieren so viel du willst.

Bis PREROUTING gehts.
Finds trotzdem doof, dass der Client den Defaul-Router mit fe80-Traffic nerven kann.
aqui
aqui 05.01.2025 aktualisiert um 13:47:36 Uhr
Goto Top
Finds trotzdem doof, dass der Client den Defaul-Router mit fe80-Traffic nerven kann.
Ist bekanntlch nun mal simpler v6 Standard... face-wink Und "nerven" tut er ihn ja auch nicht wirklich.