문제 상황
Rocky Linux 8.10 서버에 dhcp-server
를 설치하고 systemctl restart dhcpd
실행 시 다음과 같은 에러가 발생함.
No subnet declaration for br-85feebdcdb4e (172.18.0.1).
** Ignoring requests on br-85feebdcdb4e. If this is not what
you want, please write a subnet declaration
in your dhcpd.conf file for the network segment
to which interface br-85feebdcdb4e is attached. **
No subnet declaration for virbr0 (192.168.122.1).
** Ignoring requests on virbr0. If this is not what...
No subnet declaration for eno2 (10.10.10.1).
** Ignoring requests on eno2. If this is not what...
No subnet declaration for eno1 (192.168.49.152).
** Ignoring requests on eno1. If this is not what...
Not configured to listen on any interfaces!
exiting.
여기서 핵심 에러 메시지는 마지막 줄의 Not configured to listen on any interfaces!
입니다.
원인 분석
ISC DHCP 서버는 기본적으로 시스템의 모든 활성 네트워크 인터페이스를 스캔한다고 합니다.
각 인터페이스에 할당된 IP 주소에 대응하는 subnet 선언이 /etc/dhcp/dhcpd.conf
파일에 없으면 해당 인터페이스를 무시하게 되죠.
현재 서버의 인터페이스 상태를 보면 다음과 같습니다.
br-85feebdcdb4e
: Docker가 생성한 브릿지 인터페이스입니다.virbr0
:libvirt
의 기본 가상 브릿지입니다.eno1
: 서버의 물리 네트워크 인터페이스입니다.eno2
: 또 다른 물리 네트워크 인터페이스입니다.
모든 인터페이스에 대한 subnet 선언이 /etc/dhcp/dhcp.conf
파일에 없기때문에, dhcpd
가 어떤 인터페이스에서도 동작하지 못하고 종료된 것으로 예상됩니다.
해결 방법
특정 인터페이스(eno2
)에서만 DHCP 서버를 동작시키는 것이 가장 깔끔한 해결책일 것 같네요.
eno2
인터페이스만 DHCP 동작하도록 설정해주겠습니다.
이를 위해서는 두 가지 설정이 필요합니다.
1단계: 현재 네트워크 상태 확인
먼저 서버의 네트워크 인터페이스 정보를 확인하겠습니다.
$ ip addr show eno2
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 10.10.10.1/24 brd 10.10.10.255 scope global eno2
이 정보를 바탕으로 eno2
인터펭,스가 10.10.10.0/24
네트워크에 속해 있음을 알 수 있죠?
2단계: DHCP 서버가 사용할 인터페이스 지정
/etc/sysconfig/dhcpd
파일을 편집하여 dhcpd
가 eno2
인터페이스에서만 동작하도록 설정해야 합니다.
$ vim /etc/sysconfig/dhcpd
# 파일 내용에 다음 줄 추가
# DHCP 서버가 리스닝할 인터페이스 지정
DHCPDARGS="eno2"
3단계: DHCP 설정 파일 작성
이제 /etc/dhcp/dhcpd.conf
파일에 eno2
네트워크에 대한 DHCP 설정을 추가합니다.
$ vim /etc/dhcp/dhcpd.conf
### eno2 인터페이스용 DHCP 설정을 작성해줍시다.
# 전역 설정
default-lease-time 600; # 기본 임대 시간 (초)
max-lease-time 7200; # 최대 임대 시간 (초)
authoritative; # 이 서버가 네트워크의 권한 있는 DHCP 서버임을 선언
# 로그 설정
log-facility local7;
# eno2 인터페이스용 subnet 선언
subnet 10.10.10.0 netmask 255.255.255.0 {
# DHCP로 할당할 IP 주소 범위
range 10.10.10.100 10.10.10.200;
# 게이트웨이 주소
option routers 10.10.10.1;
# DNS 서버 주소
option domain-name-servers 8.8.8.8, 8.8.4.4;
# 도메인 이름
option domain-name "idc.local";
# 브로드캐스트 주소
option broadcast-address 10.10.10.255;
}
4단계: 설정 파일 문법 검사
$ dhcpd -t -cf /etc/dhcp/dhcpd.conf
# 정상이면 다음 메시지 출력됨.
Internet Systems Consortium DHCP Server 4.3.6
Copyright 2004-2017 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcpd/dhcpd.leases
PID file: /var/run/dhcpd.pid