Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

🚀 Kuidas seadistada dünaamilist DNS-i Cloudflare'i kaudu Raspberry Pi-l

🚀 Kuidas seadistada dünaamilist DNS-i Cloudflare'i kaudu Raspberry Pi-l

Sinu koduserver Raspberry Pi töötab 24/7, aga teenusepakkuja vahetab välist IP-d iga päev. Uue aadressi käsitsi taga ajada on arheoloogi töö. Ning DynDNS ja No-IP pommitavad sind meilidega: „logi kord kuus sisse, muidu lülitame su tasuta konto välja."

Tuleb välja, et Cloudflare saab toimida dünaamilise DNS-ina, ilma reklaamimeilideta, ilma uuendussageduse piiranguteta ja ilma kolmanda osapoole alamdomeenideta. Sul on juba domeen Cloudflare peal? Siis on vaja ainult API võtit ja bash skripti Raspberry Pi-s. Poole tunniga paned paika skeemi, mis uuendab A-kirjet automaatselt iga kord, kui IP muutub.

Ja kui sa ei taha lihtsalt „konsooli pääseda", vaid üles seada täisväärtusliku arendussaiti, isegi WordPressi baasil, siis see seadistus on vundamendiks: saad oma serverile ligi kõikjalt maailmast viisaka alamdomeeni nagu home.example.com kaudu.

💡 Kiire ülevaade:

  • 1. samm: Loo Cloudflare’i DNS-paneelis A-kirje test-IP-ga 0.0.0.0
  • 2. samm: Hangi API võti (mitte globaalne võti, võtmed on turvalisemad ja ühe klõpsuga tühistatavad)
  • 3. samm: Käivita bash skript, mis küsib hetke IP ja saadab selle Cloudflare’i API-le
  • 4. samm: Seadista cron töö ja unusta käsitsi uuendamine igaveseks

Mida sul vaja läheb

  • Cloudflare’i lisatud ja nende DNS-i kaudu hallatav domeen
  • Raspberry Pi (ükskõik milline mudel sobib, Pi 3, Pi 4, Pi Zero 2 W) koos Raspbiani või Raspberry Pi OS-iga
  • Staatiline kohalik IP Raspberry Pi jaoks (seadistatud OS-i graafilises liideses või ruuteri kaudu)
  • Terminaliühendus Pi-ga SSH või otse kaudu

Milliseid teenuseid sa täpselt Raspberry Pi-s majutad ja kuidas ruuteris porte suunad, on eraldi teema, mis jääb sellest õpetusest välja. Skeem töötab identselt nii veebiserveri puhul, kus on WordPress, VNC-juurdepääsu kui ka valvekaamera puhul.

1. Loo A-kirje oma koduserverile

Vali alamdomeen, sellest saab sinu püsiv sisenemispunkt. Mina kasutan home, aga sina võid valida ükskõik millise: dev, lab, cam.

  • Mine Cloudflare’i armatuurlauale ja vali oma domeen
  • Liigu DNS vahekaardile
  • Klõpsa Lisa kirje, tüüp A
  • Väljale Nimi sisesta alamdomeen (näiteks home)
  • Väljale **IPv4 **aadress määra 0.0.0.0, ajutiselt, et hiljem skripti testida
  • Jäta Proksi olek välja lülitatuks (hall pilv), vahemällu salvestamist ja proksit pole DDNS-i jaoks vaja
A-kirjega kodu test-IP-ga 0.0.0.0 Cloudflare DNS-is

Kirje on valmis. Nüüd hangime API ligipääsuvõtme.

2. Hangi Cloudflare’i API võti

Varem soovitasid kõik juhendid globaalset API võtit, mis annab täieliku ligipääsu kõigile konto domeenidele. See on ohtlik: kui võti lekib, lekib kõik. Nüüd soovitab Cloudflare API võtmeid granulaarsete õigustega. Võtit saab piirata konkreetse domeeni ja tegevusega ning kompromiteerimise korral ühe klõpsuga tühistada.

  • Cloudflare’i armatuurlaual mine: Minu profiilAPI võtmed
  • Klõpsa Loo võti
  • Vali mall Muuda tsooni DNS-i (või loo kohandatud)
  • Jaotises Tsooni ressursid määra konkreetne domeen, millele DDNS-i seadistad
  • Klõpsa Jätka kokkuvõtteleLoo võti
  • Kopeeri võti, seda näidatakse ainult üks kord

Võti näeb välja nagu pikk sõne, mis algab tähtedega cfut_. Hoia seda turvalises kohas, Raspberry Pi skript vajab seda kohe.

3. Automaatse uuendamise skript Raspberry Pi-s

Ühendu Raspberry Pi-ga SSH kaudu või ava terminal. Loome skripti jaoks kausta:

1mkdir -p ~/cf && cd ~/cf

Nüüd skript ise. Loo fail cloudflare-ddns.sh:

1nano ~/cf/cloudflare-ddns.sh

Kopeeri sinna järgmine kood:

1#!/bin/bash
2
3 ## Settings (replace with yours)
4AUTH_EMAIL="[email protected]"
5API_TOKEN="cfut_your_token"
6ZONE_NAME="example.com"
7RECORD_NAME="home.example.com"
8
9 ## Get current public IP
10CURRENT_IP=$(curl -s https://api.ipify.org)
11
12 ## Get Zone ID
13ZONE_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 ## Get Record ID and current record IP
18RECORD=$(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
22RECORD_ID=$(echo "$RECORD" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
23DNS_IP=$(echo "$RECORD" | grep -o '"content":"[^"]*"' | head -1 | cut -d'"' -f4)
24
25 ## Update record if IP changed
26if [ "$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
33else
34 echo "$(date): IP unchanged ($CURRENT_IP)" >> ~/cf/cloudflare-ddns.log
35fi

Asenda neli muutujat plokis „Settings" oma tegelike väärtustega. E-post, sama, millega Cloudflare’i logid sisse. Token, see, mille kopeerisid 2. sammus. Tsooni nimi, sinu domeen ilma http://-ita. Kirje nimi, täielik alamdomeen.

Salvesta fail (nanos Ctrl+O, Enter, Ctrl+X) ja tee see käivitatavaks:

1chmod +x ~/cf/cloudflare-ddns.sh

Käivita käsitsi kontrollimiseks:

1~/cf/cloudflare-ddns.sh

Kui kõik on õigesti seadistatud, mine Cloudflare’i DNS-paneeli, A-kirje IP-aadress peaks muutuma 0.0.0.0-lt sinu tegelikuks avalikuks IP-ks. Logi kirjutatakse faili ~/cf/cloudflare-ddns.log, vaata sealt, kui midagi läks valesti.

4. Automatiseerimine croniga

Käsitsi käivitamine on ainult testimiseks. Siit edasi võtab cron üle.

1crontab -e

Kui süsteem küsib, millist redaktorit valida, vali nano (tavaliselt number 2, see on kõige lihtsam). Lisa faili lõppu rida:

10 */6 * * * /bin/bash /home/pi/cf/cloudflare-ddns.sh

See kirje käivitab skripti iga 6 tunni järel. Isegi kui teenusepakkuja vahetab IP-d kord paari kuu jooksul, on kuuetunnine aken mõistlik kompromiss ajakohasuse ja API koormuse vahel.

Kui soovid sagedamini, asenda */30 * * * *-ga (iga 30 minuti järel). Kuid pea meeles: Cloudflare’i API tasuta limiit on 1200 päringut minutis, nii et isegi iga minuti tagant tehtavad päringud ei ole ühe domeeni puhul probleemiks.

Salvesta (Ctrl+X, Y, Enter). Cron võtab muudatused automaatselt kasutusele, teenust pole vaja taaskäivitada. Abi tärnide dešifreerimiseks leiad saidilt crontab.guru.

Lühike videojuhend samal teemal NetworkChuckilt koos demonstratsiooniga päris Raspberry Pi peal ja iga sammu selgitusega:

Mida teha, kui skript ei leidnud tsooni ID-d ega kirje ID-d

Mõnikord ei tagasta API identifikaatoreid automaatselt, eriti kui kontol on palju domeene või sarnaste nimedega kirjeid. Sel juhul hangi need käsitsi:

  • Mine Cloudflare’i armatuurlauale, vali domeen, DNS-kaart
  • Ava brauseri arendajatööriistad (F12Network-kaart → XHR alamkaart)
  • Klõpsa oma A-kirje kõrval olevat pilveikooni, võrgupaneeli ilmub päring API-le
  • Paremklõps sellel → CopyCopy link address (Chrome) või Copy URL (Firefox)
  • Kopeeritud lingist leia osa pärast zones/, see on tsooni ID, ja pärast dns_records/, see on kirje ID

Asenda need skriptis muutujatesse ZONE_ID ja RECORD_ID ning kõik töötab. Veendu, et DNS-paneelis olev pilv on hall (proxy väljas): Cloudflare ei tohiks DDNS-i jaoks IP-d puhverdada.

⁉️🤔 Korduma kippuvad küsimused

Kas API tokeni kasutamine globaalse võtme asemel on kohustuslik?

Globaalne võti töötab endiselt, kuid token on kaasaegne ja turvaline valik. Tokenit saab piirata ühe domeeni ja DNS-i muutmise õigustega. Globaalne võti annab ligipääsu kogu kontole. Kui skript või Raspberry Pi satub ohtu, tühistad lihtsalt tokeni, samas kui võtit peaksid igal pool muutma.

Kuidas see lähenemine erineb DuckDNS-ist või No-IP-st?

Kolmanda osapoole DDNS-teenused annavad kolmanda taseme alamdomeeni nagu myhome.duckdns.org. Cloudflare’i lähenemine kasutab sinu enda domeeni (home.example.com), see näeb professionaalsem välja, ei sõltu kellegi teise teenusest ega nõua igakuist sisselogimist aktiivsuse kinnitamiseks. Lisaks saad ligipääsu kogu Cloudflare’i ökosüsteemile: DDoS-kaitse, SSL-sertifikaadid, tulemüürireeglid.

Kas ma pean ruuteris porte edasi suunama?

Jah, et Raspberry Pi-le internetist ligi pääseda. DDNS tagab ainult selle, et domeen osutab alati kehtivale IP-le. Kuid selleks, et liiklus sellelt IP-lt Pi-ni jõuaks, pead ruuteris seadistama pordi edastamise vajalikele portidele (22 SSH jaoks, 80/443 veebi jaoks jne).

Mida teha, kui Raspberry Pi on teenusepakkuja NAT-i taga?

Mõned teenusepakkujad kasutavad operaatoritaseme NAT-i (CGNAT), siis ei ole sul oma avalikku IP-d ja DDNS-ist pole abi. Lahendus: küsi teenusepakkujalt valget IP-d (sageli tasuta soovi korral) või kasuta Cloudflare Tunnelit, mis loob krüpteeritud kanali Pi-st Cloudflare’i ilma pordi edastamiseta.

Kui palju see lahendus maksab?

Null. Cloudflare’i DNS on tasuta piiramatutele A-kirjetele. Raspberry Pi oled juba ostnud. Pi 3/4 voolutarve koormuse all on umbes 3-5 W, aastas teeb see umbes 250-400 dollarit.

Kas ma saan uuendada mitut alamdomeeni?

Jah, dubleeri plokid muutujatega RECORD_NAME ja DNS_IP skriptis iga alamdomeeni jaoks või mähi loogika tsüklisse üle nimede massiivi.

Dünaamiline DNS Cloudflare'is: mida 2026. aastal seadistada

Cloudflare'i API ja croniga skeem on üle elanud mitu Raspberry Pi põlvkonda ega ole oma aktuaalsust kaotanud. Saad oma alamdomeeni, ei sõltu kolmandate osapoolte DDNS-teenuse pakkujatest ega maksa sentigi.

Kui soovid kaugemale minna, vaata valmis Dockeri tõmmiseid: oznu/cloudflare-ddns uuendab IP-d iga 5 minuti järel ja seda seadistatakse keskkonnamuutujate kaudu. Neile, kes eelistavad Pythonit, on olemas aribasadme/rpi-cloudflare-ddns, mis on kohandatud spetsiaalselt Raspberry Pi jaoks.

Peamine, mille sa täna tegid: Raspberry Pi on nüüd kättesaadav kõikjalt maailmast püsival aadressil. Ja see on alus kõigele: alates WordPressi arendusserverist kuni sinu enda pilvesalvestuseni.

🔗 Cloudflare'i DNS API dokumentatsioon