Configurando DHCP no RHEL8

Configurando DHCP no RHEL8

Estou configurando um roteador firewall/gateway usando rhel 8. Tenho um servidor com duas NICs, uma voltada para o público que é um cliente dhcp, a segunda NIC será voltada para interno. A primeira NIC é uma zona Pública, a segunda NIC é uma zona Interna. Gostaria de tornar a NIC interna um servidor DHCP para clientes internos.

Preciso impedir que meu servidor DHCP receba solicitações de DHCP na zona pública.

Pergunta: Você pode configurar o dhcp para ser um servidor apenas para uma NIC específica ou você gerencia isso com regras de firewall para bloquear todo o DHCP da zona pública? Qual é uma boa prática ao configurar um gateway multifuncional como este?

Responder1

No RHEL 8, dhcpd.serviceusa a $DHCPDARGSvariável na ExecStart=linha 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

Mas o arquivo de ambiente /etc/sysconfig/dhcpdonde tal variável seria definida possui um aviso, informando para não usar mais aquele arquivo:

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

Então, aparentemente, o ISC dhcpd do RHEL 8 foi corrigido para selecionar as interfaces para escutar com base no fato de seu arquivo de configuração incluir declarações de sub-rede para a interface ou não. Se não houver declaração de sub-rede para uma interface específica, ela não deverá responder por essa interface.

Devido ao funcionamento do protocolo DHCP no IPv4, dhcpdserá necessário utilizar um soquete raw (para poder receber pacotes de broadcast com endereço de origem 0.0.0.0 e destino 255.255.255.255, e também enviar para 255.255.255.255 sem ficar restrito pelo roteamento IPv4 normal) e, portanto, precisa processar os pacotes recebidos com mais cuidado de qualquer maneira.

Como dhcpdusa soquetes brutos, também não é afetado por iptablesfirewalls.

Se você ainda deseja adicionar nomes de interface na linha de comando, você pode cp /lib/systemd/system/dhcpd.service /etc/systemd/system/modificar a versão em /etc/systemd/system, ou apenas usar systemctl edit dhcpd.servicepara criar um arquivo de substituição. Claro, você precisará lembrar que os arquivos de serviço podem ter várias ExecStart=linhas, portanto, para substituir a linha existente em vez de apenas adicionar outra, você executaria systemctl edit dhcpd.servicee digitaria três linhas:

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

A primeira ExecStart=linha vazia informa ao systemd que você deseja substituir a ExecStartdefinição existente no arquivo de serviço em vez de adicionar uma segunda.

Se você usar a cp /lib/systemd/system/dhcpd.service /etc/systemd/system/estratégia, lembre-se de executar systemctl daemon-reloadapós modificar o /etc/systemd/system/dhcpd.servicearquivo.

Se você usar systemctl edit dhcpd.service, ele executará o equivalente systemctl daemon-reloada você automaticamente.

Responder2

Depende de qual daemon dhcp específico você está usando, mas sim, é possível configurar um daemon dhcp para fornecer respostas diferentes dependendo de qual interface veio a solicitação dhcp/bootpoupara executar múltiplas instâncias do dhcpd, cada uma configurada para escutar apenas em uma interface.

No seu caso, parece que você quer apenas dizer ao seu dhcpd para ouvir apenas na sua interface LAN privada. Se você estiver usando o ISC dhcpd, poderá fazer isso apenas adicionando os nomes das interfaces que deseja ouvir na linha de comando do dhcpd.

por exemplo, no meu sistema, quero que o dhcpd escute apenas nas minhas interfaces sem fio ( wifi0) e de rede interna ( br0- eu uso uma interface em ponte porque é conveniente para executar VMs), então eu o executo como:

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

informação relacionada