
🚀 Як налаштувати динамічний DNS через Cloudflare на Raspberry Pi
Ваш домашній сервер на Raspberry Pi працює цілодобово, але провайдер змінює зовнішню IP щодня. Стукати за новою адресою вручну, заняття для археолога. А DynDNS і No-IP задовбали листами: «зайдіть раз на місяць, інакше вимкнемо безплатний акаунт».
Виявляється, Cloudflare вміє працювати як динамічний DNS, без рекламних розсилок, без обмежень за частотою оновлень і без сторонніх піддоменів. У вас уже є домен на Cloudflare? Тоді все, що потрібно,, API-токен і bash-скрипт на Raspberry Pi. За пів години піднімаєте схему, яка сама оновлює A-запис за кожної зміни IP.
А якщо хочеться не просто «потрапити в консоль», а розгорнути повноцінний сайт для розробки, на тому ж WordPress, ця зв'язка стає фундаментом: ви отримуєте доступ до свого сервера з будь-якої точки світу за гарним піддоменом на кшталт home.example.com.
💡 Швидкий огляд:
- Крок 1: Створюємо A-запис у DNS-панелі Cloudflare з тестовою IP
0.0.0.0 - Крок 2: Отримуємо API-токен (не глобальний ключ, токен безпечніший і відкликається в один клік)
- Крок 3: Запускаємо bash-скрипт, який опитує поточну IP і пушить її в Cloudflare API
- Крок 4: Ставимо завдання cron і забуваємо про ручне оновлення назавжди
Що знадобиться
- Домен, доданий у Cloudflare і керований через їхній DNS
- Raspberry Pi (підійде будь-яка модель, Pi 3, Pi 4, Pi Zero 2 W) з Raspbian або Raspberry Pi OS
- Статична локальна IP для Raspberry Pi (налаштовується в GUI ОС або через роутер)
- Доступ до термінала Pi через SSH або напряму
Які саме сервіси ви хостите на Raspberry Pi і як прокидаєте порти на роутері, окрема тема, що виходить за межі цього туторіалу. Схема працює однаково що для вебсервера з WordPress, що для VNC-доступу або камери спостереження.
1. Створюємо A-запис для домашнього сервера
Придумайте піддомен, він стане постійною точкою входу. Я використовую home, але ви можете обрати будь-який: dev, lab, cam.
- Зайдіть у дашборд Cloudflare і виберіть домен
- Перейдіть на вкладку DNS
- Натисніть Add record, тип, A
- У полі Name введіть піддомен (наприклад,
home) - У полі **IPv4 **address вкажіть
0.0.0.0, тимчасово, щоб перевірити роботу скрипта пізніше - Залиште Proxy status вимкненим (сіра хмаринка), кешування і проксі для DDNS не потрібні

Запис готовий. Тепер отримаємо ключ доступу до API.
2. Отримуємо API-токен Cloudflare
Раніше всі інструкції пропонували глобальний API-ключ, він дає повний доступ до всіх доменів акаунта. Це небезпечно: витече ключ, витече все. Зараз Cloudflare рекомендує API-токени з гранулярними правами. Токен можна обмежити конкретним доменом і дією, а в разі компрометації, відкликати одним натисканням.
- У дашборді Cloudflare перейдіть: My Profile → API Tokens
- Натисніть Create Token
- Виберіть шаблон Edit zone DNS (або створіть кастомний)
- У розділі Zone Resources вкажіть конкретний домен, той, для якого налаштовуєте DDNS
- Натисніть Continue to summary → Create Token
- Скопіюйте токен, він показується лише один раз
Токен має вигляд довгого рядка, що починається з cfut_. Зберігайте його в безпечному місці, скрипту на Raspberry Pi він знадобиться за хвилину.
3. Скрипт автооновлення на Raspberry Pi
Підключіться до Raspberry Pi через SSH або відкрийте термінал. Створимо теку для скрипта:
1 mkdir -p ~/cf && cd ~/cf
Тепер, сам скрипт. Створіть файл cloudflare-ddns.sh:
1 nano ~/cf/cloudflare-ddns.sh
Скопіюйте в нього наступний код:
1 #!/bin/bash 2 3 ## Настройки (замените на свои) 4 AUTH_EMAIL="[email protected]" 5 API_TOKEN="cfut_ваш_токен" 6 ZONE_NAME="example.com" 7 RECORD_NAME="home.example.com" 8 9 ## Получаем текущий публичный IP 10 CURRENT_IP=$(curl -s https://api.ipify.org) 11 12 ## Получаем Zone ID 13 ZONE_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$ZONE_NAME" \ 14 -H "Authorization: Bearer $API_TOKEN" \ 15 -H "Content-Type: application/json" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4) 16 17 ## Получаем Record ID и текущий IP записи 18 RECORD=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME" \ 19 -H "Authorization: Bearer $API_TOKEN" \ 20 -H "Content-Type: application/json") 21 22 RECORD_ID=$(echo "$RECORD" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4) 23 DNS_IP=$(echo "$RECORD" | grep -o '"content":"[^"]*"' | head -1 | cut -d'"' -f4) 24 25 ## Обновляем запись, если IP изменился 26 if [ "$CURRENT_IP" != "$DNS_IP" ]; then 27 UPDATE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \ 28 -H "Authorization: Bearer $API_TOKEN" \ 29 -H "Content-Type: application/json" \ 30 --data "{\"type\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$CURRENT_IP\",\"ttl\":120}") 31 32 echo "$(date): IP changed from $DNS_IP to $CURRENT_IP — updated" >> ~/cf/cloudflare-ddns.log 33 else 34 echo "$(date): IP unchanged ($CURRENT_IP)" >> ~/cf/cloudflare-ddns.log 35 fi
Замініть чотири змінні в блоці «Налаштування» на свої реальні значення. Email, той самий, що й для входу в Cloudflare. Токен, той, що скопіювали на кроці 2. Назва зони, ваш домен без http://. Ім'я запису, повний піддомен.
Збережіть файл (Ctrl+O, Enter, Ctrl+X у nano) і зробіть його виконуваним:
1 chmod +x ~/cf/cloudflare-ddns.sh
Запустіть вручну для перевірки:
1 ~/cf/cloudflare-ddns.sh
Якщо все налаштовано правильно, зайдіть у DNS-панель Cloudflare: IP-адреса A-запису має змінитися з 0.0.0.0 на вашу реальну публічну IP. Лог пишеться в ~/cf/cloudflare-ddns.log, зазирніть туди, якщо щось пішло не так.
4. Автоматизація через cron
Ручний запуск, лише для перевірки. Далі працює cron.
1 crontab -e
Якщо система попросить вибрати редактор, беріть nano (зазвичай під номером 2, він найпростіший). Додайте рядок у кінець файлу:
1 0 */6 * * * /bin/bash /home/pi/cf/cloudflare-ddns.sh
Цей запис запускає скрипт кожні 6 годин. Навіть якщо провайдер змінює IP раз на кілька місяців, шестигодинне вікно — це розумний компроміс між актуальністю та навантаженням на API.
Якщо хочете частіше, замініть на */30 * * * * (кожні 30 хвилин). Але пам'ятайте: безплатний ліміт Cloudflare API, 1200 запитів на хвилину, тож навіть щохвилинний виклик не страшний для одного домену.
Збережіть (Ctrl+X, Y, Enter). Cron підхопить зміни автоматично, перезавантажувати службу не потрібно. Розібратися з розшифруванням зірочок допоможе crontab.guru.
Коротка відеоінструкція на цю ж тему від NetworkChuck із демонстрацією на реальному Raspberry Pi та поясненням кожного кроку:
Що робити, якщо скрипт не знайшов Zone ID або Record ID
Іноді API не повертає ідентифікатори автоматично, особливо якщо в акаунті багато доменів або записів зі схожими іменами. Тоді отримайте їх вручну:
- Зайдіть у дашборд Cloudflare, виберіть домен, вкладку DNS
- Відкрийте інструменти розробника в браузері (
F12→ вкладка Network → підвкладка XHR) - Натисніть на значок хмари поруч із вашим A-записом, у мережевій панелі з'явиться запит до API
- Клацніть по ньому правою кнопкою → Copy → Copy link address (Chrome) або Copy URL (Firefox)
- У скопійованому посиланні знайдіть частину після
zones/— це Zone ID, післяdns_records/, Record ID
Підставте їх у змінні ZONE_ID та RECORD_ID у скрипті, і все запрацює. Переконайтеся, що хмара в DNS-панелі сіра (проксі вимкнено): Cloudflare не повинен кешувати IP для DDNS.
⁉️🤔 Часті питання
Чи обов'язково використовувати API-токен, а не глобальний ключ?
Глобальний ключ досі працює, але токен — це сучасний і безпечний варіант. Токен можна обмежити одним доменом і правом на редагування DNS. Глобальний ключ дає доступ до всього акаунту. Якщо скрипт або Pi скомпрометовані, токен ви просто відкликаєте, а ключ довелося б міняти всюди.
Чим цей підхід відрізняється від DuckDNS або No-IP?
Сторонні DDNS-сервіси дають піддомен третього рівня на кшталт
myhome.duckdns.org. Підхід із Cloudflare використовує ваш власний домен (home.example.com) — це виглядає професійніше, не залежить від чужого сервісу та не потребує щомісячного заходу для підтвердження активності. Плюс ви отримуєте доступ до всієї екосистеми Cloudflare: захист від DDoS, SSL-сертифікати, правила фаєрволу.
Чи потрібно пробрасувати порти на роутері?
Так, щоб достукатися до Raspberry Pi з інтернету. DDNS лише гарантує, що домен завжди вказує на актуальний IP. А щоб трафік із цього IP потрапив на Pi, потрібно налаштувати port forwarding на роутері для потрібних портів (22 для SSH, 80/443 для вебу тощо).
Що робити, якщо Raspberry Pi за NAT провайдера?
Деякі провайдери використовують Carrier-Grade NAT (CGNAT), тоді у вас немає власної публічної IP і DDNS не допоможе. Рішення: запросити у провайдера білу IP (часто це безплатно за заявкою) або використати Cloudflare Tunnel, він створює зашифрований канал від Pi до Cloudflare без пробросу портів.
Скільки коштує таке рішення?
Нуль. Cloudflare DNS безплатний для необмеженої кількості A-записів. Raspberry Pi ви вже купили. Споживання електрики Pi 3/4 під навантаженням, близько 3-5 Вт, на рік це приблизно 250-400 $.
Чи можна оновлювати кілька піддоменів?
Так, дублюйте блоки з
RECORD_NAMEіDNS_IPу скрипті для кожного піддомену або обгорніть логіку в цикл за масивом імен.
Динамічний DNS на Cloudflare: що ставити у 2026 році
Схема з Cloudflare API і cron пережила вже кілька поколінь Raspberry Pi й не втратила актуальності. Ви отримуєте власний піддомен, не залежите від сторонніх DDNS-провайдерів і не платите жодної копійки.
Якщо хочеться піти далі, подивіться в бік готових Docker-образів: oznu/cloudflare-ddns оновлює IP кожні 5 хвилин і налаштовується через змінні середовища. Для тих, хто віддає перевагу Python, є aribasadme/rpi-cloudflare-ddns, заточений спеціально під Raspberry Pi.
Головне, що ви зробили сьогодні: Raspberry Pi тепер доступний із будь-якої точки світу за постійною адресою. А це, фундамент для чого завгодно: від dev-сервера WordPress до власного хмарного сховища.



