본문 바로가기

취미, 관심/NAS, Server

[Synology] 시놀로지에서 Nginx Proxy Manager 사용하기, IP 제대로 받아오기

시놀로지의 기본 역방향 프록시는 뭔가 좀 불편합니다. 사실 이거때문에 아수스토어에서 넘어온것도 있는데.. 아무튼 불편해요.

그래서 Nginx Proxy Manager를 많이 사용합니다. 시놀로지의 경우 DSM에서 80, 443을 잡고 있어요. 그렇기 때문에 시놀로지에서 쉽게 사용하기 위해 기본 포트를 수정하는 스크립트를 사용합니다.

공유기 쓰시면 그럴 필요 없어요. 포트포워딩 설정을 바꾸면 되니까요.

들어오는 포트(외부 포트)는 80, 443을 주고, 내부 포트를 원하는 포트로 잡아주면 됩니다.

포트 변경

포트포워딩 설정이 보통 아래와 같이 되어있을겁니다.

기본적인 설정, 80, 443을 매칭합니다.

임의의 포트로 변경해봅니다.

임의의 포트로 변경

Nginx Proxy Manager 설치

시놀로지 docker를 이용해 nginx proxy manager를 올립니다.

레지스트리에서 jlesage/nginx-proxy-manager를 더블클릭합니다.(DB가 포함되어 있어 신경쓸게 적습니다.)

태그 선택은 latest(마지막)버전

이미지 다운로드가 끝나면 이미지를 더블클릭해 컨테이너를 만듭니다.

nginx proxy manager의 특성상 docker 호스트와 동일한 네트워크 사용을 체크하는게 좋지만, 시놀로지의 경우 그렇게 하면 포트가 충돌합니다. 브릿지로 선택해주세요. 제경우엔 docker-compose로 여러 작업을 했다보니 네트워크가 여러개 생겼네요.

도커로 여러 서비스를 올릴거라면 어렵게 느껴지더라도 docker-compose 를 사용하는것이 더 편합니다. 일단 서비스를 명령어 한번에 올릴 수 있고, 같은 docker-compose로 올린 컨테이너들은 서로 연결(link)되어있어 service 이름만으로 서로 연결이 가능하거든요. 즉, nginx proxy manager를 통해 웹 서비스를 한다면, nginx 컨테이너를 같이 올리고, 설정할 때 nginx:80 이런식으로 연결해주는게 가능합니다. 편해요.

이름은 아무거나 넣어주시고, 자동 재시작 눌러주시고, 다음 버튼을 누릅니다.

8080 : http
4443 : https
8181 : nginx proxy manager 관리 페이지

저 위 포트포워딩 설정에서 설정한 대로 넣어줍니다. 포트포워딩을 나중에 해도 문제없어요.

설정의 저장을 위해 볼륨 설정에서 폴더 추가로 들어갑니다.

적당한 위치에 폴더를 만들구요.

/config 라고 넣어주고 다음을 눌러줍니다.

Nginx Proxy Manager 설정

웹브라우저에 NAS의 IP:관리포트 를 넣어줍니다. 위 설정대로라면 NASIP:8181 입니다.

이렇게 보이면 정상입니다.

기본 ID와 PW는 아래와 같습니다.
ID : admin@example.com
PW : changeme

로그인이 완료되면 관리자 계정을 변경해야 합니다. 변경해주세요.

Hosts > Proxy Hosts 에서 설정을 합니다.

Add Proxy Host 버튼을 눌러서 원하는 곳으로 보내주면 됩니다. DSM 페이지와 연결을 하려면..

기본 설정이라는 가정 하에, 도메인을 넣어주고, DSM의 IP를 넣어주고, 포트를 넣어주면 됩니다. 웹소켓 체크 해 주세요.

NAS의 IP가 192.168.0.100이라면, 그렇게 넣으면 됩니다.

SSL 인증서 발급

Nginx Proxy Manager를 사용하는 이유 중 하나입니다. SSL 인증서를 발급받고 적용하기가 쉽다는거죠.
도메인이 없다면 아래 글을 참고해서 내 도메인을 하나 만들어봅니다.
무료 도메인 Freenom DDNS 설정과 와일드카드 인증서 발급

여기서 luadns API 발급까지만 보시면 되요.

SSL Certificates > Add SSL Certificate 클릭해서 인증서 발급 페이지로 갑니다.

Domain Names : 사용할 도메인, 와일드카드를 원한다면 domain.com, *.domain.com 으로 입력
Use a DNS Challenge 체크
DNS Provider 에서 사용하는 DNS업체를 찾아줍니다. 저는 LuaDNS로 해볼게요. 개인적으로 LuaDNS, 클라우드플레어 등을 추천합니다.
무료 DDNS서비스를 제공하는 DuckDNS도 사용 가능합니다.
Credentials File Content 안에 email에 luadns에서 설정한 메일, 그 아래 token에 발급받은 api 토큰을 넣어줍니다.
A Agree 체크해주시고 Save 버튼을 누릅니다.

진행중

환경에 따라 진행이 좀 오래 걸릴 수 있습니다. Timeout 에러가 뜰 수도 있습니다.

timeout......

하지만 막상 보면 제대로 받아왔습니다. 아마 페이지 갱신하는 부분에서 문제가 있는 것 같은데, 관리자 페이지도 역방향 프록시로 주소 지정해주고 하면 제대로 되는것으로 보여요.
(물론 제 환경만 그럴지도 모릅니다.)

SSL 인증서 적용

다시 Hosts에서 새 proxy host를 만들어 봅니다. 기존거 edit 하셔도 되요.
대충 위처럼 설정되었다면 SSL 탭을 클릭해봅니다.

발급받은 인증서가 보입니다. 필요한 경우 Request a new SSL Certificate 를 눌러서 새 인증서 발급을 받아도 되며, 방법은 위에서 설명한 방법과 동일합니다. DNS 챌린지를 이용하지 않으면 webroot방식 인증을 사용할것으로 보이네요.
아무튼 우린 받은 인증서 클릭

Force SSL - HTTP 접속시 HTTPS로 보내주는 것 같습니다.
HTTP/2 Support - http/2 지원
HSTS Enabled - HSTS 적용 : 이것도 한번 https 로 접속한 클라이언트가 이후로 계속 https로만 접속하도록 하는 방법입니다.
모두 체크하고 진행합니다. 테스트 목적인 경우 체크 안해도 됩니다.

설정 끝! 이제 편리하게 사용하시면 됩니다!

추가. Proxy Server IP만 로그에 남는 문제 해결

이렇게 하면 nginx proxy manager를 통해 dsm에 접속하게 됩니다. 그리고 한가지 문제가 생깁니다.

어디서 붙여도 proxy 서버의 IP가 뜹니다. 이건 별도의 서버로 구동하는 부분의 캡처라서 그래요.
IP를 찾기 번거롭다면, 이 설정 후 로그인 시 IP를 포함한 로그가 남습니다. 그게 프록시 서버의 IP입니다.
단, 위 설정을 그대로 따라했다면 프록시 서버(nginx proxy manager) 역시 어떠한 일로 인해 컨테이너를 재구동 하게 되는 경우 IP가 변경되므로, docker가 사용하는 172.0.0.0/8 대역에 대해 신뢰처리를 해줍니다.

보안 > 신뢰할 수 있는 프록시 > 추가 > 172.0.0.0/8
172.0.0.1 ~ 172.255.255.255 까지 신뢰한다는 뜻입니다.

위 설정을 한 후에는 IP를 제대로 받아오게 됩니다. 단, NAT Loopback을 이용해 접근하게 되면 공유기의 IP(게이트웨이)가 뜨게 됩니다.