Inhaltsverzeichnis
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:
Mit nachfolgendem Befehl, wird das Pakete radvd
installiert:
# pacman --noconfirm -S radvd
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket radvd
installiert wurden.
# pacman -Qil radvd
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.
- Muss entweder Null oder zwischen
MaxRtrAdvInterval
und 9000 Sekunden liegen. - 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)).
- 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)).
- 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>