포트포워딩 차단 후 Home Assistant 원격 접속 복구: Cloudflare Tunnel과 Tailscale 서브넷 라우터 구성

· home-assistant, cloudflare, tailscale

배경

결론부터

1. 터널 상태 확인과 토큰 교체

Error response from daemon: Conflict. The container name "/cloudflared-tunnel" is already in use by container "<컨테이너ID>".

2. trusted_proxies 걱정과 실제 상태

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - <LAN 대역>/24
    - 172.16.0.0/12
    - 127.0.0.1

3. 접속 불가의 진단

서버에서 구간별로 확인했다.

구간 결과
https://<HA-도메인> (Cloudflare 경유) 200
호스트 → <HA-내부IP>:8123 200
cloudflared 컨테이너 네트워크 → HA 200
터널 로그의 에러/경고 없음

4. 어떻게 공개/비공개를 나눌까

5. WireGuard와 Tailscale, 서브넷 라우터

sudo tailscale set --advertise-routes=<LAN 대역>/24

헷갈렸던 점들

1. 터널로 “접속 불가”인데 모든 구간이 정상

2. 서브넷 라우터를 켰는데 폰에서 HA에 접속 안 됨

정리

  1. 포트포워딩을 차단해도 터널(나가는 연결)이나 Tailscale(NAT 통과)로 원격 접속을 유지할 수 있다.
  2. 터널은 정말 필요한 서비스만 공개하고, 혼자 쓰는 서비스는 VPN 전용이 가장 안전하다.
  3. 접속 불가를 진단할 때는 구간별(외부 도메인 → 호스트 → 컨테이너 → 서비스)로 상태 코드를 확인하면 원인 파악이 쉽다. 같은 도메인도 네트워크마다 결과가 다를 수 있으니 통신사망에서 반드시 재확인한다.
  4. Tailscale 서브넷 라우터는 광고 후 관리 콘솔에서 승인까지 해야 동작한다. 라벨의 경고 표시가 신호다.
  5. 토큰은 compose에 평문으로 두지 말고 .env로 분리하고, 노출되었으면 교체한다.
  6. 남은 작업: NPM의 HA 항목 정리, 터널에서 HA 호스트네임과 DNS 레코드 삭제, 내부 도메인 + DNS 챌린지 인증서로 HA HTTPS 구성(새 세션).