wisePocket

[NAS 배포★] NAS-Docker의 Domain, Port Forwarding, DDNS 구성 08 본문

Synology NAS Server Tutorials

[NAS 배포★] NAS-Docker의 Domain, Port Forwarding, DDNS 구성 08

ohnyong 2023. 7. 22. 02:19

5000포트 접속에 DSM 접근 페이지가 나타난다.네트워크 서비스나 정보를 찾기 위해서 사용하는 네트워크 프로토콜저녁에 드디어 내가 가진 서버 NAS에서 Docker를 사용하여 내가 만든 웹 프로젝트를 성공적으로 192.168.0.1:81로 NAS에서 접속 할 수 있었다. 이제 외부 접속(DDNS)을 세팅하여 실제로 우리가 간단히 도메인 주소만 입력하여 어떤 홈페이지를 접속하는 것과 동일하게 세팅해주고자 한다. 이는 우선적으로 최소한 Port의 개념과 내 홈 네트워크가 어떻게 구성되어 있는지와 HTTP로 어떤 페이지들을 보여주어야 할 지 목적을 인지하고 있어야 한다.

브라우저를 통해 URL에 접근한다라는 것은 기본적으로 HTTP 포트로 접근 한다는 것이다.

포트에 대한 기본 이론은 위키백과를 참조해서 공부했다.

포트란, W3 상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데(요청과 응답)에 쓰인다.

그럼 프로토콜은 무엇인가? 통신 프로토콜 또는 통신 규약 컴퓨터 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다. 통신 프로토콜은 신호 체계, 인증, 그리고 오류 감지 및 수정 기능을 포함할 수 있다.

 

간단히 한문장으로 HTTP 이런 익숙한 단어들은 웹에서 사용되는 규칙이며, 그걸 관용적인 번호로 나타낸 것이 포트 번호이다. 왜냐하면 웹은 아주 많은 이용자, 개발자 등이 이용하므로 무언가 언어, 규칙 처럼 정해둔 것이다. 이미 역사적으로 오랜 기간 정해서 사용했기 때문에 브라우저에서 URL을 입력하면 자동적으로 80번을 찾아가게 브라우저는 프로그래밍 된 것이다. 사실 강제로 바꿀순 있지만 마치 언어와 같이 이미 모두가 사용하면서 널리 퍼졌기 때문에 본인만의 번호? 이런 홍대병은 의미가 없다. 언어 체계처럼 a는 에이라고 읽자.

 

포트 번호는 크게 세 종류로 구분된다.

  • 0번 ~ 1023번: 잘 알려진 포트 (well-known port)
  • 1024번 ~ 49151번: 등록된 포트 (registered port)
  • 49152번 ~ 65535번: 동적 포트 (dynamic port)

잘 알려진 포트 번호의 대표적 예는 다음과 같다.

포트 (컴퓨터 네트워킹) - 위키백과, 우리 모두의 백과사전 (wikipedia.org)


1. 나의 네트워크 구성 알기

가장 먼저 확인해야 할 것은 내 작업 환경에 대한 이해이다.

컴퓨터가 총 3대로 구성된다.

  • Macbook-Pro(MacOS-메인)
  • PC(Windows-서브)
  • NAS(Linux-서버)
  • 주변기기는 모바일 1개, 태블릿 2개

인터넷 연결 상황은 다음과 같다.

  • Telecom ISP(KT) *외부 IP 제공
    •  ipTime(Router) *외부 IP 직결 *내부 192.168.0.1(공통)
      • LAN
        • Macbook-Pro - Ethernet *내부 192.168.0.9
        • PC - Ethernet *내부 192.168.0.8
        • NAS - Ethernet *내부 192.168.0.10
      • WiFi
        • 주변 기기

모든 PC는 router(공유기 허브)를 통해 인터넷이 연결되고 있으며 네트워크로 각 컴퓨터에서 다른 컴퓨터로 접근 할 수 있다.(LAN)

라우터의 내부 네트워크 설정에서 DHCP(동적호스트구성프로토콜) 서버 설정에서 위 LAN내 환경 PC들은 IP를 고정시켰다.

3. Domain 받기

우선 Synology NAS를 구매하면 Synology 회원 서비스로 도메인을 획득 할 수 있다. user.synology.me와 같은 형식이다. cafe24를 통해서 구매한 도메인이 있지만, 현재는 우선 NAS만 잡고 있을 시간이 없고 중요한것은 외부 접속 테스트가 우선이기 때문에 우선 Synology 도메인을 사용해보고자 한다.

또한 외부에서 NAS 관리 등을 위해 접속 할 수 있는 QuickConnect라는 서비스가 제공된다. 당연히 내부적인 id, pass를 입력해야만 접근 할 수 있다.

 

3. DDNS 설정

DDNS란? Dynamic DNS 또는 DynDNS는 실시간으로 DNS를 갱신하는 방식이다. 주로 도메인의 IP가 유동적인 경우 사용된다.

DNS란? 도메인 네임 시스템(Domain Name System, DNS)은 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다. 특정 컴퓨터의 IP 주소를 찾기 위해, 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호(IP 주소)로 변환해 준다. 

 

따라서 아래 내용은 외부 IP 주소(통신사->라우터로 연결된 실제 IP)를 나의 도메인 주소인 ohnyong.synology.me로 변환 해준 것이다.

이 상태에서 ohnyong.synology.me로 접속해본다.

앗 라우터 설정 화면이 나타난다. 이 상황을 해석해보면 현재 저 ohnyong.synology.me 주소는 외부 IP 주소이며 브라우저를 통해 접속했으니 기본 Port 규칙에 따라 HTTP형태인 80번 포트를 찾아가게 된다. 따라서 결과는 HTTP://123.123.123.123:80 로 요청을 하고, 그 요청을 응답 해줄 수 있는 컴퓨터인  ipTime(Router) 가 내장된 시스템에 의해 관리자 View 페이지를 반환 시켜준 것이다. 공유기도 안에 컴퓨터 시스템이 갖춰져 있다. 그럼 실제로 HTTP://123.123.123.123으로 접근해보자. (외부 IP는 123으로 가렸다.)

이와 같이 동일한 결과를 얻을 수 있다. 일단 여기까지해서 얻은 것은 ohnyong.synology.me 도메인 주소가 외부 IP 주소를 대신하고 있다는 것이 중요하다. 또한 내부 IP가 아니라 외부 IP이기 때문에 LAN 환경이 아닌 외부에서 접속 가능하다. = 이 말은 곧 다른 사람도 접속 가능 하다 = 또한 웹에 있다라고 보면 된다.

 

4. 내부 IP 분배와 Port Forwading 설정

현재 해당 주소는 외부 IP(실제 IP)이다. 다른 사람도 접속 가능하다는 점은 내가 원하던 웹에 배포하는 목표에 가까워 졌지만 보안상의 문제가 있다. 누구든지 저 주소를 통해서 내 공유기 라우터를 접근 할 수도 있으며, 진짜 원하면 해킹을 하고 마음대로 설정을 건들이거나, 트래픽 과부화 테러를 할 수도 있다.

 

그래서 외부 IP를 감추고 내부 IP로 우회하도록 설정 해주기 위해서 Port를 유기적으로 연결하는 작업을 진행한다.

 

  • NAS - Ethernet *내부 192.168.0.10를 사용하고 있다. Synology 공식 문서에 따르면 NAS는 5000, 5001 포트로 View 페이지를 반환한다. 이 중 5000은 DSM 서버 관리자 페이지, 5001은 Web Station이 가지고 있다.
더보기

Synology - Port Forwarding

  • 내부 192.168.0.10 IP에 대하여, 외부 포트를 5000을 내부 포트 5000으로 포워딩 한다.
  • 내부 192.168.0.10 IP에 대하여, 외부 포트를 5001을 내부 포트 5001으로 포워딩 한다.

  • 5000포트 접속에 DSM 접근 페이지가 나타난다.

  • 5001포트 접속에 nginx 관련 페이지가 나타난다. 웹 스테이션이라는 내장 프로그램(nginx를 기본으로 사용함)을 사용하지 않을 것이기 때문에 페이지가 나타나지 않는다.


하지만 여전히 도메인과 연결된 ohnyong.synology.me:80은 외부인이 접근하면 안되는 Router로 연결되어 있다.

  • DSM의 경우 나도 외부에서 서버 데이터를 관리하거나 추가, 수정 해야 되는 경우도 있기 때문에 접근 루트가 있어야 한다. 로컬 LAN 환경에서만 작업하지 않기 때문이다. 그리고 QuickConnect 같은 서비스도 동일한 이유이다. 마치 Google Drive를 모바일로도 언제 어디서든 사용 할 수 있는 웹 하드 기능을 사용하는 목적과 같다 볼 수 있다.
  • 하지만 가장 먼저 도메인과 연결되었으며, 외부 IP를 직접적으로 받고 있는 Router의 관리자 페이지가 나오지 않도록 처리해야 한다.

  • 내부 192.168.0.10 IP에 대하여, 외부 포트를 80내부 포트 5000으로 포워딩 한다.
  • 이 말은 외부 접속으로 라우터 관리자 페이지가 보여지던 80번 포트를 DSM이 나타나는 5000번 포트로 변경 하겠다는 것이다.

  • 변경 사항을 적용하면 즉시 관리자 페이지에 이상이 생긴다.
  • 지금 브라우저로 관리자 페이지를 보던 80번 포트에서 갑자기 5000번 포트로 연결되어 DSM을 호출하고자 하는데 Router의 관리자 페이지는 DSM 페이지 코드를 인식하지 못하기 때문이다.

  • 이제 그럼 ohnyong.synology.me:80 으로 접속해본다.
  • 원하는대로 Router가 아니라 5000번 포트였던 DSM 메인 화면이 호출된다.


이제 포트 포워딩의 진행 방식을 이해했다. 다시 한번 정리를 해야 한다.

다시 본론으로 돌아와서 목표를 정한다.

  • Router 관리자 페이지는 외부 접속이 노출되면 안된다.
  • DSM은 외부 접속 할 수 있어야 한다.
  • 내 프로젝트 ohnyong.synology.me라는 도메인 메인 홈페이지로 나타나야 한다.

 

이전 글을 통해 나의 프로젝트는 Docker를 통해서 내부 IP :81번 포트에서 실행되도록 설정했고 실제로 작동하는 것을 확인 했다.

이제 포트 포워딩을 아래와 같이 설정한다.

  • Router 관리자 페이지*내부 192.168.0.1(공통) 또는 나만 알고있는 외부 IP로 직접 접근
    • (80포트를 내 프로젝트가 나타나는 81포트로 변경하여 사실상 할당에서 제외 시킨 것)

  • DSMohnyong.synology.me:5000 외부 접속 허용(추후 도메인 네임서버 구축을 통해서 서브 도메인을 구성할 것이다.)
    • (5000포트는 그대로 5000포트를 입력하도록 그대로 설정)

 

 

  • 내 프로젝트 ohnyong.synology.me라는 도메인 메인 홈페이지에 나타남
    • (관리자 페이지였던 80번 포트를 81번로 연결하여 Docker에서 실행중인 내 프로젝트가 80번(==포트입력 없는 기본 도메인 형태))

 

 

1차적으로 개인 소장 NAS를 활용하여 나의 프로젝트를 직접 호스팅하는 실습은 마무리 되었다.

NAS에 종속된 웹 스테이션과 같은 패키지를 활용하는 것도 좋지만 생각보다 정해진 폴더 구조나 규칙이 웹 프로젝트 Framework의 구조와 달라 뭔가 이것 저것 옮기고 각종 라이브러리에 대한 지원이 되는지 확신이 되지 않았다. 이것 또한 사용해봐야 그 내부 사정을 알겠지만 wordpress와 같이 템플릿형 프로젝트에 특화 된 것처럼 보여 확장성이 부족해 보였다. 아무튼 Docker를 통해 어떤 프로젝트던 개인 무료 무제한 웹 호스팅을 스스로 구현 할 수 있다는 점에서 아주 만족스럽다. 또한 OS, 서버, 웹 전반 상식에 대해 지식이 늘었다. 개인 프로젝트를 웹 호스팅 없이 배포하는 과정을 끝 마쳤다. 아마존 EB는 서비스를 잠시 꺼둬야 겠다.

 

서브 도메인을 구성하기 위해서 도메인의 네임 서버를 NAS에 구축하고 서브 도메인을 분기하고 각자 포워딩, SSL 인증서, HTTPS는 어떻게 되는 것인지, 접근 보안 등 관리는 어떻게 하는지 등 추가 작업은 조만간 진행 할 예정이다.

 

 

NAS-Docker 배포

http://ohnyong.synology.me 

 

NEW JEANS 팬명록

NEW JEANS의 Spotify 순위정보! 응원 댓글을 등록 할 수 있는 페이지 입니다.

ohnyong.synology.me

AWS EB 배포

http://myweb.eba-6icts6dp.ap-northeast-2.elasticbeanstalk.com/

 

NEW JEANS 팬명록

NEW JEANS의 Spotify 순위정보! 응원 댓글을 등록 할 수 있는 페이지 입니다.

myweb.eba-6icts6dp.ap-northeast-2.elasticbeanstalk.com