DHCPv6-Präfix-Delegierungsserver für Linux?

10

Welchen Linux-DHCPv6-Client kann ich so einrichten, dass er ein Präfix auf einer Schnittstelle anfordert und dann auf allen anderen Schnittstellen Adressen ausgibt (oder auf Anfrage eine kleinere Präfixdelegation)? Außerdem müssten die Routen und Routerankündigungen eingerichtet werden.

Wenn dies nicht möglich ist, wie lautet die IPv6-Version der Programmierung eines IPv4-Routers für NAT, wo immer er sich befindet? Grundsätzlich versuche ich zu verstehen, wie ein Hersteller seine IPv6-fähigen Router einrichten würde, damit ein Kunde sie anschließen und sie funktionieren können. Ich spreche nicht von tatsächlichem NAT in IPv6, sondern von einer Möglichkeit für einen Router, einen DHCPv6-Präfixdelegierungsclient zu haben, der das empfangene Präfix in kleinere Präfixe und Adressen aufteilt und einen DHCPv6-Server für jede separate Downstream-Verbindung ausführt.

Ich habe ein Diagramm hinzugefügt:

Diagramm mit 9 Computern.  Nr. 2, Nr. 4, Nr. 6, Nr. 7 und Nr. 9 sind DHCPv6-Clients.  # 1 wird 2001 zugewiesen: db8: 1200 :: / 40 und gibt / 48 Präfixdelegationen aus.  # 3, # 5 und # 8 sind DHCPv6-Server und -Clients, die gleichzeitig Präfixe anfordern.

Gibt es (eine) Software (n), die ich unter Linux ausführen kann und die einmal konfiguriert und dann mit den Nummern 3, 5 oder 8 versehen werden kann und die sich je nach dem delegierten Präfix automatisch selbst einrichtet?

Azendale
quelle

Antworten:

6

Dies ist keine vollständige Antwort, da ich noch einige der Probleme durcharbeite, aber hier ist, was ich bisher habe, um ein nahezu identisches Setup bereitzustellen (allerdings aus etwas anderen Gründen).

Die gute Nachricht ist: Es kann innerhalb der Spezifikationen durchgeführt werden. Tatsächlich wurden die Spezifikationen explizit entwickelt, um diese Art der Subdelegation von Präfixen zu fördern, um die Notwendigkeit schmerzhafter Mehrfach-NAT-Schichten weitgehend zu vermeiden und gleichzeitig Flexibilität bei der Strukturierung von Netzwerken zu ermöglichen.

Die schlechte Nachricht ist: Es gibt keine "Out-of-the-Box" -Software, die ein Präfix von einem Upstream anfordert, Adressen und Routen lokal konfiguriert und Unterpräfixe an Downstream-Netzwerke verteilt. Zur Hölle, es scheint nicht einmal möglich zu sein, bereits vorhandene Software unter Linux (ohne Patches) zu verkabeln, um das zu tun, was getan werden muss. Am schlimmsten ist, dass es niemanden wirklich interessiert.

Was ich bisher eingerichtet und funktioniert habe, sieht folgendermaßen aus:

  • Ich verwende den WIDE DHCPv6-Client ( dhcp6c), um ein Präfix vom "Upstream" -Netzwerk anzufordern. Ich habe diesen Client gegenüber dem DHCP-Client von ISC ausgewählt, da er zum Zeitpunkt der Einrichtung der einzige DHCPv6-Client war, der anderen Schnittstellen automatisch Adressen aus dem empfangenen Präfix zuweist. Ich würde gerne glauben, dass sich andere DHCP-Clients seitdem verbessert haben, aber ich konnte mich an dieser Stelle nicht darum kümmern, dies zu überprüfen.

    Leider ist es nicht die delegierten Präfix Details zu seinen externen Hook - Skript aussetzen, was bedeutet , dass man nicht (leicht) Ihre „downstream“ dhcpd Config neu schreiben.

  • ISC-DHCP-Server (im v6-Modus) zum Zuweisen von Präfixen zum "Downstream" -Netzwerk. Ich habe mich dafür entschieden, weil der DHCP-Server von WIDE, soweit ich das beurteilen kann, Präfixe nur statisch und nicht dynamisch delegieren kann. Es ist überraschenderweise relativ einfach, den ISC-DHCP-Server für die dynamische Präfixdelegierung zu konfigurieren. etwas so Einfaches wie dieses wird den Trick tun:

    subnet6 2001:db8:1234:ffff::/64 {
      prefix6 2001:db8:1234:a000:: 2001:db8:c0f:aff0:: /60;
    }
    

    Dies überwacht die Schnittstelle, an der eine Adresse eingegeben wurde, 2001:db8:1234:ffff::/64und gibt / 60s aus dem angegebenen Bereich aus. Solange Sie die dhcp6cAktualisierung der obigen Konfiguration erzwingen können (nächste!), Können Sie die dhcpd-Konfiguration automatisch aktualisieren, wenn sich Ihr delegiertes Superpräfix ändert.

  • dhcp6cnimmt, wie bereits erwähnt, einen scriptParameter in seine Konfigurationsdatei, um ausgeführt zu werden, wenn eine DHCPv6-Antwort empfangen wird. Leider werden nur Parameter wie der SIP-Server und DNS-Resolver angezeigt, keine nützlichen Informationen wie das delegierte Präfix. Ich habe also das folgende Skript, um das für mich zu erledigen:

    #!/bin/sh
    
    (sleep 3;
    
    base_prefix="$(ip -6 ad sh eth0 | grep 'scope global' | cut -d ' ' -f 6 | cut -d : -f 1-4 | sed 's/00$//')"
    
    if [ "$base_prefix" = "" ]; then
      exit 0
    fi
    
    cat <<-EOF >/etc/dhcp/dhcpd6.conf
    default-lease-time 1800;
    max-lease-time 7200;
    
    subnet6 ${base_prefix}00::/64 {
      prefix6 ${base_prefix}a0:: ${base_prefix}f0:: /60;
    }
    EOF
    
    svc -t /etc/service/dhcp6d) &
    
    exit 0
    

    Wenn ich die ganze Arbeit in einer Sub-Shell erledige, kann ich eine Weile warten, sleep 3bis der DHCP-Client die Schnittstelle tatsächlich konfiguriert hat (anscheinend wird das Skript ausgeführt, bevor die Schnittstelle konfiguriert wird). Es funktioniert zuverlässig genug. Beachten Sie, dass mein ISP mir a delegiert /56, weshalb ich nur die zwei Nullen vom empfangenen Präfix entferne. Wenn Sie das Glück haben, ein Ganzes zu erhalten /48, ist die zuzuweisende Pipeline base_prefixviel einfacher.

Was noch nicht existiert und ich bin mir ziemlich sicher, dass das Patchen des Quellcodes erforderlich ist, ist das Einrichten von Routen, wenn ein Präfix delegiert wird. Soweit ich sehen kann, kann kein DHCP-Server die Route automatisch hinzufügen (ich habe WIDE sorgfältig geprüft dhcp6s, es kann es sicherlich nicht und ich kann auf den Röhren nichts finden, was ich vorschlagen könnte dass ISC DHCP es tut). Es gibt nicht einmal die Möglichkeit, einen externen Befehl auszuführen, der das zu delegierende Präfix und die verbindungslokale Adresse des Clients verwendet (ISC DHCP hat dies on commit { execute(...) }, aber es gibt keine Möglichkeit, die verbindungslokale Adresse des Clients ohnmächtig zu machen).

Das Problem ist, dass der Router, der die Delegierung erstellt, ohne diese entscheidende Funktionalität nicht wissen kann, wohin der Datenverkehr für das Präfix danach geleitet werden soll. Das ist eine ziemlich grundlegende Einschränkung, und ich bin ziemlich verblüfft, dass sich anscheinend noch niemand mit diesem Problem befasst hat - oder wenn ja, schweigen sie wirklich darüber.

Ich habe gerade einen Patch für ISC DHCP entwickelt, um der Eval-Funktionalität einen zusätzlichen "Datenausdruck" zu verleihen. Auf diese Weise kann ich ein externes Programm aufrufen, das dann Routen zur Präfixzuweisung und zum Freigeben / Ablaufen hinzufügen / entfernen kann. Der Patch ist unter https://github.com/mpalmer/isc-dhcp/commit/4c8ae763bcf83c9068d57a5d9f570690a581b6d6 verfügbar (gegen ISC DHCP 4.3.1). Ich habe (noch) kein Skript zum Hinzufügen der Route, aber ich werde es wahrscheinlich contribin diesem Zweig hinzufügen , sobald ich es geschrieben habe.

ADDENDUM: Es stellt sich heraus, dass weitere Änderungen erforderlich waren, damit Routen wieder entfernt werden können. Das wurde jetzt dem client-address-data-expressionZweig hinzugefügt , zusammen mit einem kleinen Ruby-Skript, das zeigt, wie alles miteinander kombiniert werden kann.

womble
quelle
Kennst du Dibbler ? Vielleicht ist es eine Alternative, da es die Präfixdelegierung in seinem Client und Server unterstützt - und es ist zB für Fedora / EPEL gepackt. In Abschnitt 6.8.11 des Benutzerhandbuchs finden Sie ein Beispiel für die Konfiguration der Präfixdelegierung im Client (optionales Hook-Skript, Up- / Downlink-Schnittstellen, Abfrageparameter usw.).
Maxschlepzig
Ich bin mir des Dibblers sehr wohl bewusst. Ist es in der Lage, die Routen auf dem Server einzurichten, wenn das Präfix delegiert wird? Auch ISC DHCP unterstützt die Präfixdelegierung auf seinem Client und Server und ist auch gepackt. Das Routing ist der Knackpunkt.
Womble
DIbbler verfügt über die scriptAnweisung zum Einrichten von Hooks. Dieser Mechanismus eignet sich zum Erstellen von Routen auf dem Server, wenn das Präfix delegiert wird (siehe Abschnitt 4.8).
Maxschlepzig
Hast du es tatsächlich getan? Weil ISC DHCP auch Hook-Skripte hat und gut ...
womble
Nun, Sie haben sich beschwert, dass dhcp6c die PREFIX-Informationen nicht verfügbar macht - im Gegensatz dazu: Dibbler macht das. Und es macht noch mehr: Ich habe einige Tests mit Dibbler-Client durchgeführt und mit einer einfachen Konfiguration (ohne script) wird automatisch eine Route für das delegierte Präfix auf der Downstream-Schnittstelle konfiguriert. Es wird auch ein generiert radvd.conf, mit dem ein radvdauf der Downstream-Schnittstelle gestartet werden kann. Wenn Sie ein externes Skript Konfiguration kann das Skript einige zusätzliche Setup - Schritte tun - verfügbar Umgebungsvariablen zB sind PREFIX*, SRV_OPTION*(zB DNS - Server), DOWNLINK_*...
maxschlepzig
1

Das Programm, das die Präfixdelegierung durchführt, ist radvd(Router Advertisement Daemon). Andere IPv6-Hosts auf dem Link sollten automatisch eine global routbare Adresse aus dem angekündigten Präfix konfigurieren.

IPv6 erfordert kein NAT, da von Hosts, die einen Internetzugang benötigen, global routbare Adressen erwartet werden. Sie müssen in Ihren Firewall-Regeln vorsichtig sein, um eine Infiltration aus dem Internet zu verhindern.

Von ISPs wird erwartet, dass sie ihren Kunden einen / 48- oder / 56-Netzwerkblock geben. Dies erfordert ein wenig Intelligenz auf der ISP-Seite, um sicherzustellen, dass jeder Router einen eindeutigen Block erhält. Ein / 64-Block wird wahrscheinlich als Uplink zum IPS-Netzwerk verwendet. Der Router kann dann beliebig viele / 64s aus dem Rest des Blocks ankündigen. In diesem Szenario wird wahrscheinlich nur eine verwendet.

Es gibt auch eine IPv6-DHCP-Implementierung.

Eine schnelle Einrichtung besteht darin, den Router für die Verwendung von 6to4-Tunneling zu konfigurieren. radvd wird für dieses Setup automatisch konfiguriert, erfordert jedoch eine öffentlich routbare IPv4-Adresse.

BEARBEITEN: radvdPräfixe können zwar nicht unterdelegiert werden, es kann jedoch automatisch ein / 64-Präfix basierend auf verfügbaren verfügbaren routbaren Adressen angekündigt werden. Es hat auch Base6to4, um das 6to4-Präfix des Routers automatisch anzukündigen. Die Subdelegation erfordert einige Planung und geht über das hinaus, was von einer Plug-and-Play-Konfiguration zu erwarten ist.

EDIT2: Wie IPv4 verfügt IPv6 nicht über eine Methode, um anhand der der eth0-Schnittstelle zugewiesenen Adresse zu bestimmen, welches Netzwerk zu den mit eth1 oder eth2 verbundenen Netzwerken gehört. Sobald Sie mehrere Netzwerksegmente haben, müssen Sie mit der Verwaltung der jedem Segment zugewiesenen Adressen beginnen. Die gute Nachricht ist, dass dies normalerweise einmal gemacht werden kann.

IPv6 macht es einfacher, da 5 und 8 leicht / 49- oder / 50-Subnetze der an 3 delegierten / 48 erhalten können. Ein alternativer Ansatz wäre, 3, 5 und 8 als Bridges im selben / 64-Subnetz zu konfigurieren. In einer solchen Konfiguration würden sie als Schalter funktionieren. Die Risikorouter 5 und 8 für die automatische Subnetzgenerierung delegieren beide dasselbe Subnetz.

Plug-and-Pray-Router für den Heimgebrauch verwenden einfach einen privaten Standardadressblock. Sie brechen schnell zusammen, wenn sie wie in Ihrem Diagramm gezeigt konfiguriert werden. Das Mischen von Routern mit unterschiedlichen Standardadressblöcken funktioniert möglicherweise. Andernfalls müssen Sie sicherstellen, dass jeder Router einen anderen Adressblock hat.

BillThor
quelle
Ich bin mir ziemlich sicher, dass radvd keine Präfixdelegierung durchführen kann, zumindest nicht für sich. Es muss so konfiguriert sein, dass ein Flag auf die Verwendung von DHCPv6 verweist. Anschließend kann der DHCPv6-Server Präfixe delegieren. Ich suche nach Software, die eine Präfixdelegation anfordern und diese dann unterlegieren kann, einschließlich kleinerer Präfixdelegationen.
Azendale
Antwort auf die Bearbeitung: Mit IPv4 kann ein Verbraucher einen Router anschließen und Computer über diesen verbinden. IPv4 verwendet dazu NAT. Wie macht ein IPv6-Router das? Benötigt es keinen Adressblock, um es seinem Downstream zuzuweisen? Meine Frage ist die Suche nach Software, die nach einem Adressblock fragt und diesen dann dem Downstream zuweist, unabhängig davon, ob es sich bei diesem Downstream um Clients oder einen anderen Router mit mehr Clients handelt.
Azendale
Ich denke, die einzige Situation, die ich von NAT hinter NAT sah, war ein Glücksfall. Ich denke, dies ist eine Gelegenheit für IPv6, besser als IPv4 zu sein. Aus dieser Frage unter tunnelbroker.net/forums/index.php?topic=2212.0 geht hervor, dass das, was ich frage , getan werden kann, während das Protokoll noch befolgt wird. Deshalb suche ich immer noch nach Software, um das zu tun, was ich will.
Azendale
1

Ich fand heraus, dass der Dibbler DHCPV6-Server die erforderlichen Informationen für seine Datei AddrMgr.xml bereitstellt. Es enthält die verbindungslokale Adresse des anfordernden Routers und das delegierte Präfix. Ich werde später damit experimentieren.

BEARBEITEN:

Ich habe eine kleine PHP-Datei geschrieben, die alle Routen erstellen kann, indem sie einfach die XML-Datei liest. Wie benutzt man:

  1. Installieren Sie die erforderliche Software auf dem Server: sudo apt install php php-xml

Important: You need to have radvd and dibbler-server configured to do this, but I think there are enough resources for radvd on the internet and dibbler-server comes with a standard configuration.

  1. Rufen Sie die Datei unter http://185.248.140.213/project/Sub/RouterHelper/routen.php.tar.gz ab
  2. Verschieben Sie die Datei nach / var / www / html /
  3. Melden Sie sich als Root an sudo suund geben Sie Folgendes ein:root@machine:~# echo "YOURLANINTERFACENAME" > /var/www/html/lanif.txt
  4. Berechtigungen ändern: sudo chmod 777 /var/www/html/lanif.txt
  5. Erstellen Sie eine Crontab für den Root-Benutzer: sudo runuser -l root -c 'crontab -e' Fügen Sie die folgende Zeile hinzu:

* * * * * php /var/www/html/routen.php Speichern Sie dann die Datei. Erledigt! Wenn Sie einen anderen Router anschließen, dauert es einige Sekunden bis zu einer Minute, bis die Routing-Tabelle aktualisiert ist, aber dann funktioniert es!

HimbeerserverDE
quelle
-1

Sieht so aus, als ob Sie ein Routing-Protokoll wie RIPng benötigen. Sie können quagga auf diesen Boxen installieren, die Schnittstellen konfigurieren, die das Routing-Protokoll benötigen (einmal) und los geht's.

David Beveridge
quelle