포트포워딩은 집 밖에서 우리 홈서버로 들어오는 길을 열어주는 공유기 설정입니다. DDNS로 고정 주소(ddlabx-home.duckdns.org)를 만들었어도, 공유기에서 포트를 열어주지 않으면 외부에서는 접속이 안 됩니다. 이 글에서는 KT 공유기에서 80·443 포트를 여는 실제 과정과, 외부 접속 테스트에서 흔히 헷갈리는 http/https 문제를 제가 직접 5G로 확인한 결과와 함께 정리합니다.
이 글은 6편(DDNS 완벽 설정)과 6-1편(DuckDNS 컨테이너)에서 이어집니다. 고정 주소가 준비돼 있어야 이번 편이 의미가 있습니다.
포트포워딩이란 — 집 대문에 길 안내를 붙이는 일
포트포워딩은 '공유기로 들어온 특정 노크(포트)를 내부의 특정 기기로 전달하라'고 지정하는 설정입니다. 공유기를 집 대문이라고 하면, 외부에서 온 손님이 "80번 방을 찾아요"라고 했을 때 "그건 172.30.1.51 서버에 있어요"라고 길을 안내하는 규칙인 셈입니다. 이 규칙이 없으면 공유기는 외부 요청을 그냥 막아버립니다. 홈서버 외부 접속이 안 되는 이유 대부분이 이 설정 누락입니다.
이번에 열 포트는 두 개입니다. 80번(HTTP)과 443번(HTTPS)인데, 이는 다음 편에서 다룰 리버스 프록시(Nginx Proxy Manager)가 이 두 포트에서 요청을 받아 각 서비스로 나눠주기 때문입니다. 특히 80번은 이후 SSL 인증서를 발급받을 때도 필요하므로 반드시 함께 열어야 합니다. 전달 대상은 우리 우분투 서버의 내부 IP(제 경우 172.30.1.51)입니다. 즉 '외부에서 80·443으로 들어온 요청 → 172.30.1.51의 80·443으로 전달'이라는 규칙을 만드는 것이 이번 편의 핵심입니다.
KT 공유기에서 포트포워딩 설정하기
KT 공유기의 포트포워딩 메뉴는 '트래픽 관리 → 포트 포워딩 설정' 경로에 있습니다. 공유기 관리자 페이지에 로그인한 뒤 이 메뉴로 들어가면, 소스 IP·소스 포트·외부 포트·내부 IP 주소·내부 포트·프로토콜·설명을 입력하는 표가 나옵니다. 여기에 규칙 두 개를 추가합니다.
첫 번째 규칙(HTTP)은 외부 포트 80~80, 내부 IP 주소 172.30.1.51, 내부 포트 80~80, 프로토콜 TCP, 설명은 npm-http처럼 알아볼 수 있게 적습니다. 두 번째 규칙(HTTPS)은 외부 포트 443~443, 내부 IP 주소 172.30.1.51, 내부 포트 443~443, 프로토콜 TCP, 설명 npm-https로 넣습니다. 소스 IP와 소스 포트는 비워두면 '모든 외부에서 허용'을 의미하므로 그대로 둡니다. 입력 후 추가를 누르면 아래 목록에 두 규칙이 등록됩니다.

여기서 KT 사용자가 꼭 확인할 것이 있습니다. KT 인터넷은 KT 공유기 아래에 개인 공유기(iptime 등)를 한 번 더 연결한 '이중 공유기' 구조인 집이 많습니다. 이 경우 KT 공유기와 개인 공유기 양쪽 모두에 포트포워딩을 해야 외부 접속이 됩니다. 확인 방법은 간단합니다. 서버가 물린 공유기의 관리자 페이지에서 포트포워딩 규칙이 실제로 등록되는지 보면 됩니다. 제 경우 서버 IP가 172.30.x.x(KT 대역)였고 KT 공유기에 규칙이 바로 적용돼, 서버가 KT 공유기에 직접 물려 있어 이중 설정이 필요 없는 환경이었습니다.
외부 접속 테스트 — http는 되고 https는 안 되는 이유
포트포워딩이 실제로 뚫렸는지는 반드시 '집 네트워크 바깥에서' 확인해야 합니다. 가장 간단한 방법은 휴대폰의 와이파이를 끄고 셀룰러 데이터(5G/LTE)로 접속해보는 것입니다. 집 와이파이에 연결된 상태로는 내부망이라 테스트가 무의미하니, 반드시 데이터로 전환해야 합니다.
여기서 제가 실제로 겪은 혼란을 공유합니다. 처음에 아이폰 Safari로 ddlabx-home.duckdns.org에 접속했더니 '네트워크 서버에 보안 연결할 수 없어 페이지를 열 수 없다'는 에러가 떴습니다. 순간 포트포워딩이 실패한 줄 알았지만, 원인은 다른 데 있었습니다. Safari는 주소를 자동으로 https로 바꿔 접속을 시도하는 경우가 있는데, 아직 SSL 인증서를 발급받지 않은 상태라 그 보안 연결에서 막힌 것입니다. 서버까지 도달은 했지만 https 단계에서 걸린 것이죠. 그래서 크롬으로 http 접속을 시도하니, 이번엔 'Congratulations! You've successfully started the Nginx Proxy Manager' 페이지가 정상적으로 떴습니다.

이 화면은 우리 서버의 리버스 프록시가 직접 응답한 것이므로, 포트포워딩이 성공했다는 100% 확실한 증거입니다. 다시 말해 앞서 Safari에서 실패한 것은 포트포워딩 문제가 아니라 'SSL 인증서가 아직 없어서' 생긴 정상적인 현상이었습니다. 참고로 KT 회선 일부는 가정용에서 80번 인바운드를 막기도 하는데, 제 경우 80번이 정상적으로 열려 있어 이 제한은 없었습니다. 만약 80번이 막힌 환경이라면 8편에서 다룰 DNS 방식 SSL 인증으로 우회할 수 있습니다. 화면 아래 'host that isn't set up yet'이라는 안내는 아직 프록시 규칙을 만들지 않아 기본 페이지가 표시된 것으로, 이는 7편에서 설정합니다.
이것으로 외부에서 우리 집 서버로 들어오는 길이 실제로 열렸습니다. 남은 것은 https 자물쇠(SSL)와, 주소별로 서비스를 나눠주는 리버스 프록시 규칙입니다. 다음 편에서 여러 서비스를 하나의 주소로 깔끔하게 연결하는 리버스 프록시를 설정합니다. → 7편. 리버스 프록시로 도메인 하나에 여러 서비스 연결