MikroTik и CloudFlare: Динамический IP для домена
Нашёл скрипт реализации динамической смены IP адреса из #RouterOS напрямую в панели управления #CloudFlare при помощи API. Где нашёл скрипт уже не помню, вроде бы на страницах официального форума #MikroTik.
Скрипт я немного переделал, удалил лишние переменные, некоторые переопределил, подправил области видимости переменных, обновил метод авторизации скрипта на серверах #CloudFlare. Вроде работает.
Сам скрипт нужно настроить под себя, прописав в нём значения переменных. Некоторые значений можно узнать из панели управления доменом в #CloudFlare, но для получения значения переменной cfDnsID
необходимо выполнит немного телодвижений. Об этом ниже.
Работа CloudFlare API
Без токена - никак.
Создание токена
Для того, чтобы начать работать с #CloudFlare API, нам нужно создать специальный токен:
- Зайти в панель управления токенами.
- Нажать кнопку Create Token.
- На странице выбора шаблонов - выбрать шаблон Edit zone DNS.
- В разделе Zone Resources можно выбрать область доступа токена к зонам (доменам). Можно указать конкретную зону (Specific zone) или выбрать все зоны (All zones).
- Всё, нажимаем кнопку Continue to summary и перемещаемся на следующую станицу…
Проверка токена
По окончании создания токена, #CloudFlare переместит нас на страницу проверки токена. На этой странице будут наш созданный токен (его необходимо сохранить) и команда, которой при помощи утилиты curl
можно проверить корректность токена:
При выполнении, команда вернёт следующий результат:
|
|
По сообщению “This API Token is valid and active” понятно, что токен корректный и работает.
Получение ID ресурсной записи домена
Когда у нас есть токен, можно полноценно работать с #CloudFlare API. Нам нужно получить ID ресурсной записи домена. Получать будем следующей командой:
Обратите внимание на следующие заглушки в команде:
ZONE_ID
- ID домена. Находится в панели оправления доменом на главной странице в поле Zone ID.TOKEN
- токен для доступа к #CloudFlare API.
Вместо этих заглушек необходимо подставить свои значения.
Сформировав правильную команду с корректными данными и выполнив её, команда вернёт результат в формате JSON. Результат будет содержать набор всех ресурсных записей конкретного домена. У меня это выглядит так:
|
|
Как видим, команда вернула нам результат с массивом result
. В этом массиве находятся все ресурсные записи нашего домена. Каждая ресурсная запись содержит поля id
и content
:
id
- ID ресурсной записи. Очень важное поле, как раз его значение необходимо записать в переменнуюcfDnsID
скрипта.content
- содержимое ресурсной записи.
Нам необходимы только записи с типом A
. Обычно в записях с типом A
хранятся IP адреса серверов, к которым привязан домен. У записей с типом A
в поле content
находится IP адрес, который должен изменить наш #MikroTik при обращении к #CloudFlare API.
Скрипт
|
|
Настройка
Алгоритм настройки довольно прост:
- Получаем токен для работы с #CloudFlare API.
- При помощи специальной команды узнаём значение поля
id
ресурсной записи с типомA
. - Это значение вписываем в переменную
cfDnsID
скрипта. - Остальные требуемые значения для переменных уже доступны без каких-либо телодвижений.
Переменные
Опишу переменные и что они из себя представляют:
rosWanInterface
- имя интерфейса WAN в #RouterOS.rosCheckCert
- включение / отключение проверки цепочки сертификации при запросе к #CloudFlare API. Для корректной работы этой функции необходимо, чтобы в репозитории сертификатов #RouterOS присутствовали корневые сертификаты центров сертификации. Про импортирование сертификатов написано в заметке MikroTik: Добавление корневых сертификатов в RouterOS.cfToken
- токен, полученный в панели управления токенами.cfDomain
- название домена, для которого необходимо динамически менять IP адрес.cfZoneID
- ID домена. Находится в панели управления доменом на главной странице в поле Zone ID.cfDnsID
- ID ресурсной записи домена. Для получения значения переменной, необходимо выполнить запрос к #CloudFlare API.cfRecordType
- тип ресурсной записи домена. Обычно этоA
. Менять нет необходимости.cfDebug
- включение / отключение отображения технической информации в логе #RouterOS.
Рекомендую настраивать скрипт в редакторе с подсветкой синтаксиса, чтобы не ошибиться и не задеть какую-либо кавычку.
Установка
После настройки скрипта, его нужно добавить в репозиторий скриптов #RouterOS. Находится репозиторий в System / Scripts. При добавлении скрипта, необходимо выбрать политики read
, write
, test
, policy
.
Планировщик
Скрипт должен переодически запускаться для проверки и синхронизации IP адресов сервера и домена. В этом поможет планировщик #RouterOS. Заходим в System / Scheduler и создаём задачу с политиками read
, write
, test
, policy
. В поле On Event вписываем точное название скрипта, ранее добавленного в репозиторий #RouterOS.
Проверка
Проверить работу скрипта можно в репозитории по адресу System / Scripts. Выделив скрипт и нажав на кнопку Run, смотрим изменился ли IP адрес у домена в панели управления #CloudFlare.
2023-10-19
- Статья переписана под новые реалии работы с CloudFlare API.
- В статью добавлен код скрипта.
- Скрипт немного переделан, в частности, изменён процесс авторизации CloudFlare API.