WireGuard · 2026-02-04

WireGuard에서 DNS 누출 방지와 설정 방법

WireGuard 연결 시 발생하는 DNS 누출 원인과 검증 절차, wg-quick DNS 구성 예시 및 systemd-resolved·resolvconf 연동 대응을 정리한 지침

작성일 : 2026-02-04 ㆍ 작성자 : 관리자
post
목차

개요

VPN으로 트래픽을 보호하더라도 DNS가 올바르게 구성되지 않으면 실제로는 누출이 발생한다. 이 글은 WireGuard에서 흔히 발생하는 DNS 누출 유형을 설명하고, WireGuard DNS 누출 방지를 위한 실무적인 WireGuard DNS 설정 방법wg-quick DNS 구성 예시를 제공한다. 초보자도 이해할 수 있도록 단계별로 정리한다.

DNS 누출이 발생하는 이유

운영체제 레졸버 충돌

Linux 배포판마다 systemd-resolved, resolvconf, NetworkManager 등 서로 다른 레졸버가 동작한다. WireGuard 인터페이스 생성 시 클라이언트의 DNS가 제대로 갱신되지 않거나 우선순위가 잘못 설정되면 로컬 ISP의 DNS로 쿼리가 나가 DNS 누출이 발생한다.

wg-quick의 기본 동작과 한계

wg-quick는 인터페이스를 빠르게 설정해 주지만, 모든 시스템에서 DNS 레졸버와 자동으로 완벽히 통합되지는 않는다. 특히 systemd-resolved가 활성화된 환경에서는 /etc/resolv.conf가 심볼릭 링크로 연결되어 있어 단순한 파일 덮어쓰기만으로는 동작하지 않는다.

검증 방법

누출 여부 확인은 외부 서비스와 로컬 패킷 캡처를 통해 가능하다. 다음 항목들이 유용하다.

  • 웹 기반 테스트: "DNS leak test" 사이트에서 VPN 연결 중 쿼리 소스를 확인
  • 로컬 도구: dig, nslookup으로 쿼리 응답의 이름 서버 확인
  • 패킷 캡처: tcpdump로 WireGuard 인터페이스 외부로 나가는 DNS(UDP/53) 패킷 확인

예: 간단한 확인 명령

dig @resolver.example.com +short whoami.akamai.net TXT

wg-quick로 DNS 설정하기

wg-quick 파일의 Peer 섹션이나 Interface 섹션에 DNS 항목을 추가하면 일부 환경에서 resolv.conf를 자동으로 갱신한다. 그러나 systemd-resolved나 NetworkManager와의 연동을 고려해야 한다.

기본 wg-quick 구성 예

[Interface]
Address = 10.0.0.2/24
PrivateKey = 
DNS = 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = 
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0, ::/0

위 구성에서는 wg-quick가 인터페이스 업 시 resolv.conf를 갱신하도록 시도한다. 다만 systemd-resolved가 활성화되어 있으면 별도 조치가 필요하다.

systemd-resolved 환경 대응

systemd-resolved가 있을 경우 /etc/resolv.conf가 /run/systemd/resolve/stub-resolv.conf나 /run/systemd/resolve/resolv.conf로 연결되어 있다. 이때는 wg-quick가 직접 수정하지 못하므로, 다음과 같은 선택지가 있다.

  • systemd-resolved의 링크를 /run/systemd/resolve/resolv.conf로 바꾸고 resolv.conf를 관리
  • systemd-resolved에 대해 per-link DNS 설정을 적용
  • resolvconf 도구를 사용하여 우선순위로 DNS를 설정

systemd-resolved에 대한 예시(링크 방식)

# /etc/wireguard/wg0.conf 내 DNS 항목이 동작하지 않을 때
# systemd-resolved를 통해 DNS를 우선화하는 방법 설명 예시
# 실제 명령은 시스템별로 다름

중요한 점은 네트워크 매니저나 다른 서비스가 /etc/resolv.conf를 덮어쓰지 않도록 조정하는 것이다. 이를 위해 NetworkManager의 DNS 설정을 수동으로 변경하거나, wg-quick가 실행될 때 후크 스크립트를 사용해 우선 DNS를 강제 설정하는 방법이 있다.

wg-quick 후크로 DNS 우선순위 적용

wg-quick은 up/down 스크립트를 지원한다. 이를 통해 인터페이스가 올라갈 때 레졸버를 적절히 갱신할 수 있다.

예: up/down 스크립트 구조

# /etc/wireguard/wg0.up
#!/bin/sh
# DNS 강제 설정 예시
echo 'nameserver 1.1.1.1' > /etc/resolv.conf

# /etc/wireguard/wg0.down
#!/bin/sh
# 복원 로직 예시
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

위 예는 단순화된 방식이며, 운영체제의 레졸버 방식에 맞게 수정해야 한다. systemd-resolved를 사용 중이면 해당 서비스의 API나 resolvectl을 활용한 설정 적용이 더 적절하다.

로컬 DNS 캐시(예: dnsmasq)와의 통합

로컬 DNS 캐시를 운영하면 퍼포먼스와 프라이버시 모두에 도움이 된다. 로컬 캐시에 WireGuard가 제공하는 상위 DNS를 포워딩하도록 설정하면 누출 가능성을 줄일 수 있다.

구성 요약

  • wg-quick의 DNS 항목을 사용해 원격 DNS를 지정
  • systemd-resolved, NetworkManager, resolvconf의 동작을 이해하고 우선순위를 조정
  • wg-quick up/down 후크로 레졸버를 제어
  • dnsmasq 같은 로컬 캐시를 도입해 로컬 포워딩 처리

문제 해결 체크리스트

  • vpn 연결 후 /etc/resolv.conf의 내용 확인
  • dig/nameserver 테스트로 실제 쿼리 경로 확인
  • tcpdump로 interface 외부의 UDP 53 트래픽 여부 확인
  • 다중 네트워크(예: Wi‑Fi + Ethernet) 환경에서 우선순위 확인

결론

WireGuard 자체는 안전하지만 DNS 설정이 올바르지 않으면 개인정보가 유출될 수 있다. wg-quick의 DNS 기능을 이해하고, 시스템 레졸버와의 연동을 적절히 처리하면 WireGuard DNS 누출 방지가 가능하다. 설정 후에는 항상 외부 도구와 패킷 캡처로 검증하는 절차가 필요하다.

WireGuard DNS 누출 방지 WireGuard DNS 설정 방법 wg-quick DNS 구성 systemd-resolved resolvconf dnsmasq VPN DNS 보안 DNS 누출 검증