OPNsense HAProxy 플러그인: SSL 오프로딩과 로드밸런싱

💡 핵심 요약 (Executive Summary)

본 가이드는 OPNSense HAProxy 로드밸런서 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.

📑 Table of Contents
Reference & Guidelines (NOTE)

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계층 데이터)\*\*을 읽거나 분석할 수 없습니다.
도메인 조건 으로 분기
  • 조건 추가
Reference & Guidelines (NOTE)

규칙 및 검사 → 조건

  • 규칙 추가
Reference & Guidelines (NOTE)

Required: 백엔드 풀 추가 (= NAT 리디렉션)

  • 퍼블릭 서비스에 규칙 매핑
Reference & Guidelines (NOTE)

Required: 퍼블릭 서비스 추가 (= 목적지)

TLS Termination (SSL Offloading)
HAProxy 기능 OPNsense NAT의 한계
암호화/복호화 처리 불가
클라이언트로부터 받은 암호화된 트래픽을 복호화하여 백엔드 서버에 평문(HTTP)으로 전달하거나, 다시 재암호화하여 전달합니다. NAT는 트래픽의 내용(페이로드)에 관여하지 않으며, 암호화된 트래픽을 단순히 통과시키는 역할만 합니다. NAT는 인증서를 관리하거나 복호화할 수 없습니다.
Step1. VIP Managment
  • WireGuard to LAN with HAProxy (for TLS Termination)
Reference & Guidelines (NOTE)

$$
\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
Reference & Guidelines (NOTE)

이하: 서비스 → 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

강제 재시작
bash
/usr/local/etc/rc.d/haproxy stop
/usr/local/etc/rc.d/haproxy start
로그
bash
# HAProxy 로그를 확인하는 표준 명령
grep 'haproxy' /var/log/system/latest.log
Verbose
bash
/usr/local/sbin/haproxy -f /usr/local/etc/haproxy.conf -d

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *