콘텐츠로 건너뛰기

클라우드 플레어 dynamic ddns 설정하는 방법 3가지

고정IP와 달리 유동IP는 언제든 IP정보가 변경될 수 있기 때문에 서버의 변경된 IP주소를 DNS 레코드에 동적으로 업데이트 할 수 있는 방법이 필요합니다. 이 글에서 변경된 IP 정보를 클라우드 플레어의 DNS 설정에 클라우드 플레어 dynamic ddns를 적용하는 방법에 대해서 설명 합니다.

Dynamically update DNS records 방법에 대해서는 클라우드 플레어에서 제공되는 공식 문서에서 찾을 수 있었습니다. Dynamically update DNS records · Cloudflare DNS docs 참고 하시면 됩니다.

문서에서는 Cloudflare API, ddclient, DNS-O-Matic 을 사용하는 3 가지 방법을 가이드 하고 있습니다.

Cloudflare API 사용

직접 스크립트를 작성하여 클라우드 플레어에서 제공하는 DNS 레코드를 업데이트 하는 API를 호출하는 방법 입니다. DNS 레코드를 업데이트 할 수 있는 아래 API를 호출 하면 됩니다.

https://api.cloudflare.com/client/v4
/zones/{zone_identifier}/dns_records/{identifier}

위의 API를 호출하기 위해서는 {zone_identifier} 값, {identifier} 값 그리고 API를 호출할 때 헤더에 넣어 주어야 하는 API 토큰 값이 필요 합니다.

API 토큰 생성

간단한 방법으로 보이나 API를 사용하기 위해서는 API를 사용할 수 있는 토큰을 먼저 생성해야 합니다. API 토큰은 ‘내 프로필 > API 토큰’ 메뉴에서 생성 합니다.

내 프로필 > API 토큰
내 프로필 > API 토큰

API 토큰 화면에서 ‘토큰 생성’ 버튼을 누릅니다.

API 토큰 템플릿 선택
API 토큰 템플릿 선택

토큰 생성 화면에 들어가면 여러가지 토큰 생성에 대한 템플릿이 보이는데, 우리는 DNS 정보 변경을 위한 것이므로 “영역 DNS 편집” 템플릿을 사용하도록 합니다. 템플릿 사용 버튼을 누르면 API 토큰에 대하여 필요한 제약 조건을 추가할 수 있는 화면에 나오는데, 상황에 맞는 적절한 선택을 해 주시면 됩니다.

토큰이 생성되면 토큰을 테스트 해 볼 수 있는 curl을 사용한 API 호출 스크립트가 표시되는데, 리눅스 서버에서 해당 스크립트를 입력하여 정상 응답이 오는지 확인 해 보면 됩니다. API 토큰은 보안을 위해서 이후 다시 확인 할 방법이 없기 때문에 잘 메모 해 두도록 합니다. API 토큰은 절대 유출되면 안되는 정보이므로 잘 관리 하도록 합니다.

zone_identifier 찾기

List Zones – Cloudflare API Documentation 문서를 참고하여 진행 합니다.

DNS 레코드 업데이트 API 호출을 하기 위해선 {zone_identifier} 값을 알아야 합니다. 리눅스 터미널에서 아래 API를 호출 합니다.

GET - https://api.cloudflare.com/client/v4/zones

{API_토큰} 문자열 대신 앞서 만든 토큰 값을 넣어서 호출 해 줍니다.

curl --request GET \
  --url https://api.cloudflare.com/client/v4/zones \
  --header 'Authorization: Bearer {API_토큰}' \
  --header 'Content-Type: application/json'

조회 결과로 아래와 같은 JSON 문자열을 결과로 응답 받게 됩니다. JSON 문자열이 길어서 읽기 어렵다면 JSON 포맷터를 이용해서 보기 좋게 정렬하여 확인하면 됩니다.

{
    "result": [{
        .
        .
        .
        "paused": false,
        "type": "full",
        "name": "signpen.net",
        "id": "xxxxxxxxxxxxxxxxxxxxxxxxxzone_identifier"
        .
        .
        .
    }],
    "success": true,
    "result_info": {
        "per_page": 20,
        "total_count": 1,
        "count": 1,
        "page": 1,
        "total_pages": 1
    },
    "messages": [],
    "errors": []
}

굵게 표시한 부분이 우리가 찾는 {zone_identifier}에 해당하는 값 입니다. 따로 메모 해 두도록 합니다.

identifier 찾기

List DNS Records – Cloudflare API Documentation 문서를 참고하여 진행 합니다.

DNS Record의 ID를 찾아야 하기에 아래 API를 호출 합니다.

GET - https://api.cloudflare.com/client/v4
/zones/{zone_identifier}/dns_records

{zone_identifier}은 찾아낸 값을 사용하여 아래와 같이 호출 합니다.

curl --request GET \
  --url https://api.cloudflare.com/client/v4/zones/xxxxxxxxxxxxxxxxxxxxxxxxxzone_identifier/dns_records \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer {API_토큰}' 

호출된 결과 JSON에서 변경하려는 DNS의 ID 값을 찾도록 합니다.

{
    "result": [
        .
        .
        .
        {

         
            "name": "signpen.net",
            "comment": null,
            "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxidentifier",
            "locked": false,
            "proxiable": true
        },
        .
        .
        .
    ],
    "success": true,
    "result_info": {
        "per_page": 100,
        "total_count": 5,
        "count": 5,
        "page": 1,
        "total_pages": 1
    },
    "messages": [],
    "errors": []
}

굵게 표시한 값이 {zone_identifier} 입니다.

DNS 레코드 업데이트

Update DNS Record – Cloudflare API Documentation 문서를 참고하여 진행 합니다.

드디어 DNS 레코드 업데이트를 위한 API를 호출할 수 있게 되었습니다. 앞에서 찾아낸 값들을 사용하여 호출 하도록 합니다.

PUT - https://api.cloudflare.com/client/v4
/zones/{zone_identifier}/dns_records/{identifier}

{zone_identifier} 과 {identifier} 항목에 우리가 찾은 적절한 값을 대입하여 아래와 같이 호출 합니다.

curl --request PUT \
  --url https://api.cloudflare.com/client/v4/zones/xxxxxxxxxxxxxxxxxxxxxxxxxzone_identifier/dns_records/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxidentifier \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer {API_토큰}' \
  --data '{
  "content": "111.111.111.111",
  "name": "www",
  "proxied": false,
  "type": "A",
  "comment": "Domain verification record",
  "ttl": 1
}'
클라우드 플레어 DNS 레코드 관리 화면
클라우드 플레어 DNS 레코드 관리 화면

위의 예시처럼 호출할 때 각 항목은 클라우드 플레어 DNS 레코드 관리 화면의 각 항목이 아래와 같이 매칭 됩니다.

API 호출 시 값DNS 레코드 관리 화면의 항목
content IP 주소
name이름. 위의 예시 에서는 www
proxied프록시 상태. false는 DNS 전용
type유형. A는 IP4, AAAA는 IP6
comment레코드 특성
ttlTTL 값. 자동 선택은 1 입력

이제 유동IP가 변경될 때, 또는 일정 시간 간격으로 IP를 업데이트 하는 API를 호출하는 프로그램을 만들어서 사용하면 됩니다.

클라우드 플레어에서 제공되는 다양한 API에 대한 자세한 정보는 Cloudflare API Documentation 문서를 참고 하시면 됩니다.

ddclient 사용

ddclient 프로그램을 사용하는 방법 입니다. GitHub – ddclient/ddclient: Ddclient updates dynamic DNS entries for accounts on a wide range of dynamic DNS services. 링크에서 ddclient에 대한 설치와 설정 방법에 대한 가이드를 찾을 수 있습니다. GitHub – ddclient에서는 소스를 다운로드 받아서 직접 빌드하여 설치하는 방법을 가이드하고 있습니다.

저는 직접 빌드 보다는 패키지 저장소에서 설치하는 방법을 선호하기 때문에 ddclient를 패키지 저장소에서 설치 하기로 합니다. 이 방법이 훨씬 간단 하거든요. 우분투 리눅스 기준으로 아래의 명령어로 간단하게 설치 됩니다.

$ sudo apt install ddclient

설치가 완료되면 설정 파일을 수정합니다. 수정해야 할 파일은 /etc/ddclient.conf 입니다.

# Configuration file for ddclient generated by debconf
#
# /etc/ddclient.conf

protocol=cloudflare \
use=web, web=https://api64.ipify.org/ \
login='클라우드 플레어 ID' \
password='클라우드 플레어 Global API Key' \
zone=signpen.net
www.signpen.net

login 항목은 클라우드 플레어 ID, password 항목은 클라우드 플레어 Global API Key 값을 넣어주면 됩니다. zone 항목은 IP주소를 업데이트 할 도메인 이름을 넣어 줍니다.

클라우드 플레어 Global API Key
클라우드 플레어 Global API Key

클라우드 플레어 Global API Key는 ‘내 프로필 > API 토큰’ 메뉴에서 확인할 수 있습니다.

설정이 완료 되었으면 아래 명령어로 ddclient 서비스를 재시작 해 줍니다.

$ sudo systemctl restart ddclient.service

이 후 클라우드 플레어에서 DNS의 IP 정보가 잘 업데이트 되는지 확인 하도록 합니다. ddclient는 300초 마다 한 번씩 IP 정보 업데이트를 수행하게 됩니다.

ddclient 관련 하여서는 Home page – ddclient docs 문서에서 더 많은 내용을 확인할 수 있습니다.

DNS-O-Matic 사용

DNS-O-Matic | Distribute dynamic IP changes to multiple services (dnsomatic.com) 서비스를 이용하는 방법 입니다.

DNS-O-Matic
DNS-O-Matic

DNS-O-Matic에 가입하여 아래 정보들을 세팅 해 주면 쉽게 사용이 가능한 것으로 보입니다.

Email: <CLOUDFLARE ACCOUNT EMAIL ADDRESS> (associated account must have sufficient privileges to manage DNS)
API Token: <CLOUDFLARE GLOBAL API KEY> (for details refer to API Keys)
Domain: <example.com>
Hostname: dynamic

다만 저는 세팅을 해 보지 않은 관계로 자세한 설정 방법은 생략 합니다.

이 후 DNS-O-Matic 서비스를 사용하게 되면 설정 내용을 보충 해 보도록 하겠습니다.

클라우드 플레어 dynamic ddns 여러 적용 방법 정리

클라우드 플레어에서 가이드 하는 ddns 설정 방법 3가지를 정리 해 보았습니다. DNS-O-Matic 관련 내용은 정리가 부족하니 실질 적으로는 2가지 방법을 정리 한 것이 되겠네요.

저는 두 번째 ddclient를 사용하는 방법으로 최종 세팅을 마쳤습니다. 지금도 잘 작동 하고 있고요.

클라우드 플레어에서 여러 방법을 지원하고 있으므로 필요에 따라 가장 적합한 방법을 사용하면 되겠습니다.


답글 남기기

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