비용 부담 없는 무료 도메인과 DDNS로 홈 서버 외부 접속 주소 예쁘게 만들기
집에서 NAS나 개인 서버를 운영하다 보면, 밖에 나가서 집 서버에 접속하고 싶을 때가 생깁니다. 그런데 집 인터넷의 IP 주소는 수시로 바뀌어서, 어제 되던 주소가 오늘은 안 되는 일이 흔합니다.
이 글을 읽고 나면, 돈 한 푼 안 들이고 예쁜 나만의 주소로 집 서버에 접속하는 방법을 알 수 있습니다. 무료 DDNS 서비스 고르는 법부터 IP 자동 갱신, HTTPS 인증서 자동 갱신까지 한 번에 정리했습니다.
집 IP가 바뀌는 이유
집 인터넷에 할당되는 IP 주소는 대부분 고정 주소가 아닙니다. 통신사가 주기적으로 주소를 바꿔주기 때문에, 어제 203.0.113.45였던 집 주소가 오늘은 전혀 다른 숫자가 될 수 있습니다. 숫자로 된 주소를 외워서 접속하는 방식은 그래서 오래가지 못합니다.
DDNS(Dynamic DNS)는 이 문제를 해결하는 서비스입니다. 집 IP가 바뀔 때마다 도메인에 연결된 주소를 자동으로 다시 적어줍니다. 덕분에 myhome.duckdns.org 같은 주소 하나만 기억하면, 뒤에서 IP가 어떻게 바뀌든 항상 집 서버에 닿을 수 있습니다. IP 주소가 집 주소라면, DDNS는 이사를 가도 자동으로 전입신고를 해주는 우편물 전 달 서비스 같은 존재입니다.
무료 DDNS 서비스 비교
무료로 쓸 수 있는 DDNS 서비스는 여러 가지가 있지만, 조건이 조금씩 다릅니다. 대표적인 네 곳을 정리했습니다.
- Duck DNS는 완전 무료이며 No-IP처럼 30일마다 수동으로 재연장할 필요가 없습니다. 다만, 30일 동안 IP 업데이트 신호가 한 번도 없으면 호스트가 비활성화됩니다.
- No-IP는 가장 유명하고 공유기나 NAS에 내장된 경우가 많습니다. 무료는 호스트 1개까지이고, 30일마다 확인 링크를 눌러줘야 하며 놓치면 호스트가 삭제됩니다.
- Dynu는 무료로 호스트를 최대 4개까지 만들 수 있고, 자기 도메인을 연결할 수도 있으며 IPv6도 지원합니다.
- afraid.org는 수백 개의 공개 도메인 접미사 중에서 골라 쓸 수 있는 것이 장점입니다. 대신 인터페이스가 구식이라 처음에는 다소 낯설 수 있습니다.
처음 시작한다면 확인 절차가 없는 Duck DNS가 가장 편합니다. 아래에서는 Duck DNS를 기준으로 설명합니다.
Duck DNS로 도메인 만드는 방법
Duck DNS에서 도메인을 만드는 과정은 몇 분이면 끝납니다.
duckdns.org에 접속해 GitHub이나 Google 계정으로 로그인합니다.- 원하는 서브도메인 이름을 입력합니다. (예:
myhome.duckdns.org) - 화면에 표시되는 토큰을 따로 메모해 둡니다. IP를 갱신할 때 사용하는 비밀번호 같은 값입니다.

IP 자동 갱신 설정 방법
도메인을 만들었다고 끝이 아닙니다. 집 IP가 바뀔 때마다 Duck DNS에 새 주소를 알려줘야 합니다. 항상 켜져 있는 서버나 NAS에서 5분마다 갱신 요청을 보내도록 설정하면 됩니다.
*/5 * * * * curl -s "https://duckdns.org/update?domains=myhome&token=토큰&ip=" > /dev/null
위 명령을 서버의 cron에 등록해 두면, 5분 간격으로 현재 IP를 Duck DNS에 알려줍니다. ip=를 비워두면 요청을 보낸 곳의 IP로 자동 인식됩니다.
윈도우 작업 스케줄러로 갱신하기
서버가 윈도우라면 cron 대신 작업 스케줄러를 쓰면 됩니다. 윈도우 10/11에는 curl이 내장되어 있어 별도 프로그램 설치 없이 같은 갱신 명령을 쓸 수 있습니다.
- 작업 스케줄러를 열고 오른쪽에서 기본 작업 만들기를 선택합니다.
- 트리거를 매일로 잡은 뒤 고급 설정에서 5분마다 반복으로 지정합니다.
- 동작에서 프로그램 시작을 선택하고, 프로그램에
curl.exe, 인수에 아래 내용을 입력합니다.
-s "https://duckdns.org/update?domains=myhome&token=토큰&ip="
명령 한 줄로 등록하고 싶다면 명령 프롬프트(관리자)에서 아래 명령을 실행해도 됩니다.
schtasks /create /tn "DuckDNS Update" /tr "curl.exe -s \"https://duckdns.org/update?domains=myhome&token=토큰&ip=\"" /sc minute /mo 5
등록 후에는 작업 스케줄러 라이브러리에서 마지막 실행 결과가 성공인지 확인해 보세요.
공유기에 DDNS 설정 메뉴가 있다면 공유기에서 직접 설정하는 편이 더 간단합니다. 공유기가 인터넷에 연결될 때마다 IP 변경을 감지해서 알려주기 때문입니다.
HTTPS 인증서 자동 갱신 방법
주소까지 만들었다면 이제 접속을 암호화할 차례입니다. 브라우저에서 https://로 접속하려면 인증서가 필요하고, Let's Encrypt에서 무료로 발급받을 수 있습니다. 인증서 유효기간은 90일이라 자동 갱신이 필수입니다.
Caddy는 웹 서버이자 리버스 프록시입니다. nginx나 Apache와 같은 종류의 프로그램인데, 설정이 훨씬 짧고 자동 HTTPS가 내장되어 있다는 점이 다릅니다. 도메인만 적어두면 Let's Encrypt 인증서를 알아서 발급받고, 만료 전에 알아서 갱신합니다. 인증서 만료를 달력에 적어둘 필요가 없는 셈입니다.
사용법은 다음과 같습니다.
caddyserver.com에서 운영체제에 맞는 Caddy를 다운로드합니다. 설치 과정이 따로 없고 실행 파일 하나만 받으면 됩니다.Caddyfile이라는 이름의 텍스트 파일을 새로 만듭니다.- 아래 내용을 그대로 넣고 저장합니다.
Caddyfile이 있는 폴더에서 아래 명령을 실행합니다.
caddy run
Caddyfile에 넣는 내용은 이렇습니다.
myhome.duckdns.org {
reverse_proxy 192.168.1.10:8080
}
첫 줄은 외부에서 접속할 내 도메인이고, reverse_proxy 줄은 들어온 요청을 집 안의 어느 서버로 넘길지를 정하는 부분입니다. 192.168.1.10:8080은 예시이므로, 자기 서버의 내부 IP와 실제 서비스 포트로 바꿔서 적어야 합니다. 예를 들어 NAS의 포토 앱이 5000번 포트라면 192.168.1.10:5000이 됩니다.
Caddy를 끄면 외부 접속도 함께 끊기므로, 항상 켜져 있는 서버에서 실행해야 합니다. 윈도우에서는 caddy run을 작업 스케줄러에 부팅 시 실행으로 등록해 두면 재부팅 후에도 자동으로 뜹니다.
접속이 안 될 때 확인할 점
설정을 마쳤는데 외부에서 접속이 안 된다면, 아래 순서대로 확인해 보세요.
- 공유기의 포트포워딩 규칙이 서버의 내부 IP를 정확히 가리키고 있는지 확인합니다.
- 서버 방화벽이 해당 포트를 허용하고 있는지 확인합니다.
- 외부망 테스트는 집 와이파이가 아니라 휴대폰 모바일 데이터로 접속해서 해봅니다. 집 안에서는 같은 주소로 접속이 안 될 수 있기 때문입니다.
정리
무료 DDNS 하나면 도메인 비용 없이도 예쁜 주소로 집 서버에 접속할 수 있습니다. Duck DNS로 주소를 만들고, cron으로 IP 갱신을 자동화하고, Caddy로 HTTPS 인증서까지 맡겨두면, 이후에는 주소가 바뀌든 인증서가 만료되든 신경 쓸 일이 거의 없습니다.
집 서버를 외부에서 쓰고 싶은데 도메인 비용 때문에 망설였다면, 오늘 무료 주소부터 만들어 보세요. 막히는 부분이 있으면 댓글로 남겨주세요!