본 가이드는 OPNSense HAProxy 로드밸런서 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.
📑 Table of Contents
OPNSense의 NAT는 매우 강력한 L4라우팅을 제공하지만, Features 에서 명시한 목적에 따라서 HAProxy 플러그인을 활용해야 할 수 있다.
💡
HAProxy 사용시 다음의 제약사항을 반드시 주의해야 한다.
- 동일한 규칙의 포트포워딩을 제거해야합니다.
- 동일한 방화벽 규칙을 수동으로 Allow 해 줍니다. (출발지 제약 등 확인)
Installation
Install Plugin
os-haproxy(Community Plugin) 설치
Service Enable
- 설정 → 서비스
- HAProxy 사용:
check후 적용
Features
7계층 (애플리케이션 레이어) 기반 로드 밸런싱
| HAProxy 기능 | OPNsense NAT의 한계 |
| 요청 기반 분산 | 불가 |
HTTP 헤더, URL 경로, 쿠키 등 7계층 정보를 분석하여 트래픽을 다른 서버로 라우팅합니다. (예: /api는 서버 A로, /images는 서버 B로)
|
NAT는 패킷의 IP와 포트만 보고 처리하며, \*\*HTTP 요청의 내용(7계층 데이터)\*\*을 읽거나 분석할 수 없습니다. |
도메인 조건 으로 분기
- 조건 추가
규칙 및 검사 → 조건
- 규칙 추가
Required: 백엔드 풀 추가 (= NAT 리디렉션)
- 퍼블릭 서비스에 규칙 매핑
Required: 퍼블릭 서비스 추가 (= 목적지)
TLS Termination (SSL Offloading)
| HAProxy 기능 | OPNsense NAT의 한계 |
| 암호화/복호화 처리 | 불가 |
| 클라이언트로부터 받은 암호화된 트래픽을 복호화하여 백엔드 서버에 평문(HTTP)으로 전달하거나, 다시 재암호화하여 전달합니다. | NAT는 트래픽의 내용(페이로드)에 관여하지 않으며, 암호화된 트래픽을 단순히 통과시키는 역할만 합니다. NAT는 인증서를 관리하거나 복호화할 수 없습니다. |
Step1. VIP Managment
- WireGuard to LAN with HAProxy (for TLS Termination)
$$
\text{Client} \xleftrightarrow{[L3]tunnel/snat} \text{VPN Interface (Original Src)} \xrightarrow{[L3]decrypt/foward} \text{VIP Interface (Original Dst)} \xleftrightarrow{[L4]socket} \text{HAProxy Plugin} \xrightarrow{[L4/L7]dnat} \text{LAN Interface (Redirection)}
$$
-
VIP 설정 방법
-
이후 Frontend (퍼블릭 서비스)에 수신 대기 주소로 지정
- 퍼블릭 서비스 추가 (= 목적지)
-
DNS 추가/변경
Step2. Counfiguration
이하: 서비스 → HAProxy → 설정
- 목적지
80포트에 SSL 추가 -
실제 서버 추가 (= 1 of NAT 리디렉션)
-
백엔드 풀 추가 (= NAT 리디렉션)
-
퍼블릭 서비스 추가 (= 목적지)
-
목적지
443포트에 SSL 추가 -
실제 서버 추가 (= one of NAT 리디렉션)
-
백엔드 풀 추가 (= NAT 리디렉션)
-
퍼블릭 서비스 추가 (= 목적지)
정교한 헬스 체크 및 고가용성 (HA)
| HAProxy 기능 | OPNsense NAT의 한계 |
| 애플리케이션 상태 확인 | 매우 제한적 |
| 백엔드 서버에 주기적으로 HTTP 요청을 보내 \*\*정상적인 응답(예: HTTP 200 OK)\*\*을 확인하고, 문제가 발생하면 자동으로 트래픽을 우회시킵니다. | NAT 포트 포워딩은 서버가 \*\*”연결 가능한 상태”(포트가 열려 있음)\*\*인지 정도만 확인할 수 있으며, 서버 내의 애플리케이션이 정상적으로 작동하는지 여부는 판단할 수 없습니다. |
지속적인 연결 (Persistence)
| HAProxy 기능 | OPNsense NAT의 한계 |
| 세션 유지 | 불가 |
| 특정 클라이언트의 모든 요청을 동일한 백엔드 서버로만 보내도록 강제하는 기능(예: 쿠키 기반, 소스 IP 기반)을 제공합니다. | NAT는 연결이 들어올 때마다 서버 부하를 고려하지 않고 단순히 설정된 규칙에 따라 포워딩만 할 뿐, 이전 연결 상태를 기억하거나 유지할 수 없습니다. |
로드 밸런싱 알고리즘
| HAProxy 기능 | OPNsense NAT의 한계 |
| 다양한 분배 방식 | 매우 제한적 |
| Least Connections (가장 연결이 적은 서버로), Source Hash (소스 IP 기반), Round Robin 등 다양한 고급 분산 알고리즘을 지원합니다. | OPNsense의 기본 포트 포워딩은 1:N으로 포워딩하는 개념이 아니며, 여러 서버로 트래픽을 분산하려면 복잡하고 제한적인 방법(예: DNS Round Robin)을 사용해야 합니다. |
CLI on OPNSense
강제 재시작
/usr/local/etc/rc.d/haproxy stop
/usr/local/etc/rc.d/haproxy start
로그
# HAProxy 로그를 확인하는 표준 명령
grep 'haproxy' /var/log/system/latest.log
Verbose
/usr/local/sbin/haproxy -f /usr/local/etc/haproxy.conf -d
Leave a Reply