Einrichten von DHCP auf RHEL8

Einrichten von DHCP auf RHEL8

Ich richte einen Firewall-/Gateway-Router mit RHEL 8 ein. Ich habe einen Server mit zwei Netzwerkkarten, eine öffentlich zugängliche, die ein DHCP-Client ist, die zweite Netzwerkkarte wird intern zugänglich sein. Die erste Netzwerkkarte ist eine öffentliche Zone, die zweite eine interne Zone. Ich möchte die intern zugängliche Netzwerkkarte zu einem DHCP-Server für interne Clients machen.

Ich muss meinen DHCP-Server daran hindern, DHCP-Anfragen in der öffentlichen Zone zu empfangen.

Frage: Können Sie DHCP so konfigurieren, dass es nur für eine bestimmte Netzwerkkarte als Server fungiert, oder verwalten Sie dies mit Firewall-Regeln, um alle DHCP-Anschlüsse aus der öffentlichen Zone zu blockieren? Was ist eine gute Vorgehensweise beim Einrichten eines Multifunktions-Gateways wie diesem?

Antwort1

In RHEL 8 dhcpd.servicewird die $DHCPDARGSVariable in der ExecStart=Befehlszeile verwendet:

# /usr/lib/systemd/system/dhcpd.service
[Unit]
Description=DHCPv4 Server Daemon
Documentation=man:dhcpd(8) man:dhcpd.conf(5)
Wants=network-online.target
After=network-online.target
After=time-sync.target

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/dhcpd
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS
StandardError=null

[Install]
WantedBy=multi-user.target

Die Umgebungsdatei /etc/sysconfig/dhcpd, in der eine solche Variable definiert wäre, enthält jedoch eine Warnung, die darauf hinweist, diese Datei nicht mehr zu verwenden:

cat /etc/sysconfig/dhcpd 
# WARNING: This file is NOT used anymore.

# If you are here to restrict what interfaces should dhcpd listen on,
# be aware that dhcpd listens *only* on interfaces for which it finds subnet
# declaration in dhcpd.conf. It means that explicitly enumerating interfaces
# also on command line should not be required in most cases.

# If you still insist on adding some command line options,
# copy dhcpd.service from /lib/systemd/system to /etc/systemd/system and modify
# it there.
# https://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F

# example:
# $ cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
# $ vi /etc/systemd/system/dhcpd.service
# $ ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid <your_interface_name(s)>
# $ systemctl --system daemon-reload
# $ systemctl restart dhcpd.service

Offenbar wurde der ISC dhcpd von RHEL 8 so gepatcht, dass er die abzuhörenden Schnittstellen basierend darauf auswählt, ob seine Konfigurationsdatei Subnetzdeklarationen für die Schnittstelle enthält oder nicht. Wenn für eine bestimmte Schnittstelle keine Subnetzdeklaration vorhanden ist, sollte er für diese Schnittstelle nicht antworten.

Aufgrund der Funktionsweise des DHCP-Protokolls unter IPv4 dhcpdmuss ein Raw-Socket verwendet werden (um Broadcast-Pakete mit der Quelladresse 0.0.0.0 und dem Ziel 255.255.255.255 empfangen und auch an 255.255.255.255 senden zu können, ohne durch das normale IPv4-Routing eingeschränkt zu werden) und muss daher seine eingehenden Pakete ohnehin sorgfältiger verarbeiten.

Da dhcpdRaw Sockets verwendet werden, ist es auch nicht von iptablesFirewalls betroffen.

Wenn Sie dennoch Schnittstellennamen in der Befehlszeile hinzufügen möchten, können Sie cp /lib/systemd/system/dhcpd.service /etc/systemd/system/die Version in ändern /etc/systemd/systemoder einfach verwenden, systemctl edit dhcpd.serviceum eine Override-Datei zu erstellen. Natürlich müssen Sie daran denken, dass Servicedateien mehrere ExecStart=Zeilen haben können. Um also die vorhandene Zeile zu überschreiben, anstatt einfach eine weitere hinzuzufügen, führen Sie systemctl edit dhcpd.servicedrei Zeilen aus und geben sie ein:

[Service]
ExecStart=
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid <your_interface_name(s)>

Die erste leere Zeile teilt systemd mit, dass Sie die vorhandene Definition in der Servicedatei ExecStart=überschreiben möchten, anstatt eine zweite hinzuzufügen.ExecStart

cp /lib/systemd/system/dhcpd.service /etc/systemd/system/Wenn Sie die Strategie verwenden , denken Sie daran, sie systemctl daemon-reloadnach der Änderung der /etc/systemd/system/dhcpd.serviceDatei auszuführen.

Wenn Sie verwenden systemctl edit dhcpd.service, wird das Äquivalent von systemctl daemon-reloadautomatisch für Sie ausgeführt.

Antwort2

Es hängt davon ab, welchen bestimmten DHCP-Daemon Sie verwenden. Es ist jedoch möglich, einen DHCP-Daemon so zu konfigurieren, dass er unterschiedliche Antworten gibt, je nachdem, von welcher Schnittstelle die DHCP-/BootP-Anforderung kam.oderum mehrere Instanzen des DHCP-Dienstes auszuführen, von denen jede so konfiguriert ist, dass sie nur auf einer Schnittstelle lauscht.

In Ihrem Fall klingt es so, als ob Sie Ihrem dhcpd lediglich sagen möchten, dass er nur auf Ihrer privaten LAN-Schnittstelle lauschen soll. Wenn Sie ISC dhcpd verwenden, können Sie dies tun, indem Sie einfach den/die Namen der Schnittstelle(n), auf der/denen er lauschen soll, zur dhcpd-Befehlszeile hinzufügen.

Auf meinem System möchte ich beispielsweise, dass DHCP nur auf meinen drahtlosen ( wifi0) und internen Netzwerkschnittstellen ( br0ich verwende eine überbrückte Schnittstelle, da dies für die Ausführung von VMs praktisch ist) lauscht. Daher führe ich es wie folgt aus:

/usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf br0 wlan0

verwandte Informationen