Суть обновления в том, что сервис Cloudflare начал требовать в новой версии API авторизацию через заголовки.
На ранних версиях ROS, нельзя было их передавать вовсе. После баталий на форуме прикрутили возможность отправлять один заголовок, но нам нужно минимум 3. На версии RouterOS 7.1 доступна возможность отправлять несколько заголовков одновременно.
Для начала нам нужно воспользоваться любой линуксовой машиной с териминалом, чтобы получить необходимые записи.
Нам нужен Global API Key, получить его можно тут
После чего, в терминале выполняем запрос к API
Код:[Выделить]curl -X GET "https://api.cloudflare.com/client/v4/zones?name=hd.zp.ua" -H "X-Auth-Email: ваша почта" -H "X-Auth-Key: ваш apikey" -H "Content-Type: application/json" Вы получите ответ, где нужно найти ваш «id«:»824d6c45707d99340fa03b0a04ea9664»
Далее, подставляем наш id в следующий запрос и получаем записи зоны
Код:[Выделить]curl -X GET "https://api.cloudflare.com/client/v4/zones/824d6c45707d99340fa03b0a04ea9664/dns_records?typ
e=A&page=1&per_page=100&order=type&direction=desc&match=all&
#34; \ -H "X-Auth-Email: ваша почта" \ -H "X-Auth-Key: Global API Key" \ -H "Content-Type: application/json"
Дальше вы получаете ответ с вашими записями зоны
Код:[Выделить]{"result":[{"id":"40f946775d6c698deb627v16c0d337a4",
34;zone_id":"824d6c45707d99340fa03b0a04ea9664","zone_name":"hd.zp.ua
","name":"субдомен.hd.zp.ua","type":"A",
Тут нам нужен id и zone_id
Теперь сам скрипт:
Код:[Выделить]######## Set and collect general variables ######### :global hostname "субдомен.hd.zp.ua" :global email "почта" :global resolvedIP "" :global externalIP "" :global WANInterface "ISP2" :global currentIP "" ######## Set CloudFlare variables ################# :local CFapikey "Global API Key" :local CFzones "824d6c45707d99340fa03b0a04ea9664" :local CFtdnsrecords "40f946775d6c698deb627v16c0d337a4" :local CFDebug "false" ######## Resolve and set IP-variables ########## /ip DNS cache flush :set currentIP [/ip address get [/ip address find interface=$WANInterface ] address]; :set externalIP [:pick $currentIP 0 [:find $currentIP "/"]]; :set resolvedIP [:resolve $hostname]; ######## Write debug info to log ################# :if ($CFDebug = "true") do={ :log info ("CF:hostname= $hostname resolvedIP= $resolvedIP externalIP= $externalIP") }; ######## Compare and update CF if necessary ##### :if ($resolvedIP != $externalIP) do={ :log info ("CF: Updating CF, setting $CFDomain = $externalIP") /tool fetch http-method=put url="https://api.cloudflare.com/client/v4/zones/$CFzones/dns_records/$CFtdnsrecords" http-header-field="X-Auth-Email:$email,X-Auth-Key:$CFapikey,Content-Type:application
/json" http-data="{\"type\":\"A\",\"name\":\&
#34;$hostname\",\"content\":\"$externalIP\",\"ttl\&
#34;:120,\"proxied\":false}" keep-result=no /ip DNS cache flush } else={ ###:log info "CF: No Update Needed!" }
Если сделали всё правильно, ставите скрипт в планировщик или дёргаете руками.