본문 바로가기
IT

[리눅스 기초 #46] 방구석 서버를 세상 밖으로: 포트 포워딩과 DDNS 완벽 가이드

by sunyjiny 2026. 2. 13.
반응형

리눅스 기초 시리즈의 46번째 시간입니다! 지난 시간에는 Nginx Proxy Manager(NPM)를 통해 GUI로 편리하게 웹 서비스를 관리하는 법을 배웠습니다. 이제 우리 서버 안에서는 화려한 웹사이트들이 완벽하게 돌아가고 있을 겁니다. 하지만 치명적인 문제가 하나 있죠. 바로 '나만 볼 수 있다'는 것입니다.

공유기라는 거대한 장벽 뒤에 숨어있는 우리 리눅스 서버를 전 세계 어디서든 접속할 수 있게 하려면 어떻게 해야 할까요? 오늘은 네트워크의 문을 여는 포트 포워딩(Port Forwarding)과 변하는 IP를 고정해 주는 DDNS(Dynamic DNS) 설정 과정을 저의 생생한 삽질기와 함께 정리해 보겠습니다.


1. 나의 경험담: "내 서버는 왜 밖에서 안 보일까?"

처음 제 블로그 sunyjini.com의 초기 버전을 집에서 구축했을 때의 일입니다. localhost:80으로 접속하면 너무나 잘 뜨는 화면을 보고 기쁜 마음에 친구에게 제 공인 IP 주소를 알려줬죠. 하지만 친구의 대답은 차가웠습니다. "야, 접속 안 되는데?"

원인은 공유기의 NAT(Network Address Translation) 때문이었습니다. 외부에서 제 공인 IP로 신호를 보내도, 공유기는 이 신호를 내부의 어떤 컴퓨터(리눅스 서버)로 보내야 할지 몰라 그냥 차단해 버린 것이죠. 게다가 다음 날이 되니 집 IP 주소 자체가 바뀌어 버려 멘붕에 빠졌습니다. 포트 포워딩으로 통로를 뚫고, DDNS로 고정된 이름을 붙여주는 작업이 왜 '서버 운영의 꽃'이라 불리는지 뼈저리게 느낀 순간이었습니다.


2. Before: "내부 IP와 공인 IP의 혼란"

네트워크 설정을 하기 전에는 우리가 흔히 아는 192.168.x.x 같은 주소만 보게 됩니다. 이건 집 안에서만 통용되는 '내선 번호'일 뿐, 외부에서는 결코 찾아올 수 없는 주소입니다.

내 네트워크 정보 확인 코드:

Terminal
 
# 1. 내 서버의 내부 IP 확인 (예: 192.168.0.10)
hostname -I

2. 외부에서 나를 보는 공인 IP 확인
curl ifconfig.me

(▲ Before: 두 IP가 다르다는 것을 인지하는 것이 시작입니다. 이제 공유기라는 문지기에게 외부 손님을 서버로 안내하라고 명령을 내려야 합니다.)


3. Action: 포트 포워딩과 DDNS로 길 터주기

가장 먼저 공유기 설정 페이지(보통 192.168.0.1)에 접속하여 포트 포워딩 규칙을 추가합니다. 외부의 80(HTTP), 443(HTTPS) 포트로 들어오는 요청을 리눅스 서버의 내부 IP로 연결해 줍니다.

포트 포워딩 핵심 로직:

Router Setting Logic
 
Rule Name: MyWebServer
External Port: 80-80, 443-443
Internal IP: 192.168.0.10 (내 서버 IP)
Internal Port: 80, 443
Protocol: TCP

그다음은 DDNS입니다. IP가 바뀌어도 myhome.duckdns.org 같은 이름으로 찾아올 수 있게 해 줍니다. 공유기 내장 DDNS를 쓰거나, 리눅스에서 DuckDNS 같은 서비스를 스크립트로 돌릴 수 있습니다.

DuckDNS 업데이트 스크립트 예시:

Bash Shell
 
# crontab에 등록하여 5분마다 내 IP를 갱신합니다.
echo url="https://www.duckdns.org/update?domains=MYDOMAIN&token=MYTOKEN&ip=" | curl -k -o ~/duckdns/duck.log -K -

4. After: 진정한 웹 서버의 탄생

설정을 마치고 나면, 이제 스마트폰의 LTE 망으로도 내 방구석 서버에 접속할 수 있습니다. 윈도우와 리눅스, 그리고 공유기가 삼위일체가 되어 전 세계에 서비스를 제공하기 시작한 것이죠.

달라진 점들:

  • 외부 접근성: 스타벅스에서도 내 집 서버의 파일에 접근하거나 코드를 수정할 수 있습니다.
  • 영구적인 주소: IP가 바뀌어도 내가 정한 도메인 주소는 변하지 않아 신뢰할 수 있는 서비스를 운영하게 됩니다.
  • 진정한 호스팅: 비싼 클라우드 비용을 내지 않고도 내 컴퓨터를 24시간 서버로 활용할 수 있습니다.

5. 실험 요약 및 팁

개념 역할 비유
포트 포워딩 외부 포트를 내부 기기로 연결 아파트 인터폰으로 동호수 연결하기
DDNS 유동 IP에 고정 도메인 매핑 이사를 가도 변하지 않는 별명 만들기
DMZ 모든 포트를 특정 기기로 개방 대문 통째로 열어두기 (보안 주의!)
공인 IP 전 세계에서 유일한 내 집 주소 도로명 주소

6. 마치며: 당신의 서버는 이제 전 세계와 연결되었습니다.

리눅스 기초 46단계를 거치며 우리는 이제 시스템 내부의 튜닝을 넘어, 거대한 인터넷 망의 한 조각으로 당당히 자리 잡았습니다. 엔진(커널)이 좋아졌으니 이제 그 위에서 돌아가는 서비스들을 세상 사람들에게 뽐낼 시간입니다. 네트워크의 문을 여는 것은 보안의 시작이기도 하니, 지난 시간에 배운 UFW 방화벽 설정을 다시 한번 점검하는 것도 잊지 마세요!

오늘의 인사이트: "접속할 수 없는 서버는 존재하지 않는 것과 같다. 연결은 존재를 증명하는 첫 번째 단계다."


46번째 이야기를 마칩니다. 이제 우리만의 '글로벌 워크스테이션'이 완성되었습니다. 다음 시간에는 이렇게 외부에 노출된 서버를 더욱 안전하게 보호하기 위해 'VPN(Tailscale)을 활용해 방화벽 개방 없이 안전하게 내 서버에 접속하는 프라이빗 네트워크 구축'에 대해 다뤄보겠습니다.

이 글이 여러분의 서버를 세상 밖으로 꺼내는 데 도움이 되었나요? 혹시 포트 포워딩을 설정했는데도 '연결 거부'가 뜬다면, 공유기의 상위 모뎀(이중 공유기) 환경인지 확인해 보세요!

이중 공유기 문제를 해결하기 위한 '브릿지 모드' 설정법을 다음 포스팅 부록으로 준비해 드릴까요?

반응형