Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:radvd_archlinux

radvd ArchLinux

Der Linux IPv6 Router Advertisement Daemon (radvd) ist ein Advertisement Daemon-Server, welcher IPv6 Router Advertisements in einem Netzwerk verteilt.

:!: Hinweis - Die nachfolgenden Ausführungen erheben keinen Anspruch auf Vollständigkeit, sondern stellen eine „Basiskonfiguration“ eins radvd-Servers für ein kleines privates Netzwerk dar!!!

Beschreibung Externer Link
Homepage https://radvd.litech.org/
Dokumentation https://datatracker.ietf.org/doc/html/rfc2461

Ab hier werden zur Ausführung nachfolgender Befehle root-Rechte benötigt. Um der Benutzer root zu werden, melden Sie sich bitte als root-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root:

$ su -
Password:

Überblick

Im nachfolgenden soll die Konfiguration

  • eines DHCP-Servers für IPv6 - Intranet-Adressen Unique local address (ULA)
  • eines radv-Servers für IPv6 - Internet-Adressen Global unicast address (GUA)

welche als internes, nicht nach aussen agierender DHCP-Server für IPv6-Konstrukt für ein privates Netzwerk mit nachfolgenden Netzen durchgeführt werden:

  • Intranet - Domain: intra.tachtler.net - IPv6-Adressbereich: fd00::dead:192:168:0:0/64
  • Internet - Domain: tachtler.net - IPv6-Adressbereich: 2001:db8:7203:192::/64

:!: HINWEIS - Das Interface für das Intranet lautet in dieser Beispielkonfiguration: net1

Installation

Zur Installation von Linux IPv6 Router Advertisement Daemon (radvd) wird nachfolgendes Paket benötigt:

  • radvd - ist im extra-Repository von ArchLinux enthalten.

Mit nachfolgendem Befehl, wird das Pakete radvd installiert:

# pacman --noconfirm -S radvd

Installationsverlauf

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket radvd installiert wurden.

# pacman -Qil radvd

Installierte Dateien

Dienst/Deamon-Start einrichten

Um den Linux IPv6 Router Advertisement Daemon (radvd), welche als Dienst/Daemon als Hintergrundprozess laufen soll, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienste/Daemons mit dem Server mit gestartet werden, was mit nachfolgenden Befehl realisiert werden kann:

# systemctl enable radvd.service
Created symlink /etc/systemd/system/multi-user.target.wants/radvd.service → /usr/lib/systemd/system/radvd.service.

Eine Überprüfung, ob beim Neustart des Server der radvd-Dienst/Daemon wirklich mit gestartet wird, kann mit nachfolgenden Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

# systemctl list-unit-files --type=service | grep radvd
radvd.service                                enabled         disabled

bzw.

# systemctl is-enabled radvd.service
enabled

ip6tables Regeln

Damit der Linux IPv6 Router Advertisement Daemon (radvd) auch erreichbar ist und nicht die Router-Advertisements vom Paketfilter ip6tables blockiert werden, müssen nachfolgende Regeln zum ip6tables-Regelwerk hinzugefügt werden.

Um die aktuellen ip6tables-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# ip6tables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all      *      *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp     *      *       ::/0                 ::/0                
3        0     0 ACCEPT     all      lo     *       ::/0                 ::/0                
4        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:22
5        0     0 LOG        all      *      *       ::/0                 ::/0                 LOG flags 0 level 5 prefix "REC-INP Defend "
6        0     0 REJECT     tcp      *      *       ::/0                 ::/0                 reject-with tcp-reset
7        0     0 REJECT     udp      *      *       ::/0                 ::/0                 reject-with icmp6-port-unreachable
8        0     0 REJECT     all      *      *       ::/0                 ::/0                 reject-with icmp6-addr-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 LOG        all      *      *       ::/0                 ::/0                 LOG flags 0 level 5 prefix "REC-FWD Defend "
2        0     0 REJECT     tcp      *      *       ::/0                 ::/0                 reject-with tcp-reset
3        0     0 REJECT     udp      *      *       ::/0                 ::/0                 reject-with icmp6-port-unreachable
4        0     0 REJECT     all      *      *       ::/0                 ::/0                 reject-with icmp6-addr-unreachable

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Nachfolgende Befehle, fügen folgende ip6tables-Regeln dem ip6tables-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:

  • -A INPUT -p udp --dport 547 -j ACCEPT
  • -A FORWARD -p udp --dport 546 -j ACCEPT

und hier die Befehle:

# ip6tables -I INPUT 5 -p ipv6-icmp -j ACCEPT
# ip6tables -I FORWARD 1 -p ipv6-icmp -j ACCEPT

Ein erneute Abfrage des ip6tables-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# ip6tables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all      *      *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp     *      *       ::/0                 ::/0                
3        0     0 ACCEPT     all      lo     *       ::/0                 ::/0                
4        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:22
5        0     0 ACCEPT     58   --  *      *       ::/0                 ::/0
6        0     0 LOG        all      *      *       ::/0                 ::/0                 LOG flags 0 level 5 prefix "REC-INP Defend "
7        0     0 REJECT     tcp      *      *       ::/0                 ::/0                 reject-with tcp-reset
8        0     0 REJECT     udp      *      *       ::/0                 ::/0                 reject-with icmp6-port-unreachable
9        0     0 REJECT     all      *      *       ::/0                 ::/0                 reject-with icmp6-addr-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
0        0     0 ACCEPT     58   --  *      *       ::/0                 ::/0         
1        0     0 LOG        all      *      *       ::/0                 ::/0                 LOG flags 0 level 5 prefix "REC-FWD Defend "
2        0     0 REJECT     tcp      *      *       ::/0                 ::/0                 reject-with tcp-reset
3        0     0 REJECT     udp      *      *       ::/0                 ::/0                 reject-with icmp6-port-unreachable
4        0     0 REJECT     all      *      *       ::/0                 ::/0                 reject-with icmp6-addr-unreachable

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     udp  --  *      *       ::/0                 ::/0                 udp dpt:546         

Die neuen Zeilen sind an Position 5 (INPUT) und Postition 1 (FORWARD) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     58   --  *      *       ::/0                 ::/0
1        0     0 ACCEPT     58   --  *      *       ::/0                 ::/0
...

Um diese ip6tables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im ip6tables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschliessend noch ausgeführt werden:

# /usr/sbin/ip6tables-save > /etc/iptables/ip6tables.rules 

Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das ip6tables-Regelwerk auch korrekt gespeichert wurde:

# cat /etc/iptables/ip6tables.rules
# Generated by ip6tables-save v1.8.7 on Mon Jun 10 21:15:13 2024
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Mon Jun 10 21:15:13 2024
# Generated by ip6tables-save v1.8.7 on Mon Jun 10 21:15:13 2024
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp6-port-unreachable
-A INPUT -j REJECT --reject-with icmp6-addr-unreachable
-A FORWARD -p ipv6-icmp -j ACCEPT
-A FORWARD -j LOG --log-prefix "REC-FWD Defend " --log-level 5
-A FORWARD -p tcp -j REJECT --reject-with tcp-reset
-A FORWARD -p udp -j REJECT --reject-with icmp6-port-unreachable
-A FORWARD -j REJECT --reject-with icmp6-addr-unreachable
COMMIT
# Completed on Wed Mar 31 10:15:10 2022
# Generated by ip6tables-save v1.8.7 on Mon Jun 10 21:15:13 2024
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Mon Jun 10 21:15:13 2024

Konfiguration:

Nachfolgende Konfigurationsschritte sollen eine grundlegende Konfiguration des Linux IPv6 Router Advertisement Daemon (radvd) darstellen und erheben keinen Anspruch auf Vollständigkeit in Bezug auf die Möglichkeiten die der Linux IPv6 Router Advertisement Daemon (radvd) bietet.

/etc/radvd.conf

Nachfolgende Konfigurationsdatei /etc/radvd.conf, stellt die Möglichkeit dar Router-Advertisements via IPv6 durchzuführen.

Dies ist die komplette Konfigurationsdatei:

interface net1
{
  AdvSendAdvert on;
  MaxRtrAdvInterval 600;
  MinRtrAdvInterval 200;
  AdvDefaultPreference medium;
  AdvHomeAgentFlag off;
  AdvManagedFlag on;
  AdvOtherConfigFlag on;
  AdvReachableTime 0;
  AdvRetransTimer 0;
  AdvCurHopLimit 64;
  AdvDefaultLifetime 1800;
  AdvSourceLLAddress on;
  prefix 2001:470:7203:192::/64
  {
    AdvOnLink on;
    AdvAutonomous on;
    AdvRouterAddr off;
    AdvValidLifetime 5400;
    AdvPreferredLifetime 2700;
  };
  route 2001:db8:7203:192::/64
  {
    AdvRoutePreference medium;
    AdvRouteLifetime 1800;
  };
  prefix fd00:0:0:192::/64
  {
    AdvOnLink on;  
    AdvAutonomous off;
    AdvRouterAddr off;
    AdvValidLifetime 5400;
    AdvPreferredLifetime 2700;
  };             
  route fd00:0:0:192::/64
  {
    AdvRoutePreference medium;
    AdvRouteLifetime 1800;
  };                                                                                                                                         
};

Erklärungen zu: /etc/radvd.conf

Allgemeine Konfigurationen

Erklärungen:

  • AdvSendAdvert on;

Der Parameter gibtan , ob der Router regelmässige Router-Ankündigungen sendet und auf Router-Anfragen antwortet oder nicht. Diese Option muss nicht mehr zuerst angegeben werden, aber sie muss auf on stehen, um Advertisements auf dieser Schnittstelle zu aktivieren. (Standard: off).

  • MaxRtrAdvInterval 600;

Die maximal zulässige Zeit zwischen dem Senden von unaufgeforderten Multicast-Router-Advertisements von der Schnittstelle, in Sekunden. Darf nicht kleiner als 4 Sekunden und nicht grösser als 1800 Sekunden sein. Minimum bei Verwendung von Mobile IPv6-Erweiterungen: 0.07. Bei Werten unter 0,2 Sekunden werden 0,02 Sekunden hinzugefügt, um die in RFC3775 spezifizierte Planungsgranularität zu berücksichtigen. (Standardwert: 600 Sekunden)

  • MinRtrAdvInterval 200;

Die Mindestzeit, die zwischen dem Senden von unaufgeforderten Multicast-Router-Advertisements von der Schnittstelle aus liegen darf, in Sekunden. Darf nicht weniger als 3 Sekunden und nicht mehr als 0,75 * MaxRtrAdvInterval betragen. Minimum bei Verwendung von Mobile IPv6-Erweiterungen: 0.03. (Voreinstellung: 0,33 * MaxRtrAdvInterval)

  • AdvDefaultPreference medium;

Die mit dem Standard-Router verbundene Präferenz, entweder „low“, „medium“, oder „high“.

  • AdvHomeAgentFlag off;

Anzeige das der sendende Router als Mobile „IPv6 Home Agent“ dienen kann. Es werden die von „Mobile IPv6“ festgelegten Mindestgrenzen für MinRtrAdvInterval und MaxRtrAdvInterval verwendet.

  • AdvManagedFlag on;

Wenn dieser Parameter gesetzt ist, verwenden die Hosts das verwaltete (zustandsbehaftete) Protokoll für die automatische Adressenkonfiguration zusätzlich zu den Adressen, die über die Zustandslose automatische Adressenkonfiguration konfiguriert werden. Die Verwendung dieses Parameters ist in RFC4862 beschrieben. (Standard: off)

  • AdvOtherConfigFlag on;

Die Hosts verwenden das verwaltete (zustandsbehaftete) Protokoll für die Autokonfiguration anderer (Nicht-Adress-)Informationen. Die Verwendung dieses Flags ist in RFC 4862 beschrieben.

  • AdvReachableTime 0;

Die Zeit in Millisekunden, die ein Knoten annimmt, dass ein Nachbar erreichbar ist, nachdem er eine Erreichbarkeitsbestätigung erhalten hat. Wird vom Algorithmus zur Erkennung der Nichterreichbarkeit des Nachbarn verwendet (siehe Abschnitt 7.3 von RFC 4861). Ein Wert von Null bedeutet nicht spezifiziert (von diesem Router). Darf nicht grösser als 3.600.000 Millisekunden (1 Stunde) sein.

  • AdvRetransTimer 0;

Die Zeit in Millisekunden zwischen neu gesendeten „Neighbor Solicitation“-Nachrichten. Wird von der Adressauflösung und dem Algorithmus zur Erkennung der Nichterreichbarkeit des Nachbarn verwendet (siehe Abschnitte 7.2 und 7.3 von RFC 4861). Ein Wert von Null bedeutet nicht spezifiziert (von diesem Router).

  • AdvCurHopLimit 64;

Der Standardwert, der in das Feld „Hop Count“ des IP-Headers für ausgehende (Unicast-)IP-Pakete eingefügt werden soll. Der Wert sollte auf den aktuellen Durchmesser des Internets gesetzt werden. Der Wert Null bedeutet unspezifiziert (von diesem Router).

  • AdvDefaultLifetime 1800;

Die mit dem Standard-Router verbundene Lebensdauer in Sekundeneinheiten. Der Höchstwert entspricht 18,2 Stunden. Eine Lebensdauer von 0 bedeutet, dass der Router kein Standard-Router ist und nicht in der Liste der Standard-Router erscheinen sollte. Die Lebensdauer des Routers bezieht sich nur auf die Nützlichkeit des Routers als Standard-Router. Sie gilt nicht für Informationen, die in anderen Nachrichtenfeldern oder Optionen enthalten sind. Optionen, die Zeitlimits für ihre Informationen benötigen, enthalten ihre eigenen Lebenszeitfelder.

  1. Muss entweder Null oder zwischen MaxRtrAdvInterval und 9000 Sekunden liegen.
  2. Standardwert: 3 * MaxRtrAdvInterval (Minimum 1 Sekunde).
  • AdvSourceLLAddress on;

Es wird die „Link-Layer-Adresse“ der ausgehenden Schnittstelle in die „RouterAdvertisement“ aufgenommen.

prefix: 2001:db8:7203:192::/64

Erklärungen:

  • AdvOnLink on;

Zeigt an, dass dieses Präfix für die „On-Link“-Bestimmung verwendet werden kann. Wenn es nicht gesetzt ist, macht die Anzeige keine Aussage über „On-Link“- oder „Off-Link“-Eigenschaften des Präfixes. So könnte das Präfix beispielsweise für die Adresskonfiguration verwendet werden, wobei einige der zum Präfix gehörenden Adressen „On-Link“ und andere „Off-Link“ sind.

  • AdvAutonomous on;

Dieses Präfix ist für die autonome Adresskonfiguration gemäss RFC 4862 verwendet werden kann.

  • AdvRouterAddr off;

Es wird die Adresse der Schnittstelle anstelle des Netzpräfixes gesendet, wie es von „Mobile IPv6“ verlangt wird. Es werden die von „Mobile IPv6“ festgelegten Mindestgrenzen für MinRtrAdvInterval und MaxRtrAdvInterval verwendet.

  • AdvValidLifetime 5400;

Die Zeitspanne in Sekunden (bezogen auf den Zeitpunkt, zu dem das Paket gesendet wird), die das Präfix für die Zwecke der „On-Link“-Ermittlung gültig ist. Der symbolische Wert „infinity“ steht für unendlich (d. h. ein Wert aus allen „Einerbits“ (0xffffffff)). Die gültige Lebensdauer wird auch von RFC 4862 verwendet.

Zu beachten ist, dass Clients AdvValidLifetime eines bestehenden Präfixes ignorieren, wenn die Lebensdauer unter zwei Stunden liegt, wie in RFC 4862 Abschnitt 5.5.3 Punkt e) gefordert.

Hinweis: Der von RFC 4861 vorgeschlagene Standardwert ist wesentlich länger: 30 Tage.

  • AdvPreferredLifetime 2700;

Die Zeitspanne in Sekunden (bezogen auf den Zeitpunkt des Paketversands), in der Adressen, die aus dem Präfix über zustandslose Adressautokonfiguration erzeugt wurden, bevorzugt bleiben. Der symbolische Wert „infinity“ steht für unendlich (d. h. ein Wert aus allen „Einerbits“ (0xffffffff)). Siehe RFC 4862.

Hinweis: Der von RFC 4861 vorgeschlagene Standardwert ist wesentlich länger: 7 Tage.

route: 2001:db8:7203:192::/64

Erklärungen:

  • AdvRoutePreference medium;

Die mit dem Standard-Router verbundene Präferenz, entweder „low“, „medium“, oder „high“.

  • AdvRouteLifetime 1800;

Die mit der Route verbundene Lebensdauer in Sekundeneinheiten. Der symbolische Wert „infinity“ steht für unendlich (d.h. ein Wert aus allen „Einerbits“ (0xffffffffff)).

  1. Standardwert: 3 * MaxRtrAdvInterval

prefix: fd00:0:0:192::/64

Erklärungen:

  • AdvOnLink on;

Zeigt an, dass dieses Präfix für die „On-Link“-Bestimmung verwendet werden kann. Wenn es nicht gesetzt ist, macht die Anzeige keine Aussage über „On-Link“- oder „Off-Link“-Eigenschaften des Präfixes. So könnte das Präfix beispielsweise für die Adresskonfiguration verwendet werden, wobei einige der zum Präfix gehörenden Adressen „On-Link“ und andere „Off-Link“ sind.

  • AdvAutonomous off;

Dieses Präfix ist für die autonome Adresskonfiguration gemäss RFC 4862 verwendet werden kann. Hier off gesetzt !!!

  • AdvRouterAddr off;

Es wird die Adresse der Schnittstelle anstelle des Netzpräfixes gesendet, wie es von „Mobile IPv6“ verlangt wird. Es werden die von „Mobile IPv6“ festgelegten Mindestgrenzen für MinRtrAdvInterval und MaxRtrAdvInterval verwendet.

  • AdvValidLifetime 5400;

Die Zeitspanne in Sekunden (bezogen auf den Zeitpunkt, zu dem das Paket gesendet wird), die das Präfix für die Zwecke der „On-Link“-Ermittlung gültig ist. Der symbolische Wert „infinity“ steht für unendlich (d. h. ein Wert aus allen „Einerbits“ (0xffffffff)). Die gültige Lebensdauer wird auch von RFC 4862 verwendet.

Zu beachten ist, dass Clients AdvValidLifetime eines bestehenden Präfixes ignorieren, wenn die Lebensdauer unter zwei Stunden liegt, wie in RFC 4862 Abschnitt 5.5.3 Punkt e) gefordert.

Hinweis: Der von RFC 4861 vorgeschlagene Standardwert ist wesentlich länger: 30 Tage.

  • AdvPreferredLifetime 2700;

Die Zeitspanne in Sekunden (bezogen auf den Zeitpunkt des Paketversands), in der Adressen, die aus dem Präfix über zustandslose Adressautokonfiguration erzeugt wurden, bevorzugt bleiben. Der symbolische Wert „infinity“ steht für unendlich (d. h. ein Wert aus allen „Einerbits“ (0xffffffff)). Siehe RFC 4862.

Hinweis: Der von RFC 4861 vorgeschlagene Standardwert ist wesentlich länger: 7 Tage.

route: fd00:0:0:192::/64

Erklärungen:

  • AdvRoutePreference medium;

Die mit dem Standard-Router verbundene Präferenz, entweder „low“, „medium“, oder „high“.

  • AdvRouteLifetime 1800;

Die mit der Route verbundene Lebensdauer in Sekundeneinheiten. Der symbolische Wert „infinity“ steht für unendlich (d.h. ein Wert aus allen „Einerbits“ (0xffffffffff)).

  1. Standardwert: 3 * MaxRtrAdvInterval

Erster Start

Mit nachfolgenden Befehlen werden die zuvor konfigurierten Dienste/Daemons von Linux IPv6 Router Advertisement Daemon (radvd) gestartet werden:

# systemctl start radvd.service

Mit nachfolgenden Befehlen kann überprüft werden, ob die entsprechenden Startvorgänge korrekt und wie gewünscht erfolgt sind:

# systemctl status radvd.service
● radvd.service - IPv6 Router Advertisement Daemon
     Loaded: loaded (/usr/lib/systemd/system/radvd.service; enabled; preset: di>
     Active: active (running) since Mon 2024-06-10 19:30:36 CEST; 4s ago
   Main PID: 3097 (radvd)
      Tasks: 2 (limit: 2315)
     Memory: 344.0K (peak: 804.0K)
        CPU: 1ms
     CGroup: /system.slice/radvd.service
             ├─3097 /usr/bin/radvd --nodaemon
             └─3098 /usr/bin/radvd --nodaemon

Jun 10 19:30:36 server systemd[1]: Started IPv6 Router Advertisement Daemon.
Jun 10 19:30:36 server radvd[3097]: [Jun 10 19:30:36] radvd (3097): version 2.1>
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/radvd_archlinux.txt · Zuletzt geändert: 2024/10/27 12:15 von klaus