ddclient로 CloudFlare에 자동 동적 IP(유동 IP) DDNS 설정하기 (우분투)

들어가며

(※ Cloudflare가 API v1이 사용 불가능해지고 v4를 사용하고 있어 최신 버전의 ddclient가 필요하게 되었습니다. 3.9.0 버전을 다루고 있으니 참고하시기 바랍니다.)

안녕하세요. 곰곰입니다.

이번에 gom2.net(곰투넷)에서 gomgom.net(곰곰넷)으로 명칭도 개편하고, 도메인도 새로 구입하고 했는데요. 새롭게 도메인을 옮기면서 우분투 서버를 공유기 아래에서 포트포워딩 하는 것이 아니라, 개별적으로 동적 IP(유동 IP)를 받을 수 있도록 네트워크를 변경하여 블로그 서버를 개편하였습니다.

이러다보니 한 가지 문제점이 생겼는데요. 예전에는 CloudFlare로 변하는 IP를 아수스 공유기가 보내주었습니다. (혹시 그 방법이 알고싶으시다면 ASUS 공유기에서 개인도메인 CloudFlare DDNS 설정하기를 참고하세요.)

하지만 서버가 단독으로 회선을 받고 나서는 그럴 수 없었는데요. 이 문제를 해결하기 위해 열심히 구글링을 하던 도중, 해결책을 찾게 되었습니다.

바로 ddclient를 활용하여 서버가 직접 CloudFlare에 IP를 보내줄 수 있도록 하는 방법입니다.

▶ 준비물

Ubuntu로 돌아가는 서버 (물론 CentOS 등의 리눅스도 가능할 수 있으나, 이 블로그의 명령어가 우분투를 중심으로 기술되기에 적용에는 수정이 필요)

– 콘솔에 접근 (SSH, 모니터를 통해 직접 하든 어떤 방식으로든)

– 간단한 Linux 관련 지식

ddclient 설치하기

ddclient란 DDNS 작업을 해주는 리눅스 어플리케이션으로서, 도메인 네임 서버(DNS)에 때때로 변하는 유동 IP를 보내주는 역할을 해 줍니다. ddclient는 DDNS로 유명한 dyndns 등을 지원하고 있었는데, 최근 3.8.3 버전부터는 CloudFlare를 깔끔하게 지원하기 시작했습니다.

Ubuntu 18.04 LTS 기준으로 apt-get을 통해 ddclient를 설치할 경우, 3.8.3 버전이 설치되는데, 3.8.1 버전 이하는 CloudFlare가 미지원, 3.8.2 버전에서는 불안정한 부분이 있어 apt-get을 통해 ddclient를 설치한 후, 3.9.0 버전으로 수동으로 업그레이드 해 주는 방법을 시도해보자 합니다.

먼저, apt-get을 이용해 ddclient 및 필요한 라이브러리를 설치해 줍니다.

$  sudo apt-get install ddclient libjson-any-perl libdata-validate-ip-perl

[ apt-get 명령어를 통해 설치를 시작합니다. ]

[ apt-get 명령어를 통해 설치를 시작합니다. ]

설치를 하시다보면, ddclient를 어떤 곳과 연동시킬지에 대해 물어보는데, 어차피 나중에 수정될 내용이므로 대충 대답해주셔도 됩니다. 내용을 비우실 수 있는 것은 다 비우셔도 됩니다.

[ 어차피 나중에 내용을 전면 수정해야 하므로 대충 대답해주셔도 괜찮습니다. ]

[ 어차피 나중에 내용을 전면 수정해야 하므로 대충 대답해주셔도 괜찮습니다. ]

설치가 완료될때까지 쭉 응답하시면, 설치가 곧 완료되는 것을 확인하실 수 있습니다.

 ddclient 3.9.0 설치하기 (혹시 필요한 경우 버전 숫자를 바꿔 이용)

ddclient는 소스포지에서 최근 버전의 파일을 제공하고 있습니다. 업그레이드는 ddclient 최신버전 다운 – 압축 해제 – 기존 파일에 덮어쓰기 방식으로 이루어집니다.

먼저 소스포지(여기)에서 최신 버전이 3.9.0이 맞는지 확인합니다. (아마 최신 버전이 3.9.0 이후가 되어도 이 팁은 적용될 겁니다.) 최신 버전을 확인하고 다음과 같은 명령어로 콘솔에서 다운로드를 진행합니다.

$  wget https://sourceforge.net/projects/ddclient/files/ddclient/ddclient-3.9.0/ddclient-3.9.0.tar.gz

이후 압축을 해제합니다.

$  tar -xvf ddclient-3.9.0.tar.gz

압축을 해제했으면 ddclient 프로그램을 기존에 설치된 곳에 복사해 줍니다.

$  sudo cp -f ./ddclient-3.9.0/ddclient /usr/sbin/ddclient

ddclient를 apt-get으로 설치한 이후 버전을 수동으로 업그레이드 한 경우, ddclient의 설정 파일(ddclient.conf)의 위치가 바뀌었기 때문에, 기존 위치에서 설정 파일의 위치를 바꿔주어야 합니다.

$  sudo mkdir /etc/ddclient
$  sudo mv /etc/ddclient.conf /etc/ddclient

 ddclient 설정 파일 수정 후 실행해 보기

ddclient 설정 파일의 위치까지 변경했으면, 이제 ddclient.conf 파일을 수정해주면 끝이 납니다. 여러분들이 편한 에디터를 사용하셔서 파일 내용을 모두 지운 뒤 아래 내용을 붙여넣어 줍니다.

$  sudo nano /etc/ddclient/ddclient.conf

ddclient.conf 파일의 수정 예시는 다음과 같습니다. 아래 내용을 여러분들에 맞도록 수정하셔서 사용하시면 되겠습니다.

#
# /etc/ddclient.conf
#
protocol=cloudflare
use=web
ssl=yes
login=[여러분들의 CloudFlare 로그인 이메일 주소]
password=[CloudFlare Global API Key (My Settings에서 확인 가능)]
zone=[여러분들의 도메인 대표 이름]
[도메인 A 타입 주소 (보통 도메인과 똑같음)]

예를 들면 이러한 방식으로 적으실 수 있겠습니다.

#
# /etc/ddclient.conf
#
protocol=cloudflare
use=web
ssl=yes
login=sample@sample.net
password=1234578ABCDF945678912BDE
zone=sample.net
sample.net

다 적으셨으면, 저장하시고 다음과 같은 명령어로 실행을 해보시기 바랍니다.

$  sudo ddclient -daemon=0 -debug -verbose -noquiet

이후 CloudFlare에 들어갔을 때, IP 주소가 바뀌어 있다면 설정 파일이 잘 적용된 것입니다. (적용까지 1~2분정도 걸릴 수 있음)

[ 잘 적용되면 이 부분의 IP가 현재 IP와 일치하게 바뀝니다. (ifconfig 명령어 등 활용하여 현재 IP 확인 후 비교) ]

[ 잘 적용되면 이 부분의 IP가 현재 IP와 일치하게 바뀝니다. (ifconfig 명령어 등 활용하여 현재 IP 확인 후 비교) ]

(옵션(?)) ddclient 재부팅 시 자동으로 실행되게 하기

간편하게 우분투에서는 재부팅시 크론탭(crontab)을 활용하여 명령어가 실행되게 할 수 있습니다. 아래 명령어를 통해 crontab 목록을 실행해 봅니다.

$  sudo crontab -e

crontab 목록에 다음과 같이 입력하고 저장해 줍니다.

@reboot root ddclient -daemon 1800 -syslog

[ 다음과 같이 재부팅시 실행될 수 있도록 입력해 줍니다. ]

[ 다음과 같이 재부팅시 실행될 수 있도록 입력해 줍니다. ]

재부팅 시, 혹시 IP가 변했을 때 IP가 잘 변한다면 설정이 잘 된 것입니다.

끝마치며

DDNS 작업을 한 번 잘 설정해 두면, 앞으로 여러분들의 컴퓨터에 외부에서 접속할 때 훨씬 접속이 용이해질 수 있습니다.

CloudFlare와 관련된 자료가 국내에는 많이 존재하지 않는 만큼, 여러분들에게 이 부족할 수 있는 정보가 조금이나마 도움이 될 수 있으면 좋겠습니다.

두서 없는 글 잘 읽어주셔서 감사합니다.

※ 참고자료 : Dynamic DNS for CloudFlare with ddclient (Thanks, many!!)
https://jenssegers.com/84/dynamic-dns-for-cloudflare-with-ddclient

gomgom

무엇을 하든 곰곰히 생각하는 곰곰입니다.

You may also like...

4 Responses

  1. 유츠맵 댓글:

    덕분에 서버 잘 설정했습니다. 감사합니다!

  2. 김태희 댓글:

    잘 사용하고 계신가요? use=web 만으로는 안 되는 걸로 보이는데 깃 쪽에서 봐도 Invalid Value for keyword ‘ip’ = ” 에러가 오래전 부터 있다고 올라와 있습니다.

    config 샘플 옵션을 보면 use=web , web=ipcheck.dyndns.org 부분에서 공인 아이피를 따 오는 듯 한데 곰곰님은 use=web 하나만 써도 공인 아이피를 체크 해주는 부분이 따로 있는 것인가요?

    • gomgom 댓글:

      안녕하세요. 먼저 댓글달아주셔서 감사합니다. 제가 최근에는 CloudFlare가 아니고 AWS Route 53을 사용하게 되어 테스트를 할 도메인이 사라졌습니다. 혹시 조사해보고 수정할 내용이 있다면 수정하겠습니다. ^^;

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다