※ 직접 구매하여 작성한 후기 입니다
[IOT] - HA(Home Assistant) Synology Docker 설치기
Home Assistant를 설치한 이후
집 밖에서 외부망(휴대폰)을 이용해 서비스를 이용하려면 외부에서 접속이 가능하게 해줘야 한다.
그래서 우리는 포트포워딩으로 외부에서 우리 집 공유기를 통해 들어오는 길을 열어주는 일을 해보고자 한다.
하지만 그냥 활짝 열어두면 보안 문제가 생기니 패킷이 암호화 되어 있는 HTTPS로 접속을 설정하자.
HTTPS 접속 설정
HTTP와 HTTPS의 차이점은 암호화의 차이인데.
HTTPS SSL은 기존의 HTTP 프로토콜이 단순 평문 텍스트 전송으로 인한 보안문제가 있어서 이를 해결하고자 OSI 7 Layer 중 세션 계층에서 응용계층 프로토콜을 암호화하여 보안프로토콜화 시킨것이다.
SSL(Secure Socket Layer)의 동작과정은 아래 그림으로 잘 이해 할 수 있다.
출처 : http://wiki.gurubee.net/display/SWDEV/SSL+%28TLS%29
그럼 우리는 여기 나오는 인증서를 어떻게 발급 받을 것인지에 대해 고민에 빠질텐데.
다행히 Synology NAS에서는 무료 인증서는 Let's Encrypt 인증서를 발급 받을 수 있다.
근데 몇몇분은 왜 어렵게 이렇게 접속을 해야하냐고 물으신다고
보안 뿐 아니라. SmartThings를 Home Assistant의 Component로 연결할려면 HTTPS 연결이 필수이다.
Let's Encrypt 인증서 발급
그래서 우리는 인증서를 발급 받아보도록 하자
1. Synology NAS의 제어판에서 "보안"의 "인증서"텝을 들어간다.
2. 들어가면 기본 인증서가 있는데 "추가"를 클릭하고 "기존 인증서 교체"를 클릭한다.
3. "Let's Encrypt에서 인증서 얻기"를 선택하고 다음을 선택한다.
4. 도메인 이름에는 : DDNS를 입력
이메일을 입력한 후에 적용을 클릭한다.
5. 그러면 인증서를 얻어 오는데 30초 정도 걸린다.
인증서를 얻는 과정은 끝이 났다.
Port Forwarding 설정
이제는 포트 포워딩을 설정하자.
포트 포워딩이 생소하다면 아래 글을 들어서 한번 읽어보자
원리가 잘 설명 되어 있고 iptime 공유기로 설정하는 법도 설명해 놓았다.
https://iamakira.tistory.com/45
HTTPS - SSL 위의 HTTP (암호화 전송)은 443 포트를 쓴다.
아래는 주요 TCP 포트
https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D
asus 공유기 기준으로 설명을 드리면
6. 공유기 관리 페이지에 로그인 후에 "WAN -> 가상 서버/ 포트 포워딩"로 들어간다.
그 다음 위의 그림과 같이 입력해준다.
서비스 이름 : HA_HTTPS
포트범위 : 443
로컬IP : NAS IP를 적어준다.
로컬포트 : 443
프로토콜 : TCP
그 다음 적용이 아닌 "+"를 먼저 눌러주고 적용을 눌러줘야 한다.
위의 포트포워딩의 의미는 외부에서 HTTPS로 들어오면 내부의 HTTPS로 포트를 포워딩 해주라는 것이다.
근데.. 좀 이상하다.. 분명 HA는 8123 포트라고 했는데..
외부에서 들어오는 HTTPS 포트를 8123 포트로 바로 포워딩 하면 SmartThings 연결에 어려움이 있다는 글을 보고
Reverse Proxy를 사용하여 443포트를 8123으로 연결하기로 했다.
Reverse Proxy 설정
Reverse Proxy는 외부에서 내부 서버가 제공하는 서비스 접근 시, Proxy 서버를 먼저 거쳐서 내부 서버로 들어오는 방식이다. 외부 사용자는 실제 내부망에 있는 서버의 존재를 모른다. 모든 접속은 Reverse Proxy 서버에게 들어오며, Reverse Proxy는 요청에 맵핑되는 내부 서버의 정보를 알고 요청을 넘겨준다. 따라서 내부 서버의 정보를 외부로부터 숨길 수 있다.
7. 역방향 프록시를 사용하기 위해 NAS의 "응용 프로그램 포털 -> 역방향 프록시"로 들어간 후 생성을 눌러준다
8. 역방향 프록시 규칙을 설정해주자.
"설명"에는 "HA_HTTPS"
소스에는 "프로토콜"은 HTTPS / "호스트 이름"은 "시놀로지 나스의 DDNS" / "포트"는 "443"
아래 "HSTS 활성화"와 "HTTP/2 활성화"를 클릭해주고
대상에서 "프로토콜"은 "HTTPS" / "호스트 이름"은 "localhost" / "포트"는 "8123"을 기입한다.
9. "사용자 지정 머리글" Tab으로 이동하여 "생성"을 클릭한 후에 "websocket"을 눌러주고 "확인"을 클릭한다.
HA configuration.yaml 수정
10. Synology file로 config 폴더에 있는 confuguration.yaml을 열자
http: 아래 부분을 추가하면 되는데 나머지는 아래와 동일하게 넣고
base_url에 NAS의 DDNS 해당하는 주소를 넣어주면 된다. (아래 예시는 xxxxxx로 표시되어 있는 부분)
11. 재구동
Docker로 돌아가서 HA를 재구동 하자.
12. 자 이제 https로 접속해보자
주소는 https://DDNS로 들어가면 되는데 https://xxxxxx.synology.me로 들어가면 된다.
접속 성공!
휴대폰 어플 home-assistant에서도 동일하게 세팅하여 접속 가능하다.
결론
안전한 접속을 세팅하느라 공부한것도 많았고 시간도 걸렸지만.
가족들은 뭐가 달라졌는지 모른다. 자기만족...
'IOT' 카테고리의 다른 글
Galaxy Home Mini 사용기 (0) | 2019.10.19 |
---|---|
HA(Home Assistant) SmartThings 구성 설정 (1) | 2019.02.11 |
HA(Home Assistant) Synology Docker 설치기 (0) | 2019.02.10 |
Neato D5 로봇청소기 SmartThings에 연결하기 (0) | 2019.02.06 |
Neato D5 로봇청소기 Google Home에 연결하기 (0) | 2019.02.06 |