가정 네트워크에서 웹사이트를 게시하고 공용 IP 주소를 가리키는 DNS 레코드를 만들었다고 가정해 보십시오. 공용 IP 주소가 변경될 때마다 DNS 레코드를 어떻게 업데이트할 수 있을까요? Cloudflare 동적 DNS를 설정하는 것을 고려해 보는 것이 좋습니다.
인터넷 서비스 제공업체(ISP)는 일반적으로 가입자에게 동적 IP 주소를 할당하며, 이는 언제든지 변경될 수 있습니다. 결과적으로 DNS 레코드는 더 이상 당신의 IP 주소를 가리키지 않고, 웹사이트에 접속할 수 없게 됩니다.
계속 읽어 나가면, 이 튜토리얼을 통해 Cloudflare의 응용 프로그래밍 인터페이스 (API)와 PowerShell을 사용하여 DNS 레코드를 업데이트하는 방법을 알 수 있습니다. 시작해 봅시다!
사전 준비 작업
이 튜토리얼을 실습하려는 경우 아래 요구 사항이 필요합니다.
- A computer with PowerShell 7.1 where you’ll run the Cloudflare dynamic DNS update script. This tutorial will use a Windows 10 computer.
- A script editor of your choice. This tutorial will use Visual Studio Code v1.59.1 (recommended).
- A domain that you already own. The example domain in this tutorial is lazyexchangeadmin.cyou.
무료 최상위 도메인(TLD)인 .ml, .ga, .tk, .cf, .gq는 Cloudflare 동적 DNS 자동화에 적용되지 않으며, 이 튜토리얼에서 작동하지 않습니다.
- A Cloudflare account. A free account is enough to use in this tutorial.
- 이미 Cloudflare에 도메인을 추가했어야 합니다.
- 이미 Cloudflare에서 도메인에 DNS 레코드를 추가했어야 합니다. 이 튜토리얼에서 사용할 DNS A 레코드는 초기 IP 주소가 0.0.0.0인 demo.lazyexchangeadmin.cyou입니다.

Cloudflare 동적 DNS란 무엇인가요?
DNS 레코드는 고정적이며 동적 IP 주소와는 잘 작동하지 않습니다. 이 문제를 해결하기 위해 동적 DNS를 설정해야 합니다. 다행히도, Cloudflare는 API를 제공하여 DNS 레코드를 프로그래밍적으로 관리할 수 있습니다.
Cloudflare 동적 DNS를 설정하려면, 네트워크 내의 클라이언트에서 두 가지 주요 작업을 수행하는 프로세스를 실행해야 합니다. 현재 네트워크의 공개 IP 주소를 가져오고 해당하는 DNS 레코드를 자동으로 업데이트합니다.
아래 이미지는 Cloudflare 동적 DNS 업데이트 흐름의 고수준 다이어그램을 보여줍니다.

다양한 동적 DNS 클라이언트를 설치할 수 있습니다. 대부분은 Ubuntu 서버나 Raspberry PI와 같은 Linux 시스템용입니다. 유료 또는 무료인 서드파티 동적 DNS 서비스도 있습니다. 그러나 이 튜토리얼에서는 PowerShell 7.1에서 실행되는 DNS 업데이터 스크립트를 배포할 것입니다.
Cloudflare API 토큰 가져오기
Cloudflare 동적 DNS 레코드를 프로그래밍 방식으로 업데이트할 때 스크립트는 Cloudflare API에 자신을 인증해야 합니다. 그렇지 않으면 Cloudflare은 계정의 DNS 레코드를 변경할 수 없게 됩니다.
Cloudflare은 목적에 충분한 권한을 갖는 API 토큰을 생성할 수 있도록 허용합니다. 이에 따라 Cloudflare 계정의 사용자 이름과 생성된 API 토큰을 사용하여 Cloudflare API에 인증할 수 있습니다.
Cloudflare API 토큰을 생성하려면 다음 단계를 따르십시오.
1. 브라우저를 열고 https://dash.cloudflare.com/login/으로 이동하여 Cloudflare 계정에 로그인합니다.
2. Cloudflare 대시보드에 로그인한 후 오른쪽 상단의 프로필 버튼을 클릭한 다음 내 프로필을 클릭합니다.

3. 다음으로 API 토큰 탭 링크를 클릭합니다. API 토큰 섹션에서 토큰 생성 버튼을 클릭합니다. 아래 예제는 아직 API 토큰을 생성하지 않은 것으로 가정합니다.

4. API 토큰 템플릿 목록에서 존 DNS 편집 템플릿을 클릭하여 사용하세요. 이 템플릿을 사용하면 계정의 모든 DNS 존 또는 선택한 DNS 존에 대한 편집 권한이 있는 API 토큰을 생성할 수 있습니다.

5. 토큰 생성 페이지의 존 자원 섹션에서 가장 오른쪽의 드롭다운 상자를 클릭하여이 API 토큰의 액세스에 포함 할 DNS 존을 선택하십시오. DNS 존을 선택한 후 요약으로 이동을 클릭하십시오.
선택 사항 : API 토큰의 유효 기간을 제한하려면 시작 날짜와 종료 날짜를 TTL 섹션 아래에 입력하십시오. 비워 두면 API 토큰에 만료 날짜가 없습니다.

6. 요약을 검토하고 API가 이전에 선택한 DNS 존에 대한 DNS:편집 권한이 있는지 확인하십시오. 마지막으로 토큰 생성을 클릭하여 API 토큰을 생성하십시오.

7. API 토큰을 생성 한 후 토큰 값을 복사하고 안전하게 보관하는지 확인하십시오. API 토큰을 비밀번호처럼 다루십시오.

8. API 토큰 탭으로 돌아가서 생성한 API 토큰이 있는지 확인하십시오.

클라우드플레어 동적 DNS 업데이트 스크립트 설정
이제 클라우드플레어 계정과 DNS 존을 편집할 수있는 클라우드플레어 API 토큰이 있습니다. 다음 단계는 무엇입니까? API 토큰을 사용하고 클라우드플레어 동적 DNS 레코드를 프로그래밍 방식으로 업데이트하는 스크립트와 통합해야합니다.
이 튜토리얼은 특히 클라우드플레어에서 DNS 레코드를 업데이트하기 위한 작동하는 PowerShell 스크립트를 제공합니다.
스크립트 저장
아래 단계를 따라 클라이언트 컴퓨터에 클라우드플레어 동적 DNS PowerShell 스크립트를 저장하세요.
1. 스크립트를 저장할 폴더를 결정하고 해당 폴더가 아직 없다면 만드세요. 이 예에서는 스크립트 위치가 C:\CloudflareDDNS에 있습니다.
2. VSCode와 같은 코드 편집기를 열고 Update-CloudflareDDNS.ps1
라는 새 PowerShell 스크립트 파일을 만드세요. 스크립트를 C:\CloudflareDDNS 폴더에 저장하세요.
3. 아래의 스크립트를 복사하여 코드 편집기에 붙여넣고 파일을 저장하세요. 스크립트가 수행하는 작업을 이해하려면 인라인 주석을 참조하세요.
스크립트 실행하기
클라우드플레어 동적 DNS 업데이트 스크립트를 저장했으므로, 다음 단계는 무엇인가요? 스크립트를 배포하기 전에 기능이 제대로 작동하는지 테스트하는 것이 중요합니다. 스크립트를 실행하려면 성공하기 위해 네 가지 세부 정보가 필요합니다. 이 정보들은 다음과 같습니다:
이메일
– 클라우드플레어 계정의 이메일 주소입니다.토큰
– 이전에 클라우드플레어 계정에서 생성한 API 토큰입니다.도메인
– 업데이트하려는 DNS 레코드를 포함하는 DNS 도메인 이름입니다. (예: lazyexchangeadmin.cyou).레코드
– 업데이트하려는 DNS 레코드입니다. (예: demo.lazyexchangeadmin.cyou).
스크립트를 실행하려면 다음과 같이 진행하십시오.
1. 먼저 PowerShell 세션을 엽니다. 또는 VSCode를 사용하는 경우 VSCode PowerShell 터미널을 대신 사용하십시오.
2. 다음으로 현재 DNS 레코드의 IP 주소를 확인하기 위해 DNS 레코드 조회를 수행합니다. 이를 위해 아래에서 볼 수 있는 Resolve-DnsName
cmdlet을 실행하십시오. -Name
매개변수와 함께 완전히 정규화된 도메인 이름 (FQDN)을 제공해야 합니다.
명령은 확인한 DNS 레코드와 해당 IP 주소를 반환해야 합니다.

3. 이제 다음 명령을 실행하여 Update-CloudflareDDNS.ps1
스크립트를 호출하여 Cloudflare의 DNS 레코드를 업데이트하십시오. Email
, Token
, Domain
, 및 Record
를 변경해야 합니다. 아래 명령은 스크립트가 C:\CloudflareDDNS\Update-CloudflareDDNS.ps1에 있는 것으로 가정합니다.
그런 다음 스크립트는 아래 스크린샷에서 볼 수 있는대로 다음 작업을 수행합니다.
- API 토큰을 확인합니다.
- 업데이트할 DNS 레코드가 포함된 도메인을 찾습니다.
- 업데이트할 DNS 레코드를 찾습니다.
- DNS 레코드 IP 주소를 실제 외부 또는 공용 IP 주소와 비교합니다.
- Cloudflare의 DNS 레코드 IP 주소를 업데이트합니다.
- 동적 DNS 업데이트 결과를 표시합니다.

4. Cloudflare 대시보드로 돌아가서 DNS 레코드가 새 IP 주소를 반영하는지 확인하십시오. 아래 스크린샷은 업데이트 스크립트를 실행한 후 IP 주소가 외부 IP 주소 값으로 변경된 것을 보여줍니다.

5. 마지막으로, 단계 2에서 수행한 것과 같이 다른 DNS 레코드 조회를 수행하여 새 IP 주소가 이미 공개적으로 전파되었는지 확인하십시오.
DNS 레코드 전파에는 몇 분, 몇 시간 또는 몇 일이 소요될 수 있습니다. 이 예에서는 Cloudflare 전파가 1분 미만이 소요되었습니다.

Cloudflare 동적 DNS 업데이트 작업 일정 설정
이 시점에서 클라우드플레어 동적 DNS 레코드를 업데이트하는 작동하는 스크립트가 있습니다. 그러나 매번 수동으로 스크립트를 실행하는 것은 목표가 아닙니다. 필요할 때마다 동적 DNS 업데이트가 자동으로 일정에 따라 실행되도록 해야합니다.
사용 중인 운영 체제에 따라 스크립트를 예약하여 실행하는 방법이 다릅니다. 예를 들어 리눅스에서는 cron 작업이 있습니다. 이 튜토리얼에서는 클라우드플레어 동적 DNS 업데이트 스크립트를 매 다섯 분마다 실행하는 Windows 예약 작업을 만듭니다.
예약 작업 작업 정의
예약된 작업에는 작업이 있어야합니다. 이는 New-ScheduledTaskAction
cmdlet을 실행하여 만들 수 있습니다. 이 예에서 작업은 PowerShell 실행 파일 pwsh.exe
을 사용하여 Update-CloudflareDDNS.ps1 스크립트를 실행하는 것입니다.
이를 위해 새 관리자 권한으로 PowerShell 창을 엽니다. 그런 다음 PowerShell에서 아래 코드를 복사하여 실행합니다. $scriptPath
, $Email,
$Token
, $Domain
, 및 $Record
변수를 변경해야합니다.
예약된 작업 트리거 생성
작업이 무엇을 수행할지 정의한 후에는 작업에 대한 트리거 또는 일정을 만들어야 합니다. 이를 위해 New-ScheduledTaskTrigger
cmdlet을 실행하여 작업을 위한 새로운 트리거를 생성합니다. 아래 코드를 복사하여 PowerShell에서 실행하여 10년 동안 매 5분마다 실행되는 새 작업 트리거를 만듭니다.
시스템에 새로운 예약된 작업 등록
마침내, 새로운 예약된 작업을 컴퓨터에 등록할 준비가 되었습니다. 이를 위해 아래의 코드와 같이 Register-ScheduledTask
cmdlet를 실행해야 합니다. 아래 코드를 복사하여 PowerShell에서 실행하여 예약된 작업을 등록하십시오.
생성된 예약된 작업은 로컬 SYSTEM 계정에서 실행됩니다. 필요한 경우 예약된 작업을 실행할 다른 사용자 계정을 할당하십시오.
아래에서 볼 수 있듯이, 명령이 예약된 작업을 생성하고 상태가 준비되었습니다. 이 시점부터 스크립트는 5분 간격으로 실행됩니다.

결론
동적 IP 주소 변경으로 DNS 레코드를 최신 상태로 유지하는 것은 어려운 일이 아닙니다. 또한 동적 DNS 서비스를 구독할 필요도 없습니다! Cloudflare에서 DNS 영역을 관리함으로써, 그들의 API를 활용하여 DNS 레코드를 프로그래밍적으로 업데이트할 수 있습니다.
이 튜토리얼에서는 API 호출, PowerShell 7, 그리고 예약된 작업의 조합을 사용하여 Cloudflare 동적 DNS 레코드를 업데이트하는 방법을 배웠습니다. 이 모든 것은 Cloudflare 동적 DNS 업데이트 메커니즘을 한 번 구성한 후에도 주기적으로 업데이트를 자동으로 실행할 수 있도록 해줍니다.
Cloudflare를 사용하여 DNS 영역을 관리하여 그들의 API의 혜택을 누려볼 생각이 있으신가요? 아니면 더 편리하고 접근 가능한 방법이 있을까요?
Source:
https://adamtheautomator.com/cloudflare-dynamic-dns/