ddclient로 Cloudflare를 DDNS로 사용하기

DDNS를 지원하지 않는 공유기를 사용중이라면, ddclient를 이용해 Cloudflare를 DDNS로 사용할 수 있다.

Cloudflare의 리소스대로 따라하면 잘 되지 않는다.

먼저, ddclient를 설치해야 한다. 설치는 프로젝트 홈페이지에서 직접 다운받아 설치할 수 있다. Debian 계열의 리눅스를 사용중이라면, apt install ddclient로도 설치할 수 있다.

설치하는 과정에 config파일을 만들기 위해 이것저것 정보를 물어보는데, 어차피 다 지우고 다시 입력할 것이기 때문에, 아무거나 입력해도 된다.

ddclient의 설정 파일은 /etc/ddclient.conf 에 있다. 물론, 시스템에 따라 다를 수 있다.

파일을 열고 아래와 같이 수정하면 된다.

ssl=yes
use=web
protocol=cloudflare
server=api.cloudflare.com/client/v4
login=[Cloudflare 로그인 이메일]
password=[Cloudflare Global API Key]
zone=[도메인 이름]
[등록하려고 하는 호스트 네임]

Cloudflare Global API Key는 My Profile에서 알아낼 수 있다.

예를 들어, stack.news를 사용하고 싶으면 아래와 같이 설정 파일을 만들면 된다.

ssl=yes
use=web
protocol=cloudflare
server=api.cloudflare.com/client/v4
login=[Cloudflare 로그인 이메일]
password=[Cloudflare Global API Key]
zone=stack.news
stack.news

test.stack.news를 사용하고 싶으면 아래와 같이 설정 파일을 만들면 된다.

ssl=yes
use=web
protocol=cloudflare
server=api.cloudflare.com/client/v4
login=[Cloudflare 로그인 이메일]
password=[Cloudflare Global API Key]
zone=stack.news
test.stack.news

apt를 이용해 설치했으면, 자동으로 데몬에 등록이 된다.

직접 압축을 풀어 설치한 경우에는 crontab에 등록해서 사용할 수 있다.

정상적으로 되는지 확인은 Cloudflare에 로그인해서 알아볼 수 있으며, 터미널에 ddclient를 입력해 실행하거나, syslog를 열어서 로그를 확인할 수 있다.

FATAL: Error loading the Perl module JSON::Any needed for cloudflare update. 와 같은 에러가 발생하는 경우에는 apt install libjson-any-perl로 해결할 수 있다.

Cloudflare 프로토콜은 3.8.3 버전부터 지원한다.

[2019년 4월 1일 내용 추가]

이제 ddclient 3.8.3을 사용하면, Cloudflare에서 HTTP 410 Gone을 보내 업데이트가 되지 않는다. 이를 해결하려면 3.9.0으로 올리면 된다.

3.9.0으로 올리면 301 Moved Permanently를 보내서 또 업데이트가 안된다.

server=api.cloudflare.com/client/v4

로 바꾸면 해결할 수 있다.

디버깅은 ddclient -daemon=0 -debug -verbose -noquiet로 했다.

마지막으로 실행한 시간으로부터 5분이 지나지 않으면, 업데이트를 하지 않는데, 캐시를 지우면 업데이트를 한다. 캐시는 /var/cache/ddclient/ddclient.cache에 있다.