Arch Linux systemd-networkd IPv6 Subnet Forwarding

  • Ich möchte gerne einen Teil eines IPv6-Subnets innerhalb einer virtuellen Netzwerkkarte nutzen und habe dazu unter Arch Linux in /etc/systemd/network/ folgende Dateien für den Dienst systemd-networkd hinertlegt


    ens3.network

    Code
    [Match]
    Name = ens3
    
    [Network]
    Address = 2a03:4000:26:9c::1/128
    Address = 185.243.8.149/24
    Gateway = fe80::1
    Gateway = 185.243.8.1
    DNS = 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001
    IPForward = ipv6

    wg0.network

    Mit dieser Konfiguration kann ich vom Netzwerk innerhalb des Adapter wg0.network wunderbar IPv4-Anfragen ins Internet schicken, allerdings über IPv6 erhalte ich ab dem 2. Hop keine Antwort. (Der 1. Hop ist 2a03:4000:26:9c:1::1).


    Könnte mir jemand auf die Sprünge helfen, wie auch das IPv6-Forwarding klappt?

  • Hallo,


    Netcups IPv6 Netze sind nicht geroutet. Du müsstest deshalb einen Neighbor Discovery Proxy installieren (ndpd) und konfigurieren, damit die Routen am Netcup Router angemeldet werden (vereinfacht)

  • So, jetzt nochmal von einem Rechner aus - die vorherige Antwort habe ich auf meinem Handy eingetippt.

    Der Dienst heißt ndppd - eine Beispielkonfiguration findest du hier: https://github.com/DanielAdolf…ob/master/ndppd.conf-dist


    Was du brauchst: einmal den Proxy Block, da kommt dein öffentliches Interface hinein. Im Proxyblock definierst du eine Rule, die dem IPv6 Netz + Maske entspricht die du für die virtuelle Netzwerkkarte nutzen möchtest (Docker / LXC / Open vSwitch / VPN).


    Hier gibt es dann zwei Betriebsmodi: static antwortet auf jede NDP Anfrage positiv. Wenn dein Adressraum häufig abgescannt wird, kannst du damit die Routingtabellen vom Netcup Router ins schwitzen bringen. Fürs Troubleshooting aber gut geeignet.


    interface leitet die NDP Anfragen transparent an ein Interface weiter. Hier muss dein virtuelles Interface rein. Hier ist aber wichtig, dass der Router auf diesem Interface die NDP Anfragen auch beantworten kann.


    Den Rest der Werte kannst du soweit auf Default lassen bzw. musst sie nicht in die Config schreiben.



    Für die IPv6 Zusatz IP-Netze weiß ich es nicht.

    Zusätzlich gebuchte IPv6 Netze sind immer geroutet und brauchen oben genanntes nicht.

  • Vielen Dank H6G für die Erklärung. Das ist des Rätsels Lösung (und danke für die leicht verständliche Anleitung).


    Ich habe nun folgende /etc/ndppd.conf

    Ich habe es zunächst mit iface wg0 ausprobiert (probieren kann nie schaden), doch am Interface wg0 ist die Konfiguration vollständig statisch (kein NDP im Einsatz) und entsprechend hat es damit wie erwartet nicht geklappt. Mit static hingegen hat es auf Anhieb geklappt, aber ich möchte nicht die Routingtabelle stresstesten. ;)

    Jetzt ist der Router einmal hinterlegt und ich glaube auto (und damit Antworten auf Basis der IPv6-Routingtabelle) wäre die beste Konfiguration, weswegen ich zu der zitterten Konfiguration kam. Da allerdings erstmal die Route zwischengespeichert ist, kann ich jetzt nicht testen, ob dies explizit so funktioniert. Ich werde es nur irgendwann merken, falls IPv6 wieder Probleme hätte.

  • Ich habe mich vertan. auto wird nicht funktionieren.

    Zitat

    auto (NEW) If this option is specified ndppd will attempt to detect which interface to use in order to forward Neighbor Solicitation Messages, by reading the routing table /proc/net/ipv6_route.

    Dann werde ich wohl dauerhaft static verwenden, da ich zurzeit keinerlei Server nutze, der für das Interface wg0 auf NDP-Anfragen antworten würde. Verbesserungsvorschläge sind willkommen. ;)