Предположим, вы опубликовали веб-сайт из своей домашней сети и создали DNS-запись, указывающую на общедоступный IP-адрес вашего роутера. Как вы будете поддерживать актуальность вашей DNS-записи при изменении общедоступного IP-адреса? Возможно, вам стоит рассмотреть настройку динамического DNS от Cloudflare.
Поставщики интернет-услуг (ISP) обычно назначают своим абонентам динамические IP-адреса, которые могут меняться в любое время. В результате ваша DNS-запись остается указывать на IP-адрес, который больше не принадлежит вам, и ваш сайт становится недоступным.
Продолжайте читать, потому что этот учебник поможет вам поддерживать актуальность вашей DNS-записи с использованием интерфейса программирования приложений (API) Cloudflare и PowerShell. Давайте начнем!
Предварительные требования
Если вы планируете следовать этому учебнику практически, вот требования, которые вам потребуются.
- 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, не применимы для автоматизации динамического DNS от Cloudflare и не будут работать с этим учебником.
- A Cloudflare account. A free account is enough to use in this tutorial.
- Вы должны уже добавили ваш домен в Cloudflare.
- Вы должны уже добавили DNS-запись под вашим доменом в Cloudflare. DNS A запись в этом руководстве будет demo.lazyexchangeadmin.cyou с начальным IP-адресом 0.0.0.0.

Что такое Cloudflare Dynamic DNS?
DNS-записи по своей природе статичны и плохо сочетаются с динамическими IP-адресами. Теперь, чтобы решить эту проблему, вам нужно настроить динамический DNS. К счастью, Cloudflare предоставляет API, который позволяет управлять DNS-записями программно.
Чтобы настроить динамический DNS Cloudflare, вам нужно запустить процесс на клиенте внутри вашей сети, который выполняет два основных действия: получение текущего общедоступного IP-адреса вашей сети и автоматическое обновление соответствующей DNS-записи.
На рисунке ниже показана общая диаграмма того, как происходит обновление динамического DNS в Cloudflare.

Существует много клиентов динамического DNS, доступных для установки, в основном для систем Linux, таких как сервер Ubuntu или Raspberry PI. Также существуют сторонние сервисы динамического DNS, которые могут быть платными или бесплатными. Но в этом руководстве вы развернете скрипт обновления DNS, который работает на PowerShell 7.1.
Получение токена API Cloudflare
При программном обновлении динамической записи DNS в Cloudflare ваш скрипт должен аутентифицироваться в Cloudflare API. Только после этого Cloudflare позволит вам вносить изменения в DNS-записи вашей учетной записи.
Cloudflare позволяет создавать токены API с достаточными разрешениями для своего назначения. Затем вы можете использовать имя пользователя вашей учетной записи Cloudflare и полученный токен API для аутентификации в Cloudflare API.
Для создания токена API Cloudflare выполните следующие шаги.
1. Откройте ваш браузер, перейдите по адресу https://dash.cloudflare.com/login/ и войдите в свою учетную запись Cloudflare.
2. После входа в панель управления Cloudflare нажмите на кнопку профиля в верхнем правом углу и выберите Мой профиль.

3. Затем нажмите на вкладку Токены API. В разделе Токены API нажмите кнопку Создать токен. В данном примере предполагается, что вы еще не создали никаких токенов API.

4. На списке шаблонов токенов API нажмите на шаблон Редактировать зону DNS, чтобы использовать его. Этот шаблон позволяет создать токен API с правами редактирования для всех или выбранных DNS-зон в вашем аккаунте.

5. В разделе Ресурсы зоны на странице Создать токен нажмите на крайний правый выпадающий список и выберите DNS-зону, которую необходимо включить в доступ этого токена API. После выбора DNS-зоны нажмите Продолжить к обзору.
По желанию, чтобы ограничить срок действия токена API, заполните Дата начала и Дата окончания в разделе TTL. Если оставить пустым, у токена API не будет срока действия.

6. Проверьте обзор и убедитесь, что у API есть разрешение DNS:Редактирование для предварительно выбранной DNS-зоны. Наконец, нажмите Создать токен, чтобы создать токен API.

7. После создания токена API скопируйте его значение и обязательно сохраните его в безопасном месте. Обращайтесь к токену API так же, как к паролю.

8. Вернитесь на вкладку Токены API и подтвердите существование созданного вами токена API.

Настройка сценария обновления Cloudflare Dynamic DNS
Теперь у вас есть учетная запись Cloudflare и токен API Cloudflare с правами редактирования DNS-зоны. Что дальше? Вам нужно будет использовать токен API и интегрировать его с сценарием, который будет программно обновлять запись динамического DNS Cloudflare.
Этот учебник предоставляет вам рабочий сценарий PowerShell специально для обновления записи DNS в Cloudflare.
Сохранение сценария
Следуйте указанным ниже шагам, чтобы сохранить сценарий PowerShell для динамического DNS в Cloudflare на вашем клиентском компьютере.
1. Решите, в какую папку сохранить сценарий, и создайте эту папку, если она еще не существует. В этом примере местоположение сценария – C:\CloudflareDDNS.
2. Откройте ваш редактор кода, такой как VSCode, и создайте новый файл сценария PowerShell с именем Update-CloudflareDDNS.ps1
. Сохраните сценарий внутри папки C:\CloudflareDDNS.
3. Скопируйте нижеприведенный сценарий, вставьте его в ваш редактор кода и сохраните файл. Обратитесь к встроенным комментариям, чтобы понять, что делает сценарий.
Запуск сценария
Теперь, когда вы сохранили скрипт обновления динамического DNS Cloudflare, что дальше? Прежде чем развертывать скрипт, важно протестировать его функциональность. Для успешного запуска скрипта необходимы четыре детали:
Email
– это адрес электронной почты вашей учетной записи Cloudflare.Token
– токен API, который вы ранее создали в своей учетной записи Cloudflare.Domain
– имя DNS-домена, содержащее запись DNS, которую вы хотите обновить. (например, lazyexchangeadmin.cyou).Record
– запись DNS, которую вы хотите обновить. (например, demo.lazyexchangeadmin.cyou).
Для запуска скрипта выполните следующие шаги.
1. Во-первых, откройте сеанс PowerShell. Или, если вы используете VSCode, используйте терминал PowerShell в VSCode.
2. Затем выполните поиск записи DNS, чтобы подтвердить текущий IP-адрес записи DNS. Для этого выполните команду Resolve-DnsName
, как показано ниже. Убедитесь предоставить полностью квалифицированное доменное имя (FQDN) с параметром -Name
.
Команда должна вернуть запись DNS, которую вы искали, включая ее IP-адрес.

3. Теперь вызовите сценарий Update-CloudflareDDNS.ps1
, чтобы обновить запись DNS в Cloudflare, выполнив следующую команду. Убедитесь, что изменены Email
, Token
, Domain
и Record
. Эта команда предполагает, что ваш сценарий находится в C:\CloudflareDDNS\Update-CloudflareDDNS.ps1.
Затем сценарий выполняет следующие действия, как показано на скриншоте ниже.
- Проверяет правильность API-токена.
- Находит домен, содержащий запись DNS для обновления.
- Находит запись DNS для обновления.
- Сравнивает IP-адрес записи DNS с фактическим внешним или общедоступным IP-адресом.
- Обновляет IP-адрес записи DNS в Cloudflare.
- Отображает результат обновления динамического DNS.

4. Вернитесь на панель управления Cloudflare и проверьте, отражается ли запись DNS новым IP-адресом. На скриншоте ниже показано, что IP-адрес изменился на значение внешнего IP-адреса после выполнения сценария обновления.

5. Наконец, выполните еще один поиск записи DNS, как вы делали на шаге 2, чтобы подтвердить, был ли новый IP-адрес уже публично распространен.
Распространение записи DNS может занимать несколько минут, часов или даже дней. В этом примере распространение Cloudflare заняло менее минуты.

Планирование задачи обновления динамического DNS Cloudflare
В данный момент у вас есть рабочий сценарий, который обновляет запись динамического DNS Cloudflare. Однако запускать сценарий вручную каждый раз – не цель. Вы должны убедиться, что обновление динамического DNS выполняется автоматически по расписанию, так часто, как необходимо.
В зависимости от используемой операционной системы способы запуска сценария могут различаться, например, как задание cron в Linux. В этом руководстве будет создано запланированное задание Windows, которое запускает сценарий обновления динамического DNS Cloudflare каждые пять минут.
Определение действия запланированной задачи
У вашего запланированного задания должно быть действие, которое вы можете создать, запустив командлет New-ScheduledTaskAction
. В этом примере действие заключается в запуске сценария Update-CloudflareDDNS.ps1 с использованием исполняемого файла PowerShell pwsh.exe
.
Для этого откройте новое окно PowerShell с правами администратора. Затем скопируйте и выполните приведенный ниже код в PowerShell. Обязательно измените переменные $scriptPath
, $Email,
$Token
, $Domain
и $Record
.
Создание триггера запланированной задачи
После того как вы определили, что будет выполнять задача, вы должны создать триггер или расписание для задачи, запустив командлет New-ScheduledTaskTrigger
. Скопируйте код ниже и выполните его в PowerShell, чтобы создать новый триггер задачи, который будет запускаться каждые пять минут в течение десяти лет.
Регистрация новой запланированной задачи в системе
Наконец, вы готовы зарегистрировать новую запланированную задачу на компьютере. Для этого вам нужно выполнить командлет Register-ScheduledTask
, так же, как показано в коде ниже. Скопируйте код ниже и выполните его в PowerShell, чтобы зарегистрировать запланированную задачу.
Результатом будет запланированная задача, выполняющаяся от имени локальной учетной записи SYSTEM. Не стесняйтесь назначать другую учетную запись пользователя для выполнения запланированной задачи при необходимости.
Как видно ниже, команда создала запланированную задачу, и статус готовности отображается. С этого момента скрипт будет выполняться каждые пять минут.

Заключение
Поддерживать актуальность DNS-записей при изменении динамических IP-адресов не обязательно сложно. Вам даже не нужно платить за услугу динамического DNS! Управляя вашими DNS-зонами в Cloudflare, вы можете воспользоваться их API, что позволит вам программно обновлять ваши DNS-записи.
В этом учебном пособии вы узнали, как обновить динамическую DNS-запись Cloudflare с использованием комбинации вызовов API, PowerShell 7 и запланированных задач. Все это позволяет настроить ваш механизм обновления динамического DNS Cloudflare один раз и держать его в актуальном состоянии без участия пользователя.
Рассмотрите ли вы возможность управления вашими DNS-зонами с помощью Cloudflare, чтобы воспользоваться преимуществами его API? Или вы знаете более удобный и доступный способ?
Source:
https://adamtheautomator.com/cloudflare-dynamic-dns/