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 IPv4
  • eines DHCP-Servers für IPv6
  • eines DHCP ISC Kea-Control-Agents (Steuerungs Agenten)

welche als internes, nicht nach aussen agierender DHCP-Server Konstrukt für ein privates Netzwerk mit einem Netz durchgeführt werden. Nachfolgendes Netz wird dabei verwaltet:

  • Intranet - Domain: intra.tachtler.net - IPv4-Adressbereich: 192.168.0.0/24
  • Intranet - Domain: intra.tachtler.net - IPv6-Adressbereich: fd00::dead:192:168:0:0/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;
  MinRtrAdvInterval 3;
  MaxRtrAdvInterval 10;
  AdvManagedFlag on;
};

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).

  • MinRtrAdvInterval 3;

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)

  • MaxRtrAdvInterval 10;

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)

  • 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)

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/06/10 21:31 von klaus