Configurar DHCP en RHEL8

Configurar DHCP en RHEL8

Estoy configurando un firewall/enrutador de puerta de enlace usando rhel 8. Tengo un servidor con dos NICS, una pública que es un cliente dhcp, la segunda NIC será interna. La primera NIC es una zona pública, la segunda NIC es una zona interna. Me gustaría convertir la NIC interna en un servidor DHCP para clientes internos.

Necesito bloquear mi servidor DHCP para que no reciba solicitudes DHCP en la zona pública.

Pregunta: ¿Puede configurar dhcp para que sea un servidor solo para una NIC específica, o administrar esto con reglas de firewall para bloquear todo DHCP de la zona pública? ¿Cuál es una buena práctica al configurar una puerta de enlace multifunción como esta?

Respuesta1

En RHEL 8, dhcpd.serviceutiliza la $DHCPDARGSvariable en la ExecStart=línea de comando:

# /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

Pero el archivo de entorno /etc/sysconfig/dhcpddonde se definiría dicha variable tiene una advertencia que indica que no se debe usar más ese archivo:

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

Entonces, aparentemente el ISC dhcpd de RHEL 8 ha sido parcheado para seleccionar las interfaces para escuchar en función de si su archivo de configuración incluye declaraciones de subred para la interfaz o no. Si no hay una declaración de subred para una interfaz en particular, no debería responder para esa interfaz.

Debido a cómo funciona el protocolo DHCP en IPv4, dhcpdserá necesario utilizar un socket sin formato (para poder recibir paquetes de difusión con dirección de origen 0.0.0.0 y destino 255.255.255.255, y también enviar a 255.255.255.255 sin estar restringido por enrutamiento IPv4 normal), por lo que de todos modos necesita procesar sus paquetes entrantes con más cuidado.

Debido a que dhcpdutiliza sockets sin formato, tampoco se ve afectado por iptableslos firewalls.

Si aún desea agregar nombres de interfaz en la línea de comando, puede cp /lib/systemd/system/dhcpd.service /etc/systemd/system/modificar la versión en /etc/systemd/system, o simplemente usarla systemctl edit dhcpd.servicepara crear un archivo de anulación. Por supuesto, deberá recordar que los archivos de servicio pueden tener varias ExecStart=líneas, por lo que para anular la línea existente en lugar de simplemente agregar otra, deberá ejecutar systemctl edit dhcpd.servicey escribir tres líneas:

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

La primera ExecStart=línea vacía le dice a systemd que desea anular la ExecStartdefinición existente en el archivo de servicio en lugar de agregar una segunda.

Si utiliza la cp /lib/systemd/system/dhcpd.service /etc/systemd/system/estrategia, recuerde ejecutarla systemctl daemon-reloaddespués de modificar el /etc/systemd/system/dhcpd.servicearchivo.

Si usa systemctl edit dhcpd.service, ejecutará el equivalente a systemctl daemon-reloadautomáticamente.

Respuesta2

Depende de qué demonio dhcp en particular esté utilizando, pero sí, es posible configurar un demonio dhcp para dar diferentes respuestas según la interfaz de donde proviene la solicitud dhcp/bootp.opara ejecutar múltiples instancias de dhcpd, cada una configurada para escuchar solo en una interfaz.

En su caso, parece que solo quiere decirle a su dhcpd que escuche solo en su interfaz LAN privada. Si está utilizando ISC dhcpd, puede hacerlo simplemente agregando los nombres de las interfaces que desea que escuche en la línea de comando dhcpd.

por ejemplo, en mi sistema, quiero que dhcpd escuche solo en mis interfaces inalámbricas ( wifi0) y de red interna ( br0- uso una interfaz en puente porque es conveniente para ejecutar máquinas virtuales), así que lo ejecuto como:

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

información relacionada