Search

pfsense DHCP 고가용 통신 장애

생성일
2025/06/02 04:06
수정일
2025/06/02 05:10
태그
pfsense
IT
freeBSD
2 more properties
DHCP를 이중화(고가용, High Availability) 를 할 때는 서로의 상태를 잘 인식할 수 있게 해주는 것이 중요하다.
이 부분이 잘 안되 DHCP에 고가용 설정을 하면 자꾸 장애 상태에 빠지고 있었다.
이와 관련하여 점검 매뉴얼이 있으면 좋을듯 하여 작성하여 본다.
환경은 다음과 같다.
Virtual IP: 10.10.10.1
Primary Interface IP: 10.10.10.2
Secondary Interface IP: 10.10.10.3
10.10.10.1 VIP를 기준으로, Primary와 Secondary는 각각 뒷번호 23을 가진다. 아래의 점검상항은 각각의 pfsense에 아이피 할당이 제대로 이루어졌다는 전제로 설명하겠다(만약 확실치 않다면, 할당 아이피부터 점검 사항에 포함해야ㅈ 한다).

Virtual IP(VIP)

Primary

Secondary

점검사항
Address( VIP주소와 range) 일치
Password 일치
VHIP Group 일치
Advertising frequency Base 일치
Advertising frequency Skew(Primary: 20 미만, Second: 20 초과)
Advertising frequency 설정이 중요하다. Advertising frequency는 IP가 서로 살아있는지를 광고하는 주기다.
Base는 보통 1로 둔다(특별한 경우에는 조절할 수 있다).
Skew는 베이스에 (n256n \over 256 초) 만큼을 곱한다. 그리고 Pfsense는 Base+Skew 값을 기준으로 누가 Primary인지를 정한다. 특히 DHCP의 경우, Primary는 Skew가 20보다 아래여야 한다. 반대로 Secondary는 20보다 위의 숫자를 두어야 한다.
만약 두 숫자가 둘 다 20 아래에 있거나, 20 위에 있다면 DHCP는 둘다 Primary로 여기거나, Secondary로 간주해버린다(필자의 경우 둘다 20 보다 큰 수를 설정하여 스스로가 Secondary라고 간주하고 서로에게 리스닝만 하는 상황에 빠져버렸다).

DHCP

Primary

Secondary

점검사항
Gateway와 VIP의 일치
Failover peer IP(Primary: 10.10.10.3, Secondary: 10.10.10.2)
다음은 DHCP 설정이다.
우선 Gateway와 VIP의 일치하는지를 보자.
그 다음 Failover peer IP를 보아야 하는데, 여기는 자신과 함께 dhcp 서비스의 failover 환경을 구성할 서비스의 실제 IP가 무엇인지를 묻는 것이다. 그러니까, 여기서 묻는 아이피는 ‘상대’의 아이피인 것이고 그렇기 때문에 ‘상대 peer의 IP’를 적어야 한다.
만약 이 둘이 정상적으로 구성이 되었다면, Status > DHCP Leases에서 다음과 같이 떠야 한다.
양쪽 모두 normal로 뜨지 않고 다르게 뜬다면, 로그를 점검해보도록 하자.

로그와 상태 점검

DCHP 로그

Status > System Logs > DHCP 로 들어가면, DHCP의 현 상태를 알 수 있다. 양쪽 pfsense 로그를 모두 열어보고 작동 상태를 살펴본다.

방화벽 로그

Status > System Logs > Firewall 로 들어간다. 우측 상단에 보면 Filter 아이콘이 있는데 이를 누르면 아래와 같이 로그 필터 설정이 뜬다.
Block을 체크하고, 점검하고자 하는 Interface 명을 적는다. Port 번호는 519 이다. 이는 DHCP가 서로의 상태를 확인하기 위해 통신하는 포트이다.
만약 여기에서 block이 뜨고 있다면, 방화벽 설정을 점검해야 한다. 역시 양쪽 모두에서 이루어져야 한다.

서비스 Listening 상태

Diagnostics > Command Prompt 로 가면, 커맨드를 직접 쳐볼 수 있다. 여기서 다음을 입력해보자.
sockstat -4 | grep 519
Bash
복사
519 포트의 소켓 상태를 조회하여 dhcp에서 소켓을 열고 있는지를 볼 수 있다.
netstat -na | grep 519
Bash
복사
다음은 네트워크 상태이다.
필자의 경우 단계에서 문제를 찾을 수 있었다.
네 개의 인터페이스에서 DHCP를 띄워놨는데, 한 곳을 제외하고는 전부 SYN_SENT 상태인 것이 보일 것이다. TCP 통신을 위해 SYN 사인을 보냈지만, 이 후 응답이 이루어지고 있지 않는 것이다. 이런 상태가 pfsense 양쪽에서 벌어지고 있고, 이것이Primary/Seconday 지정에 대한 문제인 것을 알게 되었다. Pfsense는 프라이머리와 세컨더리가 skew 값에서 결정하는데, 필자는 양쪽 모두를 20 보다 큰 값으로 지정한 것이 문제였던 것이다.

참고