WireGuard로 트래픽 분산하는 다중 인터페이스 설계
WireGuard 멀티인터페이스 구성과 트래픽 분산 원리, 소스·목적지 기반 정책 라우팅 예시, 구성 파일과 검증 절차를 초보자도 이해하기 쉬운 설명
목차
개요
WireGuard는 경량의 현대적 VPN으로 널리 쓰인다. 단일 인터페이스로도 충분한 경우가 많다. 그러나 트래픽 유형이나 경로를 분리해야 할 때는 다중 인터페이스 구성이 유리하다. 본문에서는 WireGuard 멀티인터페이스 구성과 WireGuard 트래픽 분산 구현 방법을 차근히 설명한다.
왜 다중 인터페이스인가?
필요성
여러 인터페이스를 쓰면 트래픽을 물리적 또는 논리적 경로로 분리할 수 있다. 예를 들어 업무용 트래픽과 백업 트래픽을 분리하거나, 서로 다른 ISP로 트래픽을 분산할 때 유용하다. 또한 부하 분산과 장애 대응을 단순화할 수 있다.
적용 사례
- 멀티 WAN 환경에서 특정 트래픽을 특정 회선으로 보낼 때
- 서비스별 트래픽을 격리하여 보안 정책을 적용할 때
- 지연시간이나 대역폭 조건에 따라 경로 선택이 필요할 때
준비사항
기본 요건
다중 인터페이스 구성 전 다음을 준비한다.
- 각 인터페이스에 할당할 IP 플랜
- WireGuard 설치(wg, wg-quick)
- 라우팅과 정책 라우팅(iproute2: ip rule, ip route)
구성 원리 요약
핵심은 인터페이스별로 별도 라우팅 테이블을 만들고, 소스 또는 목적지에 따라 ip rule로 테이블을 선택하는 것이다. WireGuard 인스턴스는 각각 고유한 인터페이스(wg0, wg1 등)와 키를 가진다. 트래픽 흐름을 제어하려면 다음 세 가지 요소를 조합한다.
- WireGuard 인터페이스 설정
- 라우팅 테이블 분리
- ip rule을 통한 정책 라우팅
구성 예시
1) wg0, wg1 설정 예
간단한 예시를 통해 인터페이스를 만든다. 각 파일은 /etc/wireguard에 위치한다.
[Interface]
Address = 10.0.0.1/24
PrivateKey =
ListenPort = 51820
[Peer]
PublicKey =
AllowedIPs = 10.0.0.0/24
# wg1
[Interface]
Address = 10.1.0.1/24
PrivateKey =
ListenPort = 51821
[Peer]
PublicKey =
AllowedIPs = 10.1.0.0/24
설명
위 구성은 두 개의 논리적 VPN 인터페이스를 만든다. 각 인터페이스는 자체 서브넷을 가지며, 이후 라우팅 테이블을 분리해 트래픽을 구분한다.
2) 라우팅 테이블과 ip rule
각 인터페이스에 대응하는 라우팅 테이블을 추가한다. 예시는 Linux 환경 기준이다.
# /etc/iproute2/rt_tables에 항목 추가
200 wg0_table
201 wg1_table
# wg0 기본 경로 설정
ip route add default dev wg0 table wg0_table
ip rule add from 10.0.0.0/24 table wg0_table priority 100
# wg1 기본 경로 설정
ip route add default dev wg1 table wg1_table
ip rule add from 10.1.0.0/24 table wg1_table priority 200
설명
소스 기반 정책 라우팅을 사용하면, 패킷의 출발지 IP에 따라 사용할 테이블을 결정한다. 즉 10.0.0.0/24에서 나가는 패킷은 wg0를 통해 나간다.
트래픽 분산 전략
소스 기반 vs 목적지 기반
소스 기반은 호스트 또는 서브넷 단위로 트래픽을 나눈다. 목적지 기반은 특정 서비스나 외부 네트워크를 기준으로 경로를 선택한다. 둘을 혼합하면 더 유연한 분산이 가능하다.
부하 분산 고려사항
- 각 인터페이스의 대역폭과 지연 특성을 파악
- 상태 점검(keepalive, Heartbeat)을 통해 경로 장애 감지
- 동적 경로 전환을 위한 스크립트 또는 라우팅 데몬 검토
검증과 트러블슈팅
기본 체크리스트
- wg show로 피어 연결과 전송량 확인
- ip rule list, ip route show table <테이블>로 정책 확인
- tcpdump 또는 tshark로 패킷 흐름 점검
# 유용한 명령 예
wg show
ip rule show
ip route show table wg0_table
ip route get 8.8.8.8 from 10.0.0.2
sudo tcpdump -i wg0 -n host 8.8.8.8
자주 발생하는 문제
- 잘못된 AllowedIPs로 인해 경로가 누락되는 경우
- 우선순위가 맞지 않아 예상치 못한 테이블이 선택되는 경우
- 포워딩 또는 방화벽 규칙 때문에 패킷이 차단되는 경우
운영 팁
설정 변경 시에는 단계별 검증을 권장한다. 먼저 인터페이스 단위 연결을 확인하고, 다음에 라우팅 테이블을 추가한다. 마지막으로 ip rule을 적용해 전체 흐름을 확인한다. 모니터링으로 트래픽 특성을 주기적으로 관찰하면 분산 정책의 효과를 판단할 수 있다.
결론
WireGuard 다중 인터페이스 구성은 트래픽 분산과 격리에 효과적이다. 기본은 인터페이스별 분리와 정책 라우팅의 조합이다. 제시한 구성 예와 점검 절차를 따르면 실무에서 안정적으로 운영할 수 있다. 환경에 따라 추가 자동화 도구를 도입하면 장애 대응과 확장성 확보에 도움이 된다.