집에서 Home Assistant를 쓰다 보면 어느 순간 꼭 한 번은 이런 상황이 온다. 외출 중에 에어컨을 켜고 싶은데, 앱을 열어봐도 연결이 안 된다. 당연하다. 로컬 네트워크 안에서만 돌아가고 있으니까. HA 외부접속 설정을 안 해두면 집 밖에서는 아무것도 할 수 없다. 이번 글은 그 문제를 해결하기 위해 직접 삽질하면서 정리한 내용이다. DuckDNS 도메인 설정, 포트포워딩, HTTPS 인증서, 그리고 설정 후 꼭 확인해야 할 보안 체크리스트까지 순서대로 짚어본다.
앞 글에서 VM에 HA OS를 올리는 것까지 마쳤다면, 이번 단계가 사실상 스마트홈을 ‘진짜 쓸 수 있는 상태’로 만드는 마지막 고비다. 겁먹을 필요는 없는데, 순서를 틀리거나 한 단계를 빠뜨리면 접속이 안 되거나 보안 경고가 뜨는 상황이 생기기 때문에 꼼꼼하게 따라가는 게 중요하다.
왜 외부에서 접속이 안 되는 걸까 — 구조 먼저 이해하기
Home Assistant는 기본적으로 로컬 IP 주소로만 접근이 된다. 예를 들어 192.168.0.100:8123 같은 주소인데, 이건 공유기가 집 안에서만 쓰라고 만들어 준 ‘사설 IP’다. 집 밖의 인터넷에서는 이 주소를 아예 볼 수 없다.
외부에서 접속하려면 세 가지 조건이 동시에 맞아야 한다.
- 포트포워딩 — 외부에서 들어온 요청을 공유기가 HA 기기 쪽으로 전달해주는 설정
- DDNS (동적 DNS) — 가정용 인터넷은 공인 IP가 수시로 바뀌기 때문에, 바뀐 IP를 자동으로 추적해주는 고정 도메인이 필요하다
- HTTPS 인증서 — 통신 내용을 암호화해서 중간에 가로채지 못하게 막는 역할
이 세 가지가 빠짐없이 맞물려야 외부에서 안전하게 HA에 붙을 수 있다. 하나라도 빠지면 접속 자체가 안 되거나, 접속은 되는데 보안이 뚫린 상태가 된다. 순서를 지켜서 하나씩 설정하는 게 핵심이다.
1단계 — DuckDNS로 고정 도메인 만들기
먼저 도메인부터 만든다. DuckDNS는 무료로 내가원하는이름.duckdns.org 형태의 도메인을 제공하는 서비스다. 유동 IP가 바뀌면 자동으로 도메인이 새 IP를 가리키도록 갱신해준다.
- duckdns.org에 접속해 GitHub, Google, Reddit 중 편한 계정으로 로그인한다.
- 원하는 서브도메인 이름을 입력하고 add domain 버튼을 누른다. 이미 누가 쓰고 있으면 다른 이름을 골라야 한다.
- 도메인이 만들어지면 화면 상단에 token 값이 보인다. 이게 나중에 HA 애드온 설정에 들어가는 인증 키다. 꼭 복사해서 메모해두자.
여기까지는 5분 안에 끝난다. 계정만 있으면 바로 도메인이 생긴다.
다음은 HA 안에서 DuckDNS 애드온을 설치하는 차례다.
- HA 대시보드 → 설정 → 애드온 → 애드온 스토어로 이동한다.
- 검색창에
DuckDNS를 입력하고 설치한다. - 설치 후 구성(Configuration) 탭에서 아래 내용을 채운다.
{
"domains": ["내서브도메인.duckdns.org"],
"token": "DuckDNS에서_복사한_토큰",
"accept_terms": true,
"certfile": "fullchain.pem",
"keyfile": "privkey.pem"
}
accept_terms: true로 설정하면 DuckDNS 애드온이 Let’s Encrypt 인증서를 자동으로 발급하고 90일마다 갱신해준다. 이 인증서가 있어야 HTTPS가 된다. 설정을 저장하고 애드온을 시작하면 잠시 후 /ssl/ 폴더에 인증서 파일이 생성된다.
애드온 로그 탭에서 Your certificate and chain have been saved 같은 메시지가 보이면 인증서 발급이 완료된 것이다. 오류 메시지가 뜨면 도메인 이름이나 토큰을 다시 확인해보자.
2단계 — 포트포워딩 설정하기
도메인이 내 공인 IP를 가리키게 됐다면, 이제 공유기가 외부에서 들어오는 요청을 HA 기기로 넘겨주도록 포트포워딩을 설정해야 한다. 포트포워딩이란 쉽게 말해 ‘외부에서 이 번호로 오는 요청은 집 안의 저 기기한테 전달해줘’라고 공유기에게 알려주는 작업이다.
공유기 관리 페이지는 보통 브라우저 주소창에 192.168.0.1 또는 192.168.1.1을 입력하면 접근할 수 있다. 제조사마다 메뉴 이름이 조금씩 다른데, NAT 설정, 가상 서버, 포트포워딩 중 하나를 찾으면 된다.
| 항목 | 설정값 | 설명 |
|---|---|---|
| 외부 포트 | 8123 | 인터넷에서 들어오는 포트 번호 |
| 내부 IP | HA 기기의 로컬 IP | 예: 192.168.0.100 |
| 내부 포트 | 8123 | HA가 실제로 수신하는 포트 |
| 프로토콜 | TCP | 웹 통신에 사용되는 프로토콜 |
여기서 한 가지 꼭 챙겨야 할 게 있다. HA가 설치된 기기의 로컬 IP가 고정되어 있어야 한다는 점이다. 공유기는 기본적으로 DHCP라는 방식으로 기기에 IP를 자동 배정하는데, 재부팅하면 IP가 바뀔 수 있다. IP가 바뀌면 포트포워딩이 엉뚱한 곳을 가리키게 된다.
해결 방법은 두 가지다. 공유기의 DHCP 설정에서 HA 기기의 MAC 주소를 기반으로 항상 같은 IP를 배정하도록 고정하거나(IP 예약), HA 기기 자체에서 고정 IP를 직접 설정하는 방법이 있다. 공유기에서 예약하는 방식이 관리하기 편하다.
3단계 — configuration.yaml에 HTTPS 설정 추가하기
DuckDNS 애드온이 인증서를 만들어줬다고 해서 HA가 자동으로 HTTPS를 쓰는 건 아니다. configuration.yaml 파일에 직접 인증서를 쓰겠다고 명시해줘야 한다.
HA 대시보드에서 파일 편집기 애드온을 설치했다면 그걸로 열면 되고, SSH 애드온을 쓰고 있다면 터미널에서 편집해도 된다. configuration.yaml 파일에 아래 내용을 추가한다.
http:
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem
저장하고 HA를 재시작하면 이제부터 https://내서브도메인.duckdns.org:8123 주소로 외부에서 접속할 수 있다. 처음 접속할 때 브라우저 주소창 왼쪽에 자물쇠 아이콘이 보이면 HTTPS가 정상적으로 적용된 것이다.
재시작 후에 로컬에서 http://192.168.0.100:8123으로 접속하면 안 되는 경우가 있다. HTTPS를 활성화하면 이제 로컬에서도 https://로 접속해야 하거나, 도메인 주소를 써야 하는 경우가 생기기 때문이다. 당황하지 말고 도메인 주소로 접속해보면 된다.
설정 후 꼭 확인해야 할 보안 체크리스트
외부 접속을 열었다는 건 인터넷 어디서든 내 HA에 접근을 시도할 수 있다는 뜻이기도 하다. 설정만 하고 보안을 챙기지 않으면 나중에 문제가 생길 수 있다. 아래 항목들은 설정 직후에 한 번씩 확인해두는 게 좋다.
- 비밀번호 강도 확인 — HA 계정 비밀번호가 짧거나 단순하다면 지금 바꾸자. 외부에서 접속 가능해진 순간부터 무작위 로그인 시도(브루트포스)가 들어올 수 있다.
- 다단계 인증(MFA) 활성화 — HA 설정 → 사용자 → 본인 계정에서 다단계 인증을 켤 수 있다. 비밀번호가 뚫려도 추가 인증이 있으면 막을 수 있다.
- 신뢰할 수 있는 프록시 설정 확인 — Nginx Proxy Manager나 Cloudflare 터널 같은 리버스 프록시를 쓰는 경우에는
trusted_proxies설정을 함께 챙겨야 한다. 이걸 빠뜨리면 HA가 접속 IP를 잘못 인식할 수 있다. - 포트 번호 변경 고려 — 기본 포트인 8123은 자동화된 스캔 도구들이 자주 시도하는 번호다. 외부 포트만 다른 번호(예: 18123)로 바꾸면 무작위 접근 시도를 줄이는 데 어느 정도 도움이 된다. 내부 포트는 그대로 8123을 유지하면 된다.
- 로그 확인 습관 — HA 설정 → 로그에서 주기적으로 로그인 실패 기록을 확인해보자. 모르는 IP에서 반복 시도가 보인다면 IP 차단이나 접근 제한을 고려할 수 있다.
- HA 업데이트 유지 — 보안 패치가 포함된 업데이트가 자주 나온다. 외부 접속을 열어놓은 상태에서 오래된 버전을 쓰는 건 위험할 수 있다.
막히는 지점별 확인 포인트
설정을 다 했는데도 외부에서 접속이 안 된다면, 아래 순서대로 하나씩 점검해보자. 대부분의 문제는 이 중 하나에서 걸린다.
- DuckDNS 도메인이 내 공인 IP를 가리키고 있는가 — duckdns.org에 로그인해서 도메인 옆에 표시된 IP와, whatismyip.com 같은 사이트에서 확인한 내 공인 IP가 일치하는지 확인한다.
- 포트포워딩이 올바른 내부 IP를 가리키는가 — HA 기기의 현재 로컬 IP가 포트포워딩에 입력한 IP와 같은지 확인한다. IP가 바뀌었다면 다시 고정해야 한다.
- 인증서 파일이 정상적으로 생성됐는가 — HA 파일 편집기에서
/ssl/폴더 안에fullchain.pem과privkey.pem이 있는지 확인한다. 없으면 DuckDNS 애드온 로그를 다시 살펴보자. - configuration.yaml 문법이 맞는가 — YAML은 들여쓰기에 민감하다. 탭 대신 스페이스를 써야 하고, 들여쓰기가 한 칸이라도 틀리면 HA가 시작을 거부한다. HA 설정 → 설정 확인 기능을 써서 오류 여부를 먼저 체크해보자.
- 인터넷 공급사(ISP)가 포트를 막고 있지 않은가 — 일부 통신사는 특정 포트를 기본으로 차단하는 경우가 있다. 8123이 막혀 있다면 다른 포트 번호로 바꿔서 시도해볼 수 있다.
나중에 고려해볼 만한 선택지 — Cloudflare 터널
포트포워딩 방식이 불편하거나, 보안이 더 걱정된다면 Cloudflare 터널(Cloudflare Tunnel)을 쓰는 방법도 있다. 포트포워딩 없이 외부 접속을 구현할 수 있고, Cloudflare가 중간에서 트래픽을 처리해주기 때문에 실제 공인 IP가 노출되지 않는다는 장점이 있다.
다만 설정이 조금 더 복잡하고, Cloudflare 계정과 도메인이 필요하다. 지금 단계에서 DuckDNS + 포트포워딩으로 잘 돌아가고 있다면 굳이 바꿀 필요는 없다. 나중에 보안을 더 강화하고 싶을 때 선택지로 알아두는 정도면 충분하다.
정리하면서
처음 외부 접속 설정을 할 때 가장 많이 막히는 부분이 ‘어디서 오류가 난 건지 모르겠다’는 상황이다. 설정 항목이 여러 군데에 흩어져 있다 보니 한 곳을 고쳐도 다른 곳이 문제인 경우가 많다. 그래서 순서대로 하나씩 확인하는 게 제일 빠른 방법이다.
DuckDNS 도메인 → 포트포워딩 → HTTPS 설정 → 보안 체크 순서를 지키면서 각 단계가 정상인지 확인하고 넘어가면, 대부분은 결국 연결된다. 외부에서 처음으로 HA에 접속되는 순간의 뿌듯함이 꽤 크다. 그 이후에 HomeKit 연동이나 자동화 설정으로 넘어가면 스마트홈이 비로소 ‘진짜 쓸 수 있는 것’이 된다.
다음 글에서는 HA와 HomeKit을 연동해서 아이폰 홈 앱과 시리로도 제어할 수 있게 만드는 과정을 정리할 예정이다. HA OS VM 설치 과정이 궁금하다면 이전 글을 먼저 보고 오는 것도 좋다.
같이 보면 좋은 글
- [HA 구축기 05] HA OS VM 설치 가이드 — 이번 글의 이전 단계, VM에 HA OS를 올리는 과정
- [HA 구축기 07] HA와 HomeKit 연동하기 — 외부 접속 설정 이후 다음 단계
- Home Assistant 디바이스 연결이 안 될 때 해결 방법 — 연결 문제 전반을 다룬 트러블슈팅 가이드
시리즈 글 모아보기
- 이전 편: 05. HA OS VM 설치 가이드
- 다음 편: 07. HA와 HomeKit 연동하기
- 전체 목차: Home Assistant 구축기 전체 목차
- 참고: Home Assistant 공식 문서