[pfSense] 16. WireGuard : pfSense에서 더 빠른 WireGuard VPN 설정

pfSense 홈랩 방화벽 16편 - 더 빠른 VPN

작성자

카테고리:

* 이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

(pfSense 홈랩 방화벽 ⑯)

앞 편의 OpenVPN이 잘 돌긴 하는데, 요즘은 WireGuard를 더 많이 쓴다. 코드가 훨씬 작고, 빠르고, 설정이 '키 교환' 개념이라 단순하다. 폰에서 켜고 끄는 반응도 즉각적이다.

WireGuard의 개념

WireGuard는 각 참여자가 공개키/비밀키 쌍을 갖고, 서로의 공개키만 등록하면 터널이 뚫리는 방식이다. 아이디·비밀번호가 아니라 키가 신원이다. pfSense에서는 터널(인터페이스)을 하나 만들고, 접속할 기기마다 Peer로 공개키를 등록한다.

OpenVPNWireGuard
속도보통빠름
설정다소 복잡단순(키 교환)
연결 전환느긋즉각적
성숙도오래됨·검증새롭지만 널리 채택

pfSense에서 만들기

WireGuard 패키지를 설치하면 VPN > WireGuard가 생긴다. ①터널을 만들고 서버 키쌍을 생성한다. ②접속할 폰/노트북에서도 키쌍을 만들어 그 공개키를 pfSense에 Peer로 등록하고, 반대로 pfSense의 공개키를 폰에 넣는다. ③WireGuard 인터페이스에 방화벽 허용 규칙을 추가한다. 서로의 공개키가 맞으면 핸드셰이크가 성사된다.

직접 해보기

  • WireGuard 패키지 설치 → 터널 생성 → 서버 키쌍 생성.
  • 클라이언트(폰 WireGuard 앱)에서 키쌍을 만들고 서로 공개키를 교환한다.
  • 인터페이스에 허용 규칙을 넣고 외부에서 접속해 핸드셰이크를 확인한다.

✅ 확인 — WireGuard 상태에서 최근 핸드셰이크 시각이 갱신되고 내부 기기에 닿으면 성공이다. 키 기반 인증이 아이디/비번과 뭐가 다른지 설명해 보자.

Allowed IPs, 이 필드 하나가 라우팅을 정한다

피어를 추가할 때 제일 헷갈리는 게 Allowed IPs다. 이름은 하나인데 방향에 따라 뜻이 두 개다. pfSense(서버) 쪽에선 “이 피어한테서 이 IP로 오는 트래픽만 받겠다”는 필터고, 클라이언트 설정 파일에선 “이 대역으로 갈 땐 터널로 보내라”는 라우팅 규칙이다.

그래서 클라이언트의 Allowed IPs를 0.0.0.0/0으로 두면 모든 인터넷 트래픽이 집을 거쳐 나가는 풀 터널이 되고, 내부 대역만(예: 192.168.1.0/24) 적으면 그 대역에 접근할 때만 터널을 타는 스플릿 터널이 된다. 카페에서 집 NAS만 쓸 거면 후자가, 공용 와이파이에서 트래픽을 통째로 숨기고 싶으면 전자가 맞다.

연결이 됐는데 아무 데도 못 갈 때 — 방화벽 두 곳

터널과 피어를 다 만들었는데 안 되면 열에 아홉은 방화벽이다. WireGuard는 규칙이 두 군데 필요하다. 하나는 WAN에 Listen 포트(기본 51820, UDP)를 여는 규칙 — 이게 없으면 핸드셰이크 자체가 안 된다. 다른 하나는 WireGuard 인터페이스(또는 그룹)에 내부망으로 가는 트래픽을 허용하는 규칙 — 이게 없으면 연결은 잡히는데 어디에도 못 간다. 나도 처음엔 앞의 규칙만 넣고 “왜 붙었는데 먹통이지” 한참 헤맸다.

핸드셰이크가 안 잡힐 때 체크리스트

Status > WireGuard 화면의 latest handshake에 시간이 안 찍히면 아직 UDP가 안 통하는 것이다. 순서대로 짚어보자.

  • WAN 규칙·포트포워딩 — 공유기 뒤에 pfSense가 있으면 앞단에서 51820/UDP를 pfSense로 넘겨줘야 한다.
  • 키를 반대로 붙여넣음 — pfSense엔 클라이언트의 공개키, 클라이언트엔 pfSense의 공개키가 들어간다. 비밀키는 각자 기기 밖으로 나가면 안 된다.
  • Allowed IPs 겹침 — 두 피어가 같은 IP를 주장하면 라우팅이 꼬여 한쪽이 죽는다. 피어마다 겹치지 않는 주소를 준다.
  • MTU — 특정 회선에서 큰 패킷이 막히면 핸드셰이크는 되는데 데이터가 안 흐른다. 터널 MTU를 1420 근처로 낮춰본다.

그래서 OpenVPN 대신 WireGuard?

WireGuardOpenVPN
코드 규모수천 줄 (감사 쉬움)수십만 줄
속도·지연빠르고 재접속 즉각상대적으로 무거움
설정키 교환 중심, 단순옵션 많음, 유연
포트UDP 고정UDP/TCP 선택
세밀한 정책단순한 편인증·옵션 풍부

정리하면 개인·홈랩 원격 접속이면 WireGuard가 거의 항상 편하고 빠르다. 다만 클라이언트가 제각각인 기업 환경이나 TCP 443으로 방화벽을 뚫어야 하는 상황이면 OpenVPN의 유연함이 아직 필요하다.

마지막으로 하나. 비밀키는 절대 공유하지 말자. 유출되면 그 즉시 키 쌍을 새로 만들고 관련된 피어를 전부 다시 설정해야 한다. 공식 문서는 Netgate WireGuard 문서가 가장 정확하다.

클라이언트 설정 파일은 이렇게 생겼다

복잡해 보여도 폰이나 노트북에 실제로 들어가는 건 이 짧은 텍스트 하나가 전부다. pfSense는 피어를 만들면 이 내용을 QR 코드로도 뽑아준다. 폰 WireGuard 앱으로 스캔하면 타이핑 없이 등록이 끝난다.

[Interface]
PrivateKey = (클라이언트 비밀키 — 이 기기 밖으로 나가면 안 됨)
Address    = 10.6.0.2/24          # 터널 안에서 이 기기가 쓸 주소
DNS        = 10.6.0.1             # pfSense를 DNS로 (선택)

[Peer]
PublicKey           = (pfSense의 공개키)
Endpoint            = home.example.com:51820   # 우리 집 공인주소:포트
AllowedIPs          = 0.0.0.0/0   # 전부 터널로(풀 터널). 내부만이면 192.168.1.0/24
PersistentKeepalive = 25          # NAT 뒤에서 연결 유지

눈여겨볼 건 PersistentKeepalive = 25다. 클라이언트가 공유기 NAT 뒤에 있으면 잠깐 조용한 사이 연결 통로가 닫혀버리는데, 25초마다 작은 신호를 보내 그걸 열어둔다. 폰처럼 이동하는 기기엔 사실상 필수다.

여기까진 '나 하나'가 밖에서 들어오는 원격 접속이었다. 다음 편은 두 지점을 통째로 잇는 사이트 간 VPN(IPsec)이다.

자주 묻는 질문 (FAQ)

WireGuard가 OpenVPN보다 빠른가요?

일반적으로 더 빠르고 가볍습니다. 간결한 설계 덕분인데, 대신 세부 기능·옵션은 OpenVPN이 더 많습니다.

WireGuard 설정이 복잡한가요?

키 페어와 피어의 허용 IP만 맞추면 되어 오히려 단순합니다. pfSense는 GUI로 키 생성·피어 등록을 지원합니다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다