DuckDNS로 내PC에 DDNS 도메인 연결하기
DuckDNS는 내PC에 도메인을 연결해서 사용할 수 있도록 해주는 대표적인 DDNS 서비스 중 하나입니다.
운영체제와 개발 언어별로 상세하게 설치 방법과 미리 작성된 스크립트를 제공하고 있어서 설정을 어렵지 않게 할 수 있습니다.
소유한 도메인이 있으면 DuckDNS가 제공하는 하위 도메인에 내 도메인을 연결해서 내 PC에 접속할 수 있습니다.
윈도우용 DuckDNS 클라이언트 프로그램은 업데이트가 중지되어 더 이상 패치가 되지 않고 있습니다.
DuckDNS 로그인과 서브 도메인 생성
DuckDNS는 자체 계정 생성 기능은 없으며, 구글 계정, 깃헙, 트위터(X), 페르소나 계정으로 OAuth를 사용해서 로그인합니다.
로그인하면 내 계정정보와 토큰 값 그리고 DuckDNS 서브 도메인을 생성하는 폼이 함께 표시됩니다. 토큰 값은 DuckDNS API를 통해 등록한 내 서브도메인의 IP를 갱신할 때 인증을 위해 사용합니다.
사용할 서브 도메인 호스트 이름을 입력하고 "add domain" 버튼을 누릅니다. 서브도메인은 최대 5개까지 추가할 수 있습니다.
호스트 등록에 성공하면 다음처럼 등록된 호스트와 공인 IP가 표시됩니다. 더 이상 사용하지 않은 호스트는 오른쪽 "delete domain" 버튼을 눌러 삭제할 수 있습니다.
표시되는 공인 IP 옆의 "update ip" 버튼을 누르면 내 PC(인터넷 공유기)에 할당된 공인 IP를 새로 갱신합니다. 내 PC의 공인 IP가 거의 바뀌지 않는 환경이면 DuckDNS의 웹 인터페이스를 이용해 공인 IP를 갱신하는 것만으로도 충분할 수 있습니다.
윈도우OS 설정
다음 경로에서 DuckDNS 업데이터 클라이언트 설치 프로그램을 다운로드해서 설치할 수 있습니다. 다만 프로그램이 자바(Java) 런타임을 필요로 하기 때문에 자바 설치를 먼저 해야하고, 작업 스캐줄러에 반복 실행 등록을 해야 해서 파워쉘 스크립트를 사용하는 것보다 더 번거로운 단점이 있습니다.
윈도우용 GUI를 제공하는 것 말고는 장점이 없습니다.
DuckDNS 업데이트를 위한 윈도우용 파워쉘 스크립트를 다음 깃헙 경로에서 다운로드 받습니다.
압축파일의 "update-duckdns.ps1" 파일이 DuckDNS 업데이트 스크립트입니다. 이 파일만 있으면 됩니다. 스크립트를 수정할 필요는 없습니다. 스크립트를 실행하면서 파리미터로 토큰값과 서브도메인을 넘기게 됩니다.
이 스크립트는 DuckDNS의 업데이트 경로인 "https://www.duckdns.org/update?domains={0}&token={1}" 경로를 호출하면서 파리미터 값인 토큰 값(1)과 도메인(0)을 추가해주는게 전부입니다.
서브 도메인 호스트를 여러 개 등록한 경우 콤마로 구분해서 호스트를 여러 개 나열(apost,mypc)할 수 있습니다.
DuckDNS에 등록한 호스트가 "apost"면 파워쉘 스크립트가 있는 경로에서 다음처럼 파워쉘 스크립트를 실행합니다.
.\update-duckdns.ps1 apost [내토큰값]
"파일이 디지털 서명
되지 않았습니다. 현재 시스템에서 이 스크립트를 실행할 수 없습니다." 오류가 발생하면 파워쉘 보안 설정때문에 디지털 서명을 하거나 실행정책을 바꿔야 합니다. 실행 정책을 바꾸는 방식이 더 간편하므로 스크립트를 신뢰할 수 있다면 이 방법을 권장합니다.
스크립트가 실행 가능하도록 보안 정책을 변경하려면 "Set-ExecutionPolicy bypass" 커맨드를 사용합니다.
작업 스케줄러 등록
윈도우 작업 스케줄러를 실행합니다.
오른쪽 작업 리스트에서 "작업 만들기"를 선택합니다.
"일반" 탭의 "사용자 로그온 여부에 관계없이 실행"을 선택합니다.
"트리거" 탭에서 새 트리거를 등록합니다. "매일", 그리고 하단 "작업 반복 간격"을 5분으로 설정해서 10분 간격으로 IP 업데이트를 하도록 합니다.
"동작" 탭에 새 작업을 등록합니다.
프로그램은 powershell.exe, 그리고 인수 추가 항목에는 -ExecutionPolicy ByPass -File "C:\Path\To\Update-DuckDNS.ps1" -Domains "apost" -Token duck-dns-token 을 입력합니다.
파워쉘 스크립트의 경로는 실제 스크립트가 있는 경로로 바꿔줘야 합니다.
작업 스케줄러에 작업이 등록되면 10분 간격으로 DuckDNS에 내PC의 공인 IP를 업데이트합니다.
리눅스 설정
윈도우 파워쉘 스크립트를 실행하는 것과 같은 방식으로 리눅스 bash 쉘 스크립트를 작성해서 크론에 반복 실행 등록을 하면 됩니다.
먼저 bash 쉘 스크립트 파일을 만들어야 합니다.
스크립트 파일을 텍스트 편집기를 이용해 생성합니다.
vi duckdns.sh
파일의 내용은 다음과 같습니다.
URL의 domains, token 값은 자신에게 맞는 값으로 변경해야 합니다. 파이프로 연결한 추가 커맨드는 DuckDNS URL 호출 결과를 로그파일(duckdns.log)이 저장하는 커맨드입니다.
echo url="https://www.duckdns.org/update?domains=서브도메인호스트&token=내토큰" | curl -k -o ~/duckdns/duckdns.log -K -
생성한 duckdns.sh 파일에 실행 권한을 부여합니다.
chmod 700 duckdns.sh
duckdns.sh 파일을 실행해서 정상적으로 동작하는지 확인합니다. 스크립트 파일과 로그파일 관리를 위해 디렉토리를 따로 만들어서 사용하는 것을 권장합니다.
ubuntu@ubuntu:~/duckdns$ ll
total 12
drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 6 01:28 ./
drwxr-x--- 10 ubuntu ubuntu 4096 Apr 6 01:26 ../
-rwx------ 1 ubuntu ubuntu 139 Apr 6 01:28 duckdns.sh*
ubuntu@ubuntu:~/duckdns$ ./duckdns.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2 0 2 0 0 2 0 --:--:-- --:--:-- --:--:-- 2
$ >
크론탭 등록
크롭탭에 10분 간격으로 내 PC의 공인 IP를 업데이트하는 작업을 등록합니다.
crontab -e
등록하는 크론탭 작업은 다음과 같습니다.
*/10 * * * * ~/duckdns/duckdns.sh >/dev/null 2>&1
내가 소유한 도메인을 DuckDNS 서브 도메인으로 연결
내 도메인을 DuckDNS 서브 도메인으로 연결하려면 DNS의 CNAME 속성을 이용합니다. CNAME은 도메인 호스트의 "별칭"을 지정하는 것으로 내 도메인 호스트가 다른 도메인을 가리키도록(일종의 리다이렉션) 해줍니다.
DuckDNS에서 mycom.duckdns.org 서브 도메인을 생성했고 내가 소유한 도메인이 mydomain.com 이면 mydomain.com 도메인을 등록한 DNS 서비스에서 내 PC에 접근하기 위해 사용할 새 호스트를 생성하면서 유형으로 "CNAME" 을 선택하고, 데이터에 DuckDNS의 서브도메인인 "mycom.duckdns.org" 값을 입력하면 됩니다.
등록이 되면 myserver.mydomain.com -> mycom.duckdns.org -> 내PC 공인IP 로 접근을 하게 됩니다.