집 서버 HTTPS를 내부 전용으로 전환하기: AdGuard DNS, WireGuard, 공개 DNS 레코드 정리

· homelab, docker, adguard, wireguard, dns, cloudflare

배경

결론부터

버린 선택지와 이유

1. 현재 상태 확인

NPM 프록시 호스트를 DB에서 확인했다. 확인 시점에 ha 항목이 두 개 있었다.

id 도메인 대상 상태
2 ha <서버 LAN IP>:8123 활성, 대상 HA 없음
9 ha <HA VM IP>:8123 비활성

2. AdGuard Home 복구

증상: AdGuard 대시보드에 차단 건수는 뜨지만, 실제 인터넷이 느리거나 timeout이 발생한다.

원인 확인

$ docker inspect adguardhome --format '{{json .NetworkSettings.Networks}}'
{}

조치: compose의 포트를 서버 LAN IP에만 바인딩하고 재생성했다.

ports:
  - "<서버 LAN IP>:53:53/tcp"
  - "<서버 LAN IP>:53:53/udp"
docker compose up -d --force-recreate

3. AdGuard 리라이트

4. 공개 DNS 레코드 정리

Cloudflare 목록을 조회하면서 두 종류를 구분했다.

정리 내용

cloudflare‑ddns 중단: * 와일드카드를 프록시 상태로 집 IP에 갱신하던 컨테이너였다. docker compose down으로 내렸고, 폴더도 삭제했다.

5. HA 터널 경로 삭제

6. 공유기 DHCP DNS와 WireGuard

공유기: DHCP DNS를 <서버 LAN IP>(기본)와 168.126.63.1(보조)로 설정했다. 원래는 자동으로 168.126.63.1~2가 내려가고 있었다. 원격 관리 포트(WAN)는 꺼져 있는 것을 확인했다.

WireGuard 클라이언트 설정

[Interface]
PrivateKey = <비공개 키>
Address = 10.0.172.<n>/24
DNS = <서버 LAN IP>, 168.126.63.1

[Peer]
...
AllowedIPs = 0.0.0.0/0
Endpoint = <ipTIME DDNS>:<포트>

7. 데스크탑에서 Cloudflare 오류

8. 아이패드: AdGuard VPN 앱

9. 접속 확인 결과

경로 결과
폰, WireGuard 연결 nc.hyuklee.net 열림
아이패드, 집 Wi‑Fi(앱 끔) 사파리, HA 앱 열림
데스크탑, 이더넷(DNS 자동) ha.hyuklee.net 열림 (수동 DNS 해제 후)
Fold7, 외부망(VPN 없음) 접속 안 됨 (의도한 동작)
Fold7, WireGuard 접속됨
Fold7, 내부망 접속됨

헷갈렸던 점들

정리

  1. 집 안과 WireGuard에서 같은 주소를 쓰려면 DNS를 AdGuard(<서버 LAN IP>)로 맞춘다. 공유기 DHCP, WireGuard DNS 줄, 기기의 DNS 설정을 모두 자동 또는 AdGuard로 둔다.
  2. 외부 공개는 공개 DNS 레코드(집 IP를 가리키는 것)와 Cloudflare 터널 공개 경로를 삭제해서 끊는다. 공개 DNS 조회로 확인한다.
  3. 기기 DNS를 수동으로 8.8.8.8 등으로 지정하면 AdGuard를 우회해 Cloudflare 오류가 난다. 자동으로 두는 것을 기본값으로 한다.
  4. 아이패드처럼 VPN 앱이 DNS를 가로채는 경우, 집에서는 앱을 끈다.
  5. 미확인 항목: cockpit CNAME 삭제 여부, cloudflared 터널의 다른 사용처, HA configuration.yaml의 external_url 설정, AdGuard 리라이트의 서브도메인 매칭 규칙.