N100 미니PC를 구입하고, 여기에 Home assistant 및 홈서버를 돌릴 요량으로 Proxmox를 설치하였다. Proxmox 설치기는 어려운게 없어 따로 포스팅하지는 않으려고 한다. Proxmox에 Home assistant를 이사시키고, 그리고 Nginx Proxy Manager를 설치하려고 하는데, 서버에 대해 초보이기 때문에 하는게 참 쉽지가 않다. 설치부터 적용까지 뻘짓을 포함하여 기록을 겸해 포스팅하고자 한다.
1. Nginx Proxy Manager (NPM) 란?
이것의 역할을 알기위해서는 네트워크에 대해서 간단한 사전지식이 필요하다.
호스트(host) : 네트워크 구조의 가장 끝에 위치한 것으로 이는 스마트폰, 개인컴퓨터, 서버, TV, IOT 기기 등이 될 수 있다. 이러한 호스트들은 네트워크장비(공유기, 허브, 스위치 등등)와 통신매체(유선, 무선)을 통해서 서로 연결되며 서비스를 주고 받는다. 클라이언트(client)는 서비스를 요청하고 사용하는 호스트이고, 서버(server)는 클라이언트의 요청에 따라 서비스를 제공하는 호스트이다.
프록시(proxy) : 프록시란 사전적 의미로는 '대리' 하는 뜻으로, 클라이언트와 서버 사이에서 중개하는 역할을 한다. 프록시를 거쳐서 통신하기 때문에 클라이언트와 호스트간 직접적인 연결을 막는다. 정방향 프록시는 클라이언트쪽에 위치하며, 역방향 프록시는 서버쪽에 위치한다. 정방향 프록시는 클라이언트-프록시-인터넷-서버의 형태가 되고, 역방향 프록시는 클라이언트-인터넷-프록시-서버의 형태가 된다.
서브도메인(subdomain) : 다른 도메인을 포함한 도메인을 의미하고, 예를들어 www.google.com, mail.google.com, scholar.google.com 등은 모두 google.com의 서브 도메인이다.
SSL (Secure Sockets Layer) : 웹사이트와 브라우저 사이의 통신을 암호화하는 보안 프로토콜이다. NPM에서는 Let's Encrypt라는 서비스를 통해 무료 SSL 인증서를 자동으로 발급, 갱신할 수 있는 기능을 제공한다.
NPM은 서버의 프록시 기능을 쉽게 관리할 수 있게 해주는 오픈소스 도구이다. 쉽게말해 서버와 클라이언트 사이에 위치해서 중개하는 역할을 하면서, 보안과 같은 여러가지 서비스를 함께 제공하는 것이다. 서버에 접속하기전에 먼저 프록시로서 위치해 있기 때문에 NPM으로 통하는 포트만 열어놓으면 다른 서버에 접속하기 위한 포트를 열어둘 필요가 없어진다.
그냥 요약하면 NPM을 이용하면 접속 url 뒤의 포트번호를 땔 수 있고, 보안을 조금 더 강화할수 있다 정도로만 이해해도 초보자에게는 충분할 듯 싶다.
2. Proxmox에 Nginx Proxy Manager (NPM) 설치하기
Proxmox VE Helper-Scripts
A Front-end for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.
community-scripts.github.io
Proxmox VE Helper에 가면 여러가지 프로그램들을 쉽게 설치가능하게 하는 스크립트들을 제공하고 있다. 여기에서 Nginx Proxy Manager에서 설치코드를 Proxmox의 >_Shell에 입력만 해주면 자동으로 설치가 끝난다. 이후에 설치된 ip 에 81번 포트를 붙여서 들어가면 Web interface로 접속이 된다.
초기 ID / PW는 admin@example.com / changeme 이고, 접속후 변경해 주면 된다.
초기 화면은 아래와 같고, Home-assistant를 연결시켜 Proxy Hosts가 1개로 표시가 되어있다.
NPM은 포트를 80, 81, 443을 사용하는데, 외부접속을 하려면 공유기에서 해당 포트를 열어줘야 한다.
80은 http를 위한 포트이고, 443은 https를 위한 포트이며, 81은 NPM의 web GUI interface 접속을 위한 포트이다.
3. SSL 인증서 (Duckdns)
Web interface에서 SSL Certificates에서 SSL 인증서를 받을수 있다. DDNS로 DuckDNS를 사용하고 있어 이를 이용해서 받고자 한다.
Domain Names에는 DuckDNS에서 받은 도메인을 작성하는데, 그 앞에 "*."를 붙인다. 이렇게 하면 와일드카드 인증서를 받을수 있게 되는데, 와일드카드 인증서란 여러가지 서브도메인에 대하여 적용가능한 인증서라는것이다. 예를들어 example.duckdns.org 라면 Domain Names에 *.example.duckdns.org, example.duckdns.org 를 추가하면 웬만한 접속은 다 된다.
그런데 처음 이렇게 적용하고 나면 에러가 발생한다.
Error: Command failed: certbot certonly --config "/etc/letsencrypt.ini" --cert-name "npm-1" --agree-tos --email "abcd123@gmail.com" --domains "*.abcd.duckdns.org" --authenticator dns-duckdns --dns-duckdns-credentials "/etc/letsencrypt/credentials/credentials-1"
usage:
certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...
Certbot can obtain and install HTTPS/TLS/SSL certificates. By default,
it will attempt to use a webserver both for obtaining and installing the
certificate.
certbot: error: unrecognized arguments: --dns-duckdns-credentials /etc/letsencrypt/credentials/credentials-1
at ChildProcess.exithandler (node:child_process:402:12)
at ChildProcess.emit (node:events:513:28)
at maybeClose (node:internal/child_process:1100:16)
at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5)
이러한 내용의 에러가 발생하는데, 찾아보니 이게 NPM 버그라고 한다. duckdns 플러그인을 사용자 영역에 설치해야 하는데 글로벌로 설치하면 사용자 영역에서는 인식 못하는 문제라고 하는데, 해결법은 proxmox의 NPM의 콘솔에서
python3 -m pip install certbot_dns_duckdns
이 명령어를 입력하고 나면 해결이 된다.
4. Proxy Host 설정하기
Proxy Host 설정은 다음과 같이 설정하면 된다. 이것은 Domain Names의 주소로 들어온 것을 Forward Hostname/IP : Forward Port 로 연결시켜 준다는 것이다.
이렇게 설정하고 나면, 아래 처럼 연결이 된다. STATUS가 Online이면 성공한거다.
이제 접속을 위해서 기존에는 HA에 접속하기 위해서는 http://id.ddns.org:8123 으로 접속을 했다면, 이제는 https://sub.id.ddns.org 로 https를 달고, 뒤에 포트를 떼고 접속이 가능해진다. 이렇게 포트포워딩에서도 포트하나를 삭제를 할수 있고, 이제 443 포트만 열어둘수 있는 것이다.
정리해 놓으니 간단하고, 결과적으로도 설정하기 어렵진 않지만 근데 사실 여기까지 오는데, 정말 우여곡절이 많았다. 인터넷을 SK 브로드밴드를 쓰고 있는데, 통신사 모뎀이 H633G 인데, 이게 80번 포트를 막아놓기도 했고, 아무리 해도 접속이 안되서, 통신사 모뎀의 문제인가 해서 브릿지 모드로 바꿨다가 외부접속이 아얘 차단이 되어 버리고, 또 다시 NAT 모드로 돌려놓고, NPM 프로그램도 먹통이 되고, 재설치하고, 인증서도 안되고... 결국 NPM 다 지우고 위에 작업처럼 처음부터 다시 시도하니 결국에는 되었다. 결과적으로는 NPM 프로그램의 문제가 있었던것 같다. 아무튼 위에 80번 포트를 열어놔야 한다고 했지만 이제는 https 로 접속을 할것이기 때문에 443만 열어도 되기는 해졌다.
'IoT, 스마트홈' 카테고리의 다른 글
Home assistant 에서 라즈베리파이 + Proxmox CPU 온도 체크하기 (0) | 2023.10.25 |
---|---|
Home assistant + 라즈베리파이 + 키오스크 설정기 (4) - HAOS 기본설정 (0) | 2023.10.12 |
Home assistant + 라즈베리파이 + 키오스크 설정기 (3) - 라즈베리파이 키오스크 설정하기 (1) | 2023.10.09 |
Home assistant + 라즈베리파이 + 키오스크 설정기 (2) - Pimox, HAOS 설치 (0) | 2023.10.05 |
Home assistant + 라즈베리파이 + 키오스크 설정기 (1) - 라즈베리파이 터치스크린, 라즈비안 설치 (0) | 2023.10.02 |