윈도우 DDNS 홈서버 설정 가이드 - ddclient로 유동IP에 도메인 연결하기
DNS와 DDNS
DNS는 IP 주소를 도메인으로 연결해주는 서비스입니다. 따라서 DNS는 인터넷에서 접근할 수 있도록 공개된 서비스로 제공되어야 합니다.
내 소유, 또는 타인 소유의 도메인을 실제 서버 IP 주소로 변경할 수 있도록 DNS 서비스를 제공하는 서버를 네임서버(Name Server)라고 합니다.
인터넷에는 많은 메이저 회사들이 DNS 서비스를 제공하고 있습니다. 이 서비스를 이용하면 편리하게 내 도메인을 관리할 수 있습니다. 대표적으로 구글, 클라우드플레어와 같은 회사들이 있습니다.
인터넷 관련 메이저 회사들만 DNS 서비스를 제공하는 것은 아닙니다. 카페24도 자체 네임서버가 있고, 인터넷 서비스 회사가 아니어도 자체적인 네임서버를 운영하기 도 합니다. 아니면 개인적으로 인터넷에 연결된 PC에 DNS 서비스를 올려서 내 소유의 도메인을 IP주소로 연결해주는 네임서버를 운영할 수도 있습니다.
어떤 형태든 공인 IP를 도메인으로 연결해주는 서비스가 DNS, 또는 네임서버의 기능입니다.
집에서 사용하는 내 PC를 도메인을 연결해서 홈서버를 운영하고 싶으면 사용하는 DNS 서비스 관리 화면에 들어가서 도메인을 내PC의 공인 IP(또는 인터넷 공유기에 할당된 공인 IP)를 등록하면 됩니다.
등록까지는 잘 되지만, 내 PC, 또는 인터넷 공유기에 할당되는 공인IP가 가변 IP라는 것입니다. 내가 사용하는 인터넷 서비스를 통해 내가 할당받는 IP는 망 안에 있는 DHCP 서버에서 자동으로 할당됩니다.
대부분의 경우 15일 이상, 또는 몇 달씩 같은 IP가 할당되지만, 주기적으로 망 안의 네트워크 장비들의 환경 정보가 리셋되거나, 이런 저런 이유로 IP가 다시 할당될 때 IP가 변경되게 됩니다.
이런 변경 사항을 내가 실시간으로 알 수 있는 방법이 없기 때문에 내 홈서버에서 운영중인 서비스가 접속이 안되는 것을 한참 후에나 알 수 있을 수도 있습니다.
IP가 변경된 것을 알게 되면, 사용하는 네임 서버 서비스 관리 페이지에 들어가서 변경된 IP를 반영하면 되지만, IP가 바뀔때마다 변경 작업을 해야 합니다.
그래서 주기적으로 내 PC의 IP가 바뀌는 지를 체크해서 DNS 서버에 바뀐 IP를 갱신해주는 서비스가 DynamicDNS, 줄여서 DDNS 서비스가 생겨났습니다.
DDNS 서비스를 위해서는 DNS서버와 내 PC 양쪽에 통신이 가능해야 합니다.
내 PC에는 내 PC, 또는 인터넷 공유기의 공인 IP가 바뀌는지를 일정 시간 간격으로 모니터링하는 프로그램, 또는 스크립트가 필요합니다. 이 DDNS 클라이언트 프로그램은 IP가 바뀌면 DNS 서버에 변경 내용을 갱신하는 동작을 하게 됩니다.
DNS 서버는 전용의 DDNS 클라이언트 프로그램과 통신을 할 수 있는 기능이 구현된 DDNS 서비스일 수도 있고, 네임 서버의 관리 기능을 공개된 API로 제공하는 것일 수도 있습니다.
전자의 경우가 DNSEver와 같은 DDNS 네임서버 서비스입니다. DNSEver는 DDNS 클라이언트를 제공하며, 스크립트로 업데이트를 할 수 있는 커맨드 방식또한 지원합니다.
후자의 경우는 네임버서 API를 제공하는 대부분의 네임서버 서비스에서 지원이 됩니다. Google Domains, Cloudflare, Pokebun 같은 네임서버 서비스들이 API를 통해 도메인 호스트의 IP 업데이트를 할 수 있습니다.
Perl, bash, 파워셸 스크립트를 사용해서 DDNS 서비스의 API를 접근하면 네임서버 정보를 갱신할 수 있지만, 스크립트 사용이 어렵다면 ddclient같은 DDNS 클라이언트 프로그램을 사용해서 ddclient가 지원하는 네임서버의 등록정보 갱신을 간편하게 할 수 있습니다.
국내 ISP, 또는 호스팅 사의 네임서버들은 대부분 API를 지원하지 않기 때문에 DDNS 사용할 수 없습니다. API를 사용해서 DDNS를 구현하고 싶으면 앞서의 네임서버 서비스에 도메인을 등록/이전해야 합니다.
구글의 도메인 등록/관리 서비스는 Squarespace로 매각되었습니다. 아직은 구글이 도메인 등록/관리 서비스를 유지하고 있고, DDNS 서비스 또한 사용하는데 문제가 없지만, Squarespace에서 이 기능을 그대로 지원할지는 알 수 없습니다.
구글의 DDNS 서비스를 사용하게 되면 Squarespace로 완전히 서비스가 넘어가는 시점에 DDNS 서비스 지속 가능 여부를 체크해야 합니다.
윈도우용 ddclient 설치
다음 경로의 설치 파일을 다운로드받아 설치프로그램을 실행합니다.
http://www.randomnoun.com/wpf/ddclient-1.8.0.exe
"Next"를 눌러 진행하다 "Select Dynamic DNS server" 화면에서 DDNS 정보를 입력합니다. 구글 도메인 DDNS를 예를 들어 설명합니다.
- DDNS 서비스를 사용할 호스트를 입력(호스트 포함 풀 도메인 입력)
- 사용할 Dynamic DNS 프로토콜 선택. 구글 도메인을 사용할 것이므로 "googledomains" 선택
- 사용하는 DNS 서비스의 Dynamic DNS server 도메인 입력. 프로그램에 버그가 있어서 "checkip.dyndns.org"를 고정으로 사용해야 합니다.
- Connection은 "HTTP" 선택
- 구글 DDNS 설정에서 DDNS 호스트의 사용자ID와 패스워드를 복사 붙여넣기로 입력. 바로 다음에 설명하는 "네임서버 DDNS 호스트 등록 과정"을 참조해서 설정하면 아이디/패스워드를 얻을 수 있습니다. 순서상 설치과정이 먼저여서 뒤에 위치해 있습니다.
Dynamic DNS server는 내PC의 공인 IP를 얻는데 필요한 웹 서비스의 주소입니다. 설치 프로그램의 제한으로 인해 "www.safedns.com", "checkip.dyndns.org" 외의 다른 알려진 공인 IP를 얻는 도메인을 입력하면 설치 후 DDNS 동작시 에러가 발생합니다. "www.safedns.com", "checkip.dyndns.org"를 사용해서 사용하고 공인 IP를 얻는데 문제가 있으면, 설치 후 ddclient.conf
파일을 직접 편집해서 다른 URL로 변경할 수 있습니다.
대체할 공인IP를 얻는 다른 웹 서비스 URL은 다음 둘 중 하나를 사용하면 됩니다.
처음 설치 이후에는 리눅스 버전과 동일하게 환경 설정 파일인 ddclient.conf
파일을 수정해서 설정을 변경하게 됩니다.
"Next"를 눌러 ddclient 서비스를 실행할 계정을 선택합니다. 추천 항목인 "Network Service"로 두고 "Next"를 눌러 넘어갑니다.
설치가 완료되면 서비스 관리자에서 ddclient 서비스가 등록되었고 자동 실행인지 확인합니다.
설치 완료후 ddclient.conf
파일은 다음처럼 항목이 구성됩니다. 설치할 때 입력한 내용들이 채워진 예이므로 선택한 DDNS에 따라 실제 값은 약간씩 다를 수 있습니다.
# ddclient.conf
#
daemon=60
use=web
web=www.safedns.com/nic/checkip.html
server=checkip.dyndns.org # 없어도 됨
protocol=googledomains login=q1YZTdYohS07m06n, password=IGOn75pyLDeSbpHr www.plaincss.com
ssl=no # checkip.dyndns.org 서비스가 HTTPS 연결을 지원하지 않음.
공인 IP 획득 방식은 윈도우용 ddclient에서는 web 방식을 사용합니다. 리눅스 버전의 기능을 그대로 가지고 있기 때문에 네트워크 인터페이스를 사용하는 방식도 사용은 가능합니다.
DDNS 아이디/패스워드는 보안 인증을 위한 것으로 사용하는 DNS 서비스에서 DDNS 호스트를 생성하면 확인할 수 있습니다. 사용자 이름/비밀번호 보기를 한 후 복사 붙여넣기로 ddclient.conf 파일에 login/password 항목의 값을 채우면 됩니다. 패스워드는 따옴표로 감싸서 표시해야 합니다.
DDNS로 사용하는 호스트가 여러 개일 경우, 다음처럼 순서대로 나열해서 ddclient.conf 파일에 표기해주면 됩니다.
protocol=googledomains
use=web
web=checkip.dyndns.org/nic/checkip.html
login=ddns-id1, password='ddns-pw1'
www.plaincss.com
ssl=no
protocol=googledomains
use=web
web=checkip.dyndns.org/nic/checkip.html
login=ddns-id2, password='ddns-pw2'
blog.plaincss.com
ssl=no
ddclient가 기본 지원하는 DNS 서비스, 또는 DDNS 서비스는 다음과 같습니다. 이외에도 ddclient.conf 파일을 편집해서 지원 가능한 다른 DNS 서비스를 사용할 수도 있습니다. ddclient.conf 파일의 "server" 속성 값으로 DDNS 서버 도메인을 표기하지 않고 "protocol"에 다음 목록 중 한개의 서비스 이름만 표기하면 됩니다.
- changeip
- cloudflare
- concont
- dnsmadeeasy
- dnspark
- dondominio
- dslreports1
- dtdns
- duckdns
- dyndns1
- dyndns2
- easydns
- freedns
- freemyip
- googledomains
- hammernode1
- namecheap
- nfsn
- noip
- nsupdate
- sitelutions
- woima
- yandex
- zoneedit1
네임서버 DDNS 호스트 등록
구글 도메인에서 등록한 도메인에 DDNS 호스트로 www를 추가하고 login/password 값을 확인 해보겠습니다.
- DDNS 호스트를 추가할 도메인을 선택한 후 왼쪽 메뉴에서 "DNS"를 선택합니다.
- DNS 레코드 관리 화면 하단의 "고급 설정 표시" 버튼을 눌러 고급 설정 항목을 표시합니다.
- 동적 DNS 섹션 오른쪽의 "동적 DNS 관리" 링크를 눌러 호스트 추가 폼을 표시합니다.
- 새 호스트를 입력하고 "저장" 버튼을 눌러 호스트를 등록합니다. IP는 동적 업데이트를 하기 때문에 입력할 수 없습니다. 초기에는 0.0.0.0으로 표시되며, ddclient로 IP 갱신이 되면 자동으로 변경됩니다.
- 새 호스트가 등록되면 동적 DNS 섹션 하단에 "도메인에 동적 DNS가 설정됨" 펼침 영역이 추가됩니다. 오른쪽의 펼침 버튼을 눌러 설정 내용을 확인합니다.
- 오른쪽 "사용자 인증 정보 보기"를 눌러 ddclient에서 구글 도메인의 호스트 IP를 업데이트하는데 필요한 아이디/패스워드 인증정보를 확인합니다.
"보기" 버튼을 누르면 가려진 이름/비밀번호를 확인할 수 있습니다.
사용자 이름과 비밀번호를 복사해서 ddclient.conf 에 복사 붙여넣기를 하면 호스트 등록 과정은 완료됩니다.
클라우드 플래어는 환경 설정 파일에 로그인 ID와 생성한 API Key를 생성해서 복붙해야 합니다.
protocol=cloudflare
use=web
web=checkip.dyndns.org/nic/checkip.html
login=클라우드플레어 ID, password=클라우드플레어 Global API Key
blog.plaincss.com # DDNS 도메인
ssl=no
ddclient 실행 테스트
다음 커맨드를 커맨드 창에서 입력해 출력 끝 행에 "good", "Done", "Okay", "SUCCESS"라고 메시지가 표시되면 성공입니다.(버전에 따라 메시지가 다소 다를 수 있습니다.) 디버그 모드로 DDNS 갱신 처리 과정의 모든 메시지를 표시합니다.
윈도우용 ddclient 프로그램은 오픈소스로 배포되는 리눅스용 ddclient를 윈도우용으로 래핑한 프로그램입니다. 윈도우 환경에 맞지 않는 버그가 있고 내부에 리눅스용 환경 설정 파일 경로인 "/etc/ddclient.conf" 경로를 그대로 가지고 있어서 윈도우용 환경 설정 파일의 위치를 제대로 찾지 못합니다. "-file" 옵션으로 환경 설정 파일 경로를 표시해야 합니다.
c:\Program Files\ddclient>ddclient -daemon=0 -debug -verbose -noquiet -file "C:\Program Files\ddclient\ddclient.conf"
맨 끝 행만 확인하면 됩니다.
sudo ddclient -daemon=0 -debug -verbose -noquiet
=== opt ====
opt{cache} : <undefined>
opt{cmd} : <undefined>
opt{cmd-skip} : <undefined>
opt{daemon} : 0
opt{debug} : 1
opt{exec} : <undefined>
...
GMT; path=/; domain=.google.com; HttpOnly
RECEIVE: Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
RECEIVE: Accept-Ranges: none
RECEIVE: Vary: Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site,Accept-Encoding
RECEIVE:
RECEIVE: good 210.95.255.255
이미 동적IP가 등록되어 성공했으면 다음처럼 "SUCCESS" 메시지가 최종 출력됩니다.
SUCCESS: www.mydomain.com: skipped: IP address was already set to 210.95.255.255.
실행이 성공하면 구글 도메인에 들어가서 동적 DNS 섹션에 추가한 호스트에 내 PC의 공인 IP가 갱신되었는지 확인하면 됩니다.
ddclient 서비스 설정과 재시작
ddclient를 설치하면 서비스로 백그라운드 서비스가 자동 설치되고 실행됩니다. 서비스 관리자에서 서비스 등록 및 실행 상태를 확인할 수 있습니다.
윈도우 프로그램인만큼 프로그램 그룹에 서비스를 시작/중지 할 수 있는 커맨드 링크와 ddclient의 환경 설정 파일인 ddclient.conf
파일을 편집할 수 있는 링크가 프로그램 그룹에 함께 제공됩니다.
윈도우용 ddclient의 실행 주기는 5분이며 ddclient.conf
파일을 편집해서 변경할 수 있습니다.
환경 설정 파일 안의 다음 행을 수정합니다. "60"으로 변경하면 1분 간격으로 유동IP 체크를 합니다.
daemon=5m # m은 분 단위 표시로 5분을 나타냄. 단위 표시가 없으면 초로 입력 값을 처리함.
파일 저장 후 ddclient 서비스를 다시 시작합니다. 서비스 관리자에서 서비스를 재시작하거나, 프로그램 그룹의 Stop ddclient service -> Start ddclient service 링크를 순서대로 눌러도 됩니다.
ddclient로 DDNS 서비스를 사용하지 않거나 일시 중지할 때는 서비스를 정지시켜서 서비스를 죽여놓을 수 있습니다.
서비스 관리자에서 ddclient 서비스의 속성을 연 후 "시작 유형"을 "사용 안함"으로 한 후 "중지" 버튼을 눌러 서비스를 중지하면 재부팅 후에도 서비스가 실행되지 않습니다.
인터넷 공유기/라우터 포트포워딩 설정
홈서버에 홈페이지를 구축했으면 인터넷에서 도메인으로 내 홈서버 80포트로 접속할 수 있어야 합니다.
DDNS에서 내 공유기에 설정된 공인 IP를 알려주므로 DDNS 도메인으로 공유기까지는 웹접속 트래픽이 오지만 공유기 단에서 모두 막히게 됩니다.
공유기 80포트로 들어오는 트래픽을 내부망에 있는 내 홈서버 80 포트로 오도록 포트 포워딩 설정을 해야 비로소 내 홈서버의 웹 사이트가 DDNS 도메인을 통해 서비스가 가능해집니다.
설정은 공유기마다 다르므로 공유기 사용 설명서를 참조하면 되며, 대부분 공유기가 NAT/라우터 설정쪽에 포트포워딩 기능이 포함되어 있습니다.
외부에서 내 컴퓨터의 파일들에 접근할 수 있도록 내 PC에 FTP 서비스를 올렸다면 21번 포트를 포트 포워딩해서 공유기로 들어오는 FTP 접속이 내 PC로 가도록 해야 합니다.
ddclient 실행 로그 확인
ddclient의 로그파일 위치는 다음과 같습니다. 파일 이름은 ddclient.log
입니다. 설치할 때 ddclient를 실행하는 서비스 계정을 선택한 것에 따라 로그 파일 위치가 달라집니다.
- C:\windows\ServiceProfiles\NetworkService\AppData\Local\ddclient.log
- C:\windows\ServiceProfiles\LocalService\AppData\Local\ddclient.log
- C:\Users\username\AppData\Local\ddclient.log
DDNS 업데이트 성공, 또는 에러가 발생했는지를 로그 파일을 통해 확인할 수 있습니다.
C:\Program Files\ddclient\ddclient.conf
윈도우용 ddclient는 기본 설정으로 에러가 없으면 아무런 로그를 파일에 기록하지 않습니다. "verbose" 옵션을 켜야 ddclient가 IP정보를 얻고 DNS 의 IP와 비교해서 업데이트를 하는 과정에 대한 로그 기록이 남게 됩니다.
ddclient.conf 파일에 다음 옵션 행을 추가합니다. ddclient 실행 주기가 짧을 경우 syslog 파일이 지나치게 커질 수 있으므로 테스트 환경에서만 사용하고 옵션을 삭제하는 것이 좋습니다.
verbose="yes"
옵션 항목을 추가하고 ddclient 서비스를 다시 시작하면 다음처럼 ddclient 상세 실행 로그가 "syslog" 파일에 남게됩니다.
CONNECT: ipinfo.io
CONNECTED: using SSL
SENDING: GET /ip HTTP/1.1
SENDING: Host: ipinfo.io
SENDING: User-Agent: ddclient/3.9.1
SENDING: Connection: close
SENDING:
RECEIVE: HTTP/1.1 200 OK
RECEIVE: server: nginx/1.24.0
RECEIVE: date: Thu, 28 Mar 2024 23:09:23 GMT
RECEIVE: content-type: text/plain; charset=utf-8
RECEIVE: Content-Length: 14
RECEIVE: access-control-allow-origin: *
RECEIVE: x-envoy-upstream-service-time: 1
RECEIVE: via: 1.1 google
RECEIVE: strict-transport-security: max-age=2592000; includeSubDomains
RECEIVE: Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
RECEIVE: Connection: close
RECEIVE:
RECEIVE: 210.95.168.173
SUCCESS: www.plaincss.com: skipped: IP address was already set to 210.95.168.173.
환경 파일을 변경한 후에는 항상 서비스를 재시작해야 합니다.
로그파일을 일일이 열어서 실행 기록을 확인하는 것보다는 콘솔 출력 기능을 지원하므로 ddclient 프로그램 그룹에서 Start ddclient console 을 실행하면 서비스가 실행하면서 출력하는 로그 내용을 콘솔에서 실시간으로 확인할 수 있습니다.