RHEL8에서 DHCP 설정

RHEL8에서 DHCP 설정

저는 rhel 8을 사용하여 방화벽/게이트웨이 라우터를 설정하고 있습니다. 두 개의 NICS가 있는 서버가 있습니다. 하나는 dhcp 클라이언트인 공용 연결이고 두 번째 NIC는 내부 연결입니다. 첫 번째 NIC는 공개 영역이고 두 번째 NIC는 내부 영역입니다. 내부 연결 NIC를 내부 클라이언트용 DHCP 서버로 만들고 싶습니다.

내 DHCP 서버가 공개 영역에서 DHCP 요청을 수신하지 못하도록 차단해야 합니다.

질문: DHCP를 특정 NIC에 대해서만 서버로 구성할 수 있습니까? 아니면 공개 영역에서 모든 DHCP를 차단하기 위해 방화벽 규칙으로 이를 관리할 수 있습니까? 이와 같은 다기능 게이트웨이를 설정할 때 좋은 방법은 무엇입니까?

답변1

RHEL 8에서는 명령줄 에서 변수를 dhcpd.service사용합니다 .$DHCPDARGSExecStart=

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

/etc/sysconfig/dhcpd그러나 그러한 변수가 정의되는 환경 파일에는 해당 파일을 더 이상 사용하지 말라는 경고가 있습니다.

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

따라서 RHEL 8의 ISC dhcpd는 구성 파일에 인터페이스에 대한 서브넷 선언이 포함되어 있는지 여부에 따라 수신 대기할 인터페이스를 선택하도록 패치되었습니다. 특정 인터페이스에 대한 서브넷 선언이 없으면 해당 인터페이스에 대해 응답하지 않아야 합니다.

IPv4에서 DHCP 프로토콜이 작동하는 방식으로 인해 dhcpd원시 소켓을 사용해야 합니다(소스 주소가 0.0.0.0이고 대상이 255.255.255.255인 브로드캐스트 패킷을 수신하고 제한 없이 255.255.255.255로 전송하려면) 일반적인 IPv4 라우팅을 통해) 따라서 들어오는 패킷을 더 신중하게 처리해야 합니다.

Raw 소켓을 사용하기 때문에 방화벽 dhcpd의 영향도 받지 않습니다 iptables.

여전히 명령줄에 인터페이스 이름을 추가하려는 경우 cp /lib/systemd/system/dhcpd.service /etc/systemd/system/에서 버전을 수정 /etc/systemd/system하거나 을 사용하여 systemctl edit dhcpd.service재정의 파일을 만들 수 있습니다. 물론 서비스 파일에 여러 줄이 있을 수 있다는 점을 기억해야 합니다. ExecStart=따라서 다른 줄을 추가하는 대신 기존 줄을 재정의하려면 다음 systemctl edit dhcpd.service세 줄을 실행하고 입력합니다.

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

첫 번째 빈 줄은 두 번째 정의를 추가하는 대신 서비스 파일의 ExecStart=기존 정의를 재정의하겠다고 systemd에 알립니다 .ExecStart

전략 을 사용하는 경우 파일을 수정한 후 cp /lib/systemd/system/dhcpd.service /etc/systemd/system/실행하는 것을 잊지 마세요 .systemctl daemon-reload/etc/systemd/system/dhcpd.service

을 사용하면 systemctl edit dhcpd.service과 동등한 기능이 자동으로 실행됩니다 systemctl daemon-reload.

답변2

사용 중인 특정 dhcp 데몬에 따라 다르지만 예, dhcp/bootp 요청이 어떤 인터페이스에서 왔는지에 따라 다른 응답을 제공하도록 dhcp 데몬을 구성할 수 있습니다.또는dhcpd의 여러 인스턴스를 실행하려면 각 인스턴스가 하나의 인터페이스에서만 수신하도록 구성됩니다.

귀하의 경우에는 dhcpd에게 개인 LAN 인터페이스에서만 수신하도록 지시하려는 것처럼 들립니다. ISC dhcpd를 사용하는 경우 dhcpd 명령줄에서 수신 대기하려는 인터페이스의 이름을 추가하면 됩니다.

wifi0예를 들어 내 시스템에서는 dhcpd가 내 무선( ) 및 내부 네트워크( - VM 실행에 편리하기 때문에 브리지 인터페이스를 사용함) 인터페이스 에서만 수신 대기하기를 원하므로 다음 br0과 같이 실행합니다.

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

관련 정보