1. 도커 컨테이너 생성
앞선 글에서 시놀로지 NAS에 Container manager를 이용하여 다양한 도커 컨테이너들을 설치하는 방법과, 그리고 도 커 관리용 도구인 Portainer를 시놀로지 NAS에 설치하는 방법을 소개한 바 있다. 또한 이들 컨테이너들이 내부망에서 생성된 포트를 이용하여 잘 접속되는 것을 확인한 바 있다. (다음 링크 참조)
https://blog.naver.com/mythee1/223135121608
참고로, 이렇게 시놀로지의 Container manager를 이용하여 도 커 컨테이너를 생성하는 경우, 별도로 로컬 포트를 지정하지 않으면, 다음과 같이 시놀로지 나스에서 임의로 포트를 지정해 주며, 설치 순서에 따라 부여해 준다. 아래의 예에서는 32768에서 32777까지의 포트가 컨테이너 내부의 포트들과 바인딩 되어 있는 상태이며, Container manager를 이용하지 않고 별도로 설치한 Portainer의 경우에만 8000번과 9000번 포트가 할당되어 있는 상태이다.
2. 외부망에서 도 커 컨테이너 접속 원리
그런데, 이렇게 시놀로지 나스에 생성한 도 커 컨테이너들은 해당 시놀로지 나스와 동일한 네트워크에 연결된 내부망에서는 잘 접속되지만, 다른 네트워크인 외부망에서까지 접속하려면 약간의 추가 작업이 필요하다.
바로 포트포워딩이다.
즉, 외부에서는 내부망에 있는 나스에 곧바로 접속할 수 없고, 공인 IP로만 접근이 가능하기에, 실제 도 커 컨테이너까지 접근하려면 다음과 같은 세부 단 게를 거쳐야 한다.
공인 IP로 공유기까지 접근 —————> 내부 IP로 나스에 접근 ————> 도 커 컨테이너로 접근
(포트포워딩) (포트 바인딩)
포트 추가 연결 작업 필요 컨테이너 생성 시 기지정
이 과정에서 컨테이너 내부에 사전에 지정된 포트와, 나스의 물리적 포트(위에서 32768~32777 등)는 컨테이너 생성 시 시놀로지의 Container manager가 임의로 미리 포트를 연결해 놓은 상태(포트 바인딩)로 그 포트를 그대로 이용한다면 별도의 작업은 필요하지 않다.
그렇지만 외부망에서 공인 IP로 들어오는 포트 신호와, 나스의 물리적 포트는 아직은 연결이 되어 있지 않은 상태라, 이를 연결해 주는 작업이 필요하다. 이를 포트포워딩이라 한다.
3. 외부망에서 도 커 접속을 위한 포트포워딩 실제 예
Step 1. 공인 IP 주소 확인
포트 포워딩을 위해서는 먼저 자신이 사용하는 공인 IP를 알아야 한다. 공인 IP는 쉽게 말하자면 인터넷 통신사에서 설치한 인터넷 선의 IP 주소라고 할 수 있다. (참고 – 공인 IP를 공유기 IP라고 부르는 사람도 있고, LAN 포트 IP라고 부르는 사람도 있다.)
공인 IP 주소를 확인하는 방법은 여러 가지가 있으나, 시놀로지 나스 내부에서는 다음과 같이 제어판의 외부 액세스 메뉴에 있는 DDNS 메뉴에서 확인할 수 있다. 참고로 인터넷 브라우저에서 구글 등을 통해 My IP 확인이라는 검색어를 통해 확인할 수도 있다.
나의 경우에는 121.xxx.xxx.220으로 확인되었다. (xxx는 숫자이다.)
Step 2. NAS의 로컬 내부 IP 주소 확인
외부망에서 들어온 신호를 내부망의 NAS로 연결하기 위해서는 나스가 사용 중인 내부 IP 주소를 정확히 알아야 한다. 시놀로지 NAS의 경우라면, 다음 화면과 같이 DSM 화면에서 확인할 수 있다.
Step 3. 연결할 포트 번호 확인
외부망에서 들어온 신호를 내부망으로 연결할 때 사용할 포트 번호를 확인한다.
다음과 같이 컨테이너 목록에서 확인하면 된다. 혹시 외부에서는 다른 포트 번호를 사용한다면 어떤 번호를 사용할지도 정해두어야 한다.
(주의 : 컨테이너 생성후, update가 이루어지거나, 컨테이너가 재가동되는 경우 container에 할당된 시놀로지 나스의 포트 번호가 변경되기도 한다. 이를 방지하려면, 각 container의 세부 설정에서 컨테이너별로 할당된 시놀로지 나스의 포트번호를 특정번호로 고정해주어야 한다. – 참고 https://blog.naver.com/mythee1/223135121608 )
Step 4. 인터넷 공유기에서 포트포워딩 설정
각자의 인터넷 공유기 설정을 열고, 고급 설정 메뉴 등에 있는 포트포워딩 메뉴를 선택한다.
(공유기 회사마다 포트포워딩 메뉴의 세부 위치는 다를 수도 있으나, 대개의 경우 고급 설정 메뉴 쪽에 있다.)
나의 경우는 Linksys 공유기를 사용 중이라 다음과 같은 화면이 되며, 30000번에서 40000번 사이의 포트를 그대로 내부망에 있는 시놀로지 NAS가 사용 중인 192.168.1.94로 연결하기로 결정해서 다음과 같이 설정했다. 포트는 한 개씩 지정할 수도 있고, 범위 값으로 지정해 줄 수도 있다. 중요한 것은 프로토콜 부분으로 UDP와 TCP를 모두 선택해 준다.
내가 사용하는 제품의 경우 외부망 주소를 별도로 기재하지 않아도 되나, 간혹 외부망 주소까지 기재해야 하는 경우도 있는데, 그 경우에는 위에서 확인한 공인 IP 주소를 해당란에 적어주면 된다.
설정이 끝나면 위의 저장을 눌러주면 된다.
이렇게 필요한 포트들을 원하는 대로 포워딩 해주면 되는데, 위의 범위 값에 해당되지 않았던 portainer 용 포트인 8000번과 9000번은 다음과 같이 하나씩 두 번으로 나누어 설정해 주었다. (8000-9000으로 지정하려 했으나, ㅣ존에 중간값 포트를 사용 중이라 충돌했기 때문)
이것으로 필요한 포트포워딩 설정 작업이 완료되었다. 포트포워딩 효과는 공유기에서 설정 후 저장을 마치면 즉시 효과가 발효된다.
4. 포트포워딩 후 외부망에서 Docker 컨테이너 접속 사례
외부망에서 공인 IP 주소 121.xxx.xxx.220을 이용해 시놀로지 나스에 설정한 docker 컨테이너에 접속해 보았다.
먼저 32772 포트가 할당된 transmission을 접속해 보았다. 이제는 다음과 같이 외부망에서도 잘 접속이 된다.
시놀로지 Container manager가 32777 표트르를 할당한 Nginx 역시 해당 포트 번호를 이용하여 외부망에서 접속한 결과 다음과 같이 잘 접속되었다.
32776 포트가 할당된 wordpress 및
32775 포트가 할당된 jellyfin도
32774 포트가 할당되었던 nextcloud도 모두 외부망에서 잘 접속이 이루어진다.
한편 별도로 포트포워딩을 지정했던 portainer 역시 아무런 문제 없이 외부망에서 접속이 이루어진다.
5. 참고 – 방화벽 설정
참고로 현재 시놀로지 나스의 방화벽은 다음과 같이 설정해 두었다.
아래 방화벽에서 Docker portainer는 방화벽 내용을 살펴보던 중 별도 프로그램 항목으로 있는 게 발견이 되어서 설정하기는 했으나, 개인적인 느낌은, 추가로 포트포워딩 설정한 포트 30000~40000번의 경우 기존에 설치해둔 방화벽 규정과 충돌하지 않아 별도로 지정하지 않았지만 크게 문제 되지 않는듯한 느낌이었다.
6. 기타 Tips
1. 포트포워딩 설정시, 원하면 외부망에서의 접속 포트를 다르게 하는 것도 가능하다.
즉, 현재 Nignix용 나스 내부 포트는 32777로 container manager가 할당해버렸지만, 개인이 외부에서 다른 쉬운 번호 (예: 3500) 으로 접속하는 것도 (기존에 사용중인 번호가 아니라면) 가능하다.
2. IP주소 대신 도메인 명으로 접속하는 것도 가능하다.
도메인 이름을 구입(또는 DDNS 이용시) 하는 경우, 해당 도메인 명에 공인 IP주소를 할당 하면, 외부망에서 공인 IP주소대신 도메인 이름이나 DDNS를 이용하여 특정도커 컨테이너 서비스에 접속할수 있다.
3. 컨테이너 생성후, update가 이루어지는 경우, container manager가 할당하는 내부 포트 번호가 변경됨을 기억해야 한다. 이 경우 range가 아닌 특정 번호로 포트포워딩을 하는 경우라면, 내부포트 번호가 변경될때 포트포워딩 상태도 따라서 변경해야 한다.

