Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:dhcp_isc_dhc-relay_archlinux

DHCP ISC DHC-Relay ArchLinux

DHCP ISC ist ein DHCP-Server, welcher die IP-Adressverteilung in einem Netzwerk realisieren kann. Der DHCP-Server des ISC (Internet System Consortium) ist einer der meist eingesetzten DHCP-Server weltweit.

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

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 DHC-Relays

welches als internes, nicht nach außen agierender DHC-Relay Konstrukt für ein privates Netzwerk mit drei Netzen durchgeführt werden soll. Nachfolgende Netze werden dabei verwaltet:

  • IDMZ - Domain: idmz.tachtler.net - IP-Adressbereich: 192.168.0.0/24
  • EDMZ - Domain: edmz.tachtler.net - IP-Adressbereich: 192.168.1.0/24
  • Intranet - Domain: intra.tachtler.net - IP-Adressbereich: 192.168.2.0/24

Installation

Um eine DHC-Relay unter Linux, hier im speziellen unter ArchLinux zu realisieren, wird ein Programm mit dem Namen

  • dhcrelay

benötigt.

Dieses Programm mit dem Namen dhcrelay befindet sich ebenfalls im Paket

  • dhcp - ist im community-Repository von ArchLinux enthalten.

:!: WICHTIG - Die Installation des Paketes dhcp erfolgt auf dem GATEWAY, welches als Router in z.B. das Netz 192.168.2.0/24 - intra.tachtler.net fungiert !!!

Mit nachfolgendem Befehl, wird das Pakete dhcp installiert:

# pacman --noconfirm -S dhcp

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

# pacman -Qil dhcp
Name            : dhcp
Version         : 4.4.2.P1-1
Description     : A DHCP server, client, and relay agent
Architecture    : x86_64
URL             : https://www.isc.org/dhcp/
Licenses        : custom:isc-dhcp
Groups          : None
Provides        : None
Depends On      : glibc  libldap
Optional Deps   : None
Required By     : None
Optional For    : None
Conflicts With  : None
Replaces        : None
Installed Size  : 9.50 MiB
Packager        : Christian Hesse <arch@eworm.de>
Build Date      : Wed 26 May 2021 11:58:04 PM CEST
Install Date    : Mon 12 Jul 2021 09:54:34 AM CEST
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : Signature

dhcp /etc/
dhcp /etc/dhcpd.conf
dhcp /etc/dhcpd6.conf
dhcp /usr/
dhcp /usr/bin/
dhcp /usr/bin/dhcpd
dhcp /usr/bin/dhcrelay
dhcp /usr/bin/omshell
dhcp /usr/include/
dhcp /usr/include/dhcpctl/
dhcp /usr/include/dhcpctl/dhcpctl.h
dhcp /usr/include/omapip/
dhcp /usr/include/omapip/alloc.h
dhcp /usr/include/omapip/buffer.h
dhcp /usr/include/omapip/convert.h
dhcp /usr/include/omapip/hash.h
dhcp /usr/include/omapip/isclib.h
dhcp /usr/include/omapip/omapip.h
dhcp /usr/include/omapip/omapip_p.h
dhcp /usr/include/omapip/result.h
dhcp /usr/include/omapip/trace.h
dhcp /usr/lib/
dhcp /usr/lib/libdhcp.a
dhcp /usr/lib/libdhcpctl.a
dhcp /usr/lib/libomapi.a
dhcp /usr/lib/systemd/
dhcp /usr/lib/systemd/system/
dhcp /usr/lib/systemd/system/dhcpd4.service
dhcp /usr/lib/systemd/system/dhcpd6.service
dhcp /usr/lib/sysusers.d/
dhcp /usr/lib/sysusers.d/dhcp.conf
dhcp /usr/lib/tmpfiles.d/
dhcp /usr/lib/tmpfiles.d/dhcp.conf
dhcp /usr/share/
dhcp /usr/share/licenses/
dhcp /usr/share/licenses/dhcp/
dhcp /usr/share/licenses/dhcp/LICENSE
dhcp /usr/share/man/
dhcp /usr/share/man/man1/
dhcp /usr/share/man/man1/omshell.1.gz
dhcp /usr/share/man/man3/
dhcp /usr/share/man/man3/dhcpctl.3.gz
dhcp /usr/share/man/man3/omapi.3.gz
dhcp /usr/share/man/man5/
dhcp /usr/share/man/man5/dhcp-eval.5.gz
dhcp /usr/share/man/man5/dhcp-options.5.gz
dhcp /usr/share/man/man5/dhcpd.conf.5.gz
dhcp /usr/share/man/man5/dhcpd.leases.5.gz
dhcp /usr/share/man/man8/
dhcp /usr/share/man/man8/dhcpd.8.gz
dhcp /usr/share/man/man8/dhcrelay.8.gz

Dienst/Deamon-Start konfigurieren

Leider gibt es aktuell im Paket dhcp keine systemd-Start-Skripte für den Dienst dhcrealy, so das diese Skripte wie mit nachfolgenden Befehlen selbst erstellt werden müssen.

/usr/lib/tmpfiles.d/dhcrelay.conf

Um später bestimmte Pfade für die PID-Dateien beim starten nutzen zu können, müssen diese im systemd zuerst eingerichtet werden, so dass diese auch permanent den systemd-Start-Skripten zur Verfügung stehen.

Dazu muss eine neue Konfigurationsdatei mit nachfolgendem Befehl und nachfolgendem Inhalt erstellt werden:

# touch /usr/lib/tmpfiles.d/dhcrelay.conf

Der Inhalt der Konfigurationsdatei /usr/lib/tmpfiles.d/dhcrelay.conf kann dann wie folgt aussehen:

# Configuration to create /run/dhcrelay4 and /run/dhcrelay6 directory
# Used as part of systemd's tmpfiles

d /run/dhcrelay4 755 dhcp dhcp
d /run/dhcrelay6 755 dhcp dhcp

/usr/lib/systemd/system/dhcrelay4.service

Nachfolgender systemd-Service kann nun unter nachfolgendem Pfad und mit nachfolgendem Namen angelegt werdenn:

  • /usr/lib/systemd/system/dhcrelay4.service

Der Inhalt des Service kann wie folgt aussehen:

[Unit]
Description=IPv4 DHCRELAY server
After=network.target network-online.target
Wants=network-online.target
 
[Service]
Type=forking
ExecStart=/usr/bin/dhcrelay -4 -q -pf /run/dhcrelay4/dhcrelay4.pid 192.168.0.20
RuntimeDirectory=dhcrelay4
PIDFile=/run/dhcrelay4/dhcrelay4.pid
User=dhcp
AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_NET_RAW
ProtectSystem=full
ProtectHome=on
KillSignal=SIGINT
# We pull in network-online.target for a configured network connection.
# However this is not guaranteed to be the network connection our
# networks are configured for. So try to restart on failure with a delay
# of two seconds. Rate limiting kicks in after 12 seconds.
RestartSec=2s
Restart=on-failure
StartLimitInterval=12s
 
[Install]
WantedBy=multi-user.target

:!: HINWEIS - Wichtig ist hier die IP-Adresse am Ende in nachfolgender Zeile:

ExecStart=/usr/bin/dhcrelay -4 -q -pf /run/dhcrelay4/dhcrelay4.pid 192.168.0.20
Option Beschreibung
192.168.0.20 DHCP-Server an den die DHCPREQUEST-Anfragen weitergeleitet werden

Abschließend muss die systemd Start Datei noch systemd bekannt gemacht werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# systemctl --system daemon-reload

/usr/lib/systemd/system/dhcrelay6.service

Nachfolgender systemd-Service kann nun unter nachfolgendem Pfad und mit nachfolgendem Namen angelegt werdenn:

  • /usr/lib/systemd/system/dhcrelay6.service

Der Inhalt des Service kann wie folgt aussehen:

[Unit]
Description=IPv6 DHCRELAY server
After=network.target network-online.target
Wants=network-online.target
 
[Service]
Type=forking
# DHCP-Relay is only necassary when more than one interface is available.  
ExecStart=/usr/bin/dhcrelay -6 -q -pf /run/dhcrelay6/dhcrelay6.pid -l net1 -u net0
RuntimeDirectory=dhcrelay6
PIDFile=/run/dhcrelay6/dhcrelay6.pid
User=dhcp
AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_NET_RAW
ProtectSystem=full
ProtectHome=on
KillSignal=SIGINT
# We pull in network-online.target for a configured network connection.
# However this is not guaranteed to be the network connection our
# networks are configured for. So try to restart on failure with a delay
# of two seconds. Rate limiting kicks in after 12 seconds.
RestartSec=2s
Restart=on-failure
StartLimitInterval=12s
 
[Install]
WantedBy=multi-user.target

:!: HINWEIS - Wichtig sind hier am Ende der nachfolgenden Zeile, die Parameter mit den richtigen Interfaces:

ExecStart=/usr/bin/dhcrelay -6 -q -pf /run/dhcrelay6/dhcrelay6.pid -l eth0 -u eth1
Option Beschreibung
-l eth0 Lauscht auf DHCPREQUEST auf dem Interface eth0
-u eth1 Weiterleitung der DHCPREQUEST an das Interface eth1

Abschließend muss die systemd Start Datei noch systemd bekannt gemacht werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# systemctl --system daemon-reload

Dienst/Deamon-Start einrichten

Um die DHC-Relay Dienste, welche als Dienst/Deamon als Hintergrundprozesse laufen, auch nach einem Neustart des Servers zur Verfügung zu haben, sollen die Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehlen realisiert werden kann:

# systemctl enable dhcrelay4.service dhcrelay6.service 
Created symlink /etc/systemd/system/multi-user.target.wants/dhcrelay4.service → /etc/systemd/system/dhcrelay4.service.
Created symlink /etc/systemd/system/multi-user.target.wants/dhcrelay6.service → /etc/systemd/system/dhcrelay6.service.

Eine Überprüfung, ob beim Neustart des Server der dhcrelay4-Dienst/Deamon und der dhcrelay6-Dienst/Deamon wirklich mit gestartet werden, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

# systemctl list-unit-files --type=service | grep dhcrelay
dhcrelay4.service                          enabled         disabled
dhcrelay6.service                          enabled         disabled

bzw.

# systemctl is-enabled dhcrelay4.service dhcrelay6.service
enabled
enabled

iptables/ip6tables Regeln

Damit der DHC-Relay-Server auch erreichbar ist und nicht die Weitergabe der IP-Address Informationen vom Paketfilter iptables und ip6tables blockiert wird, muss nachfolgende Regel zum iptables bzw. ip6tables-Regelwerk hinzugefügt werden.

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

# iptables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        6   398 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
5        0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 5 prefix "REC-INP Defend "
6        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with tcp-reset
7        0     0 REJECT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
8        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-proto-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.0.0/0            0.0.0.0/0            LOG flags 0 level 5 prefix "REC-FWD Defend "
2        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with tcp-reset
3        0     0 REJECT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
4        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-proto-unreachable

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

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

  • -A INPUT -p udp --dport 67 -j ACCEPT
  • -A OUTPUT -p udp --dport 68 -j ACCEPT

und hier die Befehle:

# iptables -I INPUT 5 -p udp --dport 67 -j ACCEPT
# iptables -I OUTPUT 1 -p udp --dport 68 -j ACCEPT

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

# iptables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       29 15634 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
5        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
6        0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 5 prefix "REC-INP Defend "
7        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with tcp-reset
8        0     0 REJECT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
9        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-proto-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.0.0/0            0.0.0.0/0            LOG flags 0 level 5 prefix "REC-FWD Defend "
2        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with tcp-reset
3        0     0 REJECT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
4        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-proto-unreachable

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

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

...
5        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
...
1        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:68
...

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

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

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

# cat /etc/iptables/iptables.rules
# Generated by iptables-save v1.8.7 on Mon Jul 12 16:38:03 2021
*mangle
:PREROUTING ACCEPT [179:83438]
:INPUT ACCEPT [179:83438]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [221:105831]
:POSTROUTING ACCEPT [222:105904]
COMMIT
# Completed on Mon Jul 12 16:38:03 2021
# Generated by iptables-save v1.8.7 on Mon Jul 12 16:38:03 2021
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [221:105831]
-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 udp -m udp --dport 67 -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 icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-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 icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-proto-unreachable
-A OUTPUT -p udp -m udp --dport 68 -j ACCEPT
COMMIT
# Completed on Mon Jul 12 16:38:03 2021
# Generated by iptables-save v1.8.7 on Mon Jul 12 16:38:03 2021
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [33:2171]
:POSTROUTING ACCEPT [33:2171]
COMMIT
# Completed on Mon Jul 12 16:38:03 2021

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 OUTPUT -p udp --dport 546 -j ACCEPT

und hier die Befehle:

# ip6tables -I INPUT 5 -p udp --dport 547 -j ACCEPT
# ip6tables -I OUTPUT 1 -p udp --dport 546 -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     udp      *      *       ::/0                 ::/0                 udp dpt:547
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         
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 (OUTPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     udp      *      *       ::/0                 ::/0                 udp dpt:547 
...
1        0     0 ACCEPT     udp      *      *       ::/0                 ::/0                 udp dpt:546
...

Um diese ip6tables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im ip6tables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend 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 Jul 12 16:48:38 2021
*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 Jul 12 16:48:38 2021
# Generated by ip6tables-save v1.8.7 on Mon Jul 12 16:48:38 2021
*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 udp -m udp --dport 547 -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 -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
-A OUTPUT -p udp -m udp --dport 546 -j ACCEPT
COMMIT
# Completed on Mon Jul 12 16:48:38 2021
# Generated by ip6tables-save v1.8.7 on Mon Jul 12 16:48:38 2021
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Mon Jul 12 16:48:38 2021

DHC-Relay starten

Falls alle voranstehenden Schritte wie beschrieben durchgeführt wurden, Installation, iptables/ip6tables, sollte dem ersten Start nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:

# ==== DHCP-Relay starten =====

Falls alle voranstehenden Schritte wie beschrieben durchgeführt wurden, **Installation, IPv6 deaktivieren, iptables**, sollte dem **ersten Start** nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:
<code>
# systemctl start dhcrelay4.service dhcrelay6.service

DHC-Relay Überprüfung

Ob der DHC-Relay-Server, sprich der dhcrelay4-Dienst/Deamon und der dhcrelay6-Dienst/Deamon auch tatsächlich als Hintergrundprozesse laufen, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite und dritte Zeile an!):

# ps auxwf | grep dhcrelay
root       64385  0.0  0.1   6736  2432 pts/1    S+   16:53   0:00                      \_ grep dhcrelay
dhcp       64381  0.0  0.1   5872  3496 ?        Ss   16:50   0:00 /usr/bin/dhcrelay -4 -q -pf /run/dhcrelay4/dhcrelay4.pid 10.0.0.20
dhcp       64382  0.0  0.1   6168  3788 ?        Ss   16:50   0:00 /usr/bin/dhcrelay -6 -q -pf /run/dhcrelay6/dhcrelay6.pid -l net1 -u net0

Eine weitere Überprüfung, ob der erste Start erfolgreich war, kann durch Einsicht in das

  • systemd-journal

durchgeführt werden.

Die Ausgabe des systemd-journald kann mit nachfolgendem Befehl erfolgen, die Ausgabe sollte wie nachfolgend dargestellt aussehen:

# journalctl -u dhcrelay?.service
Jul 12 16:59:15 vml010 systemd[1]: Starting IPv4 DHCRELAY server...
Jul 12 16:59:15 vml010 systemd[1]: Starting IPv6 DHCRELAY server...
Jul 12 16:59:15 vml010 dhcrelay[64601]: Bound to *:547
Jul 12 16:59:15 vml010 systemd[1]: Started IPv6 DHCRELAY server.
Jul 12 16:59:15 vml010 systemd[1]: Started IPv4 DHCRELAY server.

Interface Überprüfung

Ob und an welchen Interfaces das DHC-Relay „lauscht“, bzw. DHCP-Requests weitergeleitet werden, kann mit nachfolgendem Befehl überprüft werden:

# ss -taub | grep -E 'bootps|dhcpv6-server'
udp   UNCONN 0      0                          0.0.0.0:bootps             0.0.0.0:*                               
udp   UNCONN 0      0                                *:dhcpv6-server            *:*

:!: HINWEIS - Auch bei der Konfiguration nur ein Netzwerk-Interface für eingehende Broadcast-Anfragen zu nutzen, wird immer 0.0.0.0:67 als „Listener“ IP-Adresse angezeigt.

IP-Adressanfragen Überprüfung

Um die Anfrage einer IP-Adresse zu überprüfen, kann ein Blick in das systemd-journald geworfen werden, was mit nachfolgendem Befehl durchgeführt werden kann (nur relevanter Auszug):



FIXME

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/dhcp_isc_dhc-relay_archlinux.txt · Zuletzt geändert: 2021/07/12 17:08 von klaus