웹 서버 공부

홈 서버 만들기 4 - 도메인 발급, DDNS 설정, 외부 접속 설정(No-IP, 공유기 설정)

dhsama51 2025. 1. 3. 01:57

지난 포스트에서 제목에 적힌 3가지를 지원하는 곳에 No-IP, DuckDNS가 있다고 했는데, 각각이 어떤 특징을 갖는지 확인해보자.

No-IP: + 사용자 정의 도메인 지원, 고급 DNS 관리 옵션 미지원 등

            -  무료 플랜은 30일마다 갱신 필요, 기능 제한

DuckDNS: + 무료 전용, 설정 간단

                  -  사용자 정의 도메인 미지원, 고급 DNS 관리 옵션 미지원

고생할 때 하더라도 No-IP 쓰는 것이 더 좋을 거 같아서 No-IP로 선택했다. 그리고 맨 뒤에 duckdns.org 쓰면 아쉬워서..


1. https://www.noip.com 접속

 

Free Dynamic DNS - Managed DNS - Managed Email - Domain Registration - No-IP

What is the Difference Between IPv4 and IPv6? Ready to elevate your tech knowledge? Dive into our latest blog post on IP addresses, focusing on the transition from IPv4 to IPv6. Stay informed, stay ahead! Learn more

www.noip.com

 

2. 회원 가입

구글 계정 연동으로 가입했더니 뭔가 잘 안 돼서 그냥 직접 만들었다. 이메일에서 메일을 확인해서 가입을 완료할 수 있다.

중간에 요금제를 선택할 수 있는데, 무료는 30일마다 hostname을 확인해줘야 한다. 이건 상관없는데, 사용자 정의 도메인을 쓸 수가 없고 있는 거 중에 골라야 하는 게 아쉬웠다. 그렇다고 구매하기에는 34.99$(5만원;;)이나 돼서 포기하고 무료 쓰기로 했다.

hostname을 정하고 Create with DDNS Key를 선택했더니 아래 화면이 떴다.

자동으로 몇가지가 설정되는데 바꿀 수는 없다. 이를 U+ 공유기 관리자 페이지에서 DDNS 설정 페이지에 적어주면 된다.

 

이제 해줘야 하는 다른 설정으로는,
1. U+ 공유기 관리자 페이지에 DDNS 설정을 적는다. 위에서 발급받은 username과 PW를 적으면 된다.

   noip.com에서 발급 안 받았으면 다른 데에서 했다가 의미없는 일 되고 다시 여기로 돌아올 뻔...

 

2. U+ 공유기 관리자 페이지에서 포트 포워딩 설정을 해준다.

 

3. 우분투에서 사용할 포트를 개방한다.

   지난번에 했던 ufw 설정을 조금 다듬어서 내가 원하는 포트에서 서비스할 수 있도록 바꿨다. 물론 이에 따라 nginx 설정도 바꿔주었다.

ufw allow [포트 번호]	#포트를 개방하는 명령. 이를 이용해 아래처럼 만든다.

#ufw(방화벽) 설정 후의 상태
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere                  
1008                       ALLOW       Anywhere                  
1027                       ALLOW       Anywhere                  
22 (v6)                    ALLOW       Anywhere (v6)             
1008 (v6)                  ALLOW       Anywhere (v6)             
1027 (v6)                  ALLOW       Anywhere (v6)

#nginx 포트 변경 설정
#nano /etc/nginx/sites-available/default 명령으로 파일 수정
server { #이 아래 줄의 포트변호를 이와 같이 변경하면 됨
        listen 1008 default_server;
        listen [::]:1008 default_server;

 


 

그런데 다 했는데도 잘 안 돼서 조금 더 찾아봤다. 처음에는 ISP(U+) 문제인 줄 알았지만 결론적으로는 NAT Loopback이 문제였다.

1. 127.0.0.1:8080으로 접속이 된다. 이는 웹 서버가 열려있어서 서비스가 동작 중임을 의미한다.

   curl http://127.0.0.1:8080를 실행했을 때 화면에 HTML이 표시됨을 통해 알 수 있다.

 

2. 192.168.219.109:8080으로 접속의 접속 여부는 방화벽이 결정하는데, 이는 잘 동작 중이다.

   방화벽이 개입함과 방화벽이 잘 동작함은 아래 그림으로 설명이 가능하다

   (참고로 밖에서 테스트했기에 내부 IP가 살짝 다르지만 큰 문제는 안 된다. 어차피 로컬 네트워크이기에..)

방화벽에서 사용할 포트를 허용했을 때는 같은 로컬 네트워크에 있는 호스트에서든 웹 서버에서든 페이지가 잘 열린다.
방화벽에서 사용할 포트를 차단했을 때는 같은 로컬 네트워크에 있는 호스트에서 페이지가 열리지 않는다. 다만 웹 서버에서든 여전히 열린다.

 

3. DDNS는 정상적으로 작동해서, http://dhserver.ddns.net을 적으면 공유기 페이지로 넘어가진다. 이를 통해 80번 포트는 공유기로 포트 포워딩되고 있음을 짐작할 수 있다. 그래서 8080번으로 설정하려고 한 것도 있다. 이는 No-IP의 설정과 공유기의 DDNS 설정도 잘 동작하고 있음을 알 수 있다.

 

4. 그런데 http://[외부 IP]:8080과 http://dhserver.ddns.net:8080을 적으면 접속이 되지 않는다. 좀 더 디테일하게 nmap을 통해 포트가 열려있는지 확인해보겠다.

   위의 curl이 웹 페이지 접속을 확인한다면, nmap은 해당 포트가 open인지 closed인지 filtered인지 확인할 수 있다. closed와 filtered의 차이점이라면 서비스하지 않을 때가 closed이고 방화벽에 막혔을 때가 filtered이다.

   nmap 8080 192.168.219.109를 실행하면 open이라고 뜨지만, nmap 8080 [외부 IP]로 실행하면 filtered라고 뜬다.

 


 

여기까지만 보면 정말 U+의 문제인 듯 하지만, 하나 시도해보지 않은 것이 있었다. 외부 네트워크에서 테스트해보지 않았던 것. 모바일 데이터로 인터넷에 연결된 폰으로 접속해보니까 되었다! 이유를 알아보자면...

 

NAT Loopback이라는 개념이 있다. NAT Loopback은 내부 네트워크에서 외부 IP로 접속할 때, 라우터(여기서는 공유기)가 이를 내부 네트워크의 서버로 다시 전달할 수 있도록 처리하는 네트워크 기능이다. 이를 지원하지 않는 공유기의 경우 로컬 네트워크에서 외부 IP를 적으면 접속이 되지 않는다. 따라서 외부 네트워크에서 정상 작동하는 줄 모르고 계속 삽질하고 있었던 것이다... (사실 U+ 공유기가 NAT Loopback을 지원하면 되는 거 아니었을까..)

 

이렇게 도메인 발급, DDNS 설정, 외부 접속 설정을 마무리했다!