
🚀 Slik setter du opp dynamisk DNS via Cloudflare på Raspberry Pi
Hjemmeserveren din på Raspberry Pi går 24/7, men internettleverandøren din endrer den eksterne IP-en hver dag. Å manuelt oppsøke den nye adressen er en jobb for en arkeolog. Og DynDNS og No-IP bombarderer deg med e-poster: «logg inn én gang i måneden, ellers deaktiverer vi gratiskontoen din.»
Det viser seg at Cloudflare kan fungere som dynamisk DNS, uten reklame-e-poster, uten begrensninger på oppdateringsfrekvens og uten tredjeparts underdomener. Har du allerede et domene på Cloudflare? Da trenger du bare et API-token og et bash-skript på Raspberry Pi. På en halvtime setter du opp et opplegg som automatisk oppdaterer A-recorden hver gang IP-en endres.
Og hvis du ikke bare vil «inn i konsollen», men sette opp et fullverdig utviklingsnettsted, til og med på WordPress, blir dette oppsettet grunnlaget: du får tilgang til serveren din fra hele verden via et fint underdomene som home.example.com.
💡 Rask oversikt:
- Steg 1: Opprett en A-record i Cloudflares DNS-panel med test-IP
0.0.0.0 - Steg 2: Skaff et API-token (ikke en global nøkkel, tokens er sikrere og kan tilbakekalles med ett klikk)
- Steg 3: Kjør et bash-skript som slår opp gjeldende IP og sender den til Cloudflare API
- Steg 4: Sett opp en cron-jobb og glem manuelle oppdateringer for alltid
Hva du trenger
- Et domene lagt til Cloudflare og administrert via deres DNS
- Raspberry Pi (alle modeller fungerer, Pi 3, Pi 4, Pi Zero 2 W) med Raspbian eller Raspberry Pi OS
- Statisk lokal IP for Raspberry Pi (konfigurert i OS-grensesnittet eller via ruter)
- Terminaltilgang til Pi via SSH eller direkte
Nøyaktig hvilke tjenester du hoster på Raspberry Pi og hvordan du videresender porter på ruteren er et separat tema utenfor denne veiledningen. Opplegget fungerer likt enten det er for en webserver med WordPress, VNC-tilgang eller et overvåkningskamera.
1. Opprett en A-record for hjemmeserveren din
Velg et underdomene, det blir ditt faste inngangspunkt. Jeg bruker home, men du kan velge hva som helst: dev, lab, cam.
- Gå til Cloudflare dashboard og velg domenet ditt
- Naviger til DNS-fanen
- Klikk Legg til record, velg type A
- I Navn-feltet skriver du inn underdomenet (for eksempel
home) - I IPv4-adressefeltet angir du
0.0.0.0, midlertidig, for å teste skriptet senere - La Proxy status være av (grå sky), caching og proxy er ikke nødvendig for DDNS

Recorden er klar. La oss nå skaffe API-tilgangsnøkkelen.
2. Skaff Cloudflare API-token
Tidligere anbefalte alle guider den globale API-nøkkelen, som gir full tilgang til alle kontodomener. Dette er farlig: hvis nøkkelen lekker, lekker alt. Nå anbefaler Cloudflare API-tokens med granulære tillatelser. Et token kan begrenses til et spesifikt domene og en handling, og ved kompromittering kan det tilbakekalles med ett klikk.
- I Cloudflare-dashboardet går du til: Min profil → API-tokens
- Klikk Opprett token
- Velg malen Rediger sone-DNS (eller opprett en tilpasset)
- I Sone-ressurser-delen angir du det spesifikke domenet du konfigurerer DDNS for
- Klikk Fortsett til oppsummering → Opprett token
- Kopier tokenet, det vises kun én gang
Tokenet ser ut som en lang streng som starter med cfut_. Oppbevar det på et trygt sted, skriptet på Raspberry Pi trenger det om et øyeblikk.
3. Skript for automatisk oppdatering på Raspberry Pi
Koble til Raspberry Pi via SSH eller åpne terminal. La oss opprette en mappe for skriptet:
1 mkdir -p ~/cf && cd ~/cf
Så selve skriptet. Opprett filen cloudflare-ddns.sh:
1 nano ~/cf/cloudflare-ddns.sh
Kopier følgende kode inn i den:
1 #!/bin/bash 2 3 ## Settings (replace with yours) 4 AUTH_EMAIL="[email protected]" 5 API_TOKEN="cfut_your_token" 6 ZONE_NAME="example.com" 7 RECORD_NAME="home.example.com" 8 9 ## Get current public IP 10 CURRENT_IP=$(curl -s https://api.ipify.org) 11 12 ## Get 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 ## Get Record ID and current record 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 ## Update record if IP changed 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
Erstatt de fire variablene i «Settings»-blokken med dine faktiske verdier. E-post, den samme som for Cloudflare-innlogging. Token, den du kopierte i steg 2. Sone-navn, domenet ditt uten http://. Oppføringsnavn, hele subdomenet.
Lagre filen (Ctrl+O, Enter, Ctrl+X i nano) og gjør den kjørbar:
1 chmod +x ~/cf/cloudflare-ddns.sh
Kjør manuelt for å sjekke:
1 ~/cf/cloudflare-ddns.sh
Hvis alt er riktig konfigurert, gå til Cloudflare DNS-panelet, så skal IP-adressen i A-oppføringen endres fra 0.0.0.0 til din faktiske offentlige IP. Loggen skrives til ~/cf/cloudflare-ddns.log, sjekk der hvis noe gikk galt.
4. Automatisering via cron
Manuell kjøring er kun for testing. Herfra tar cron over.
1 crontab -e
Hvis systemet ber deg velge et redigeringsprogram, velg nano (vanligvis nummer 2, det er det enkleste). Legg til en linje på slutten av filen:
1 0 */6 * * * /bin/bash /home/pi/cf/cloudflare-ddns.sh
Denne oppføringen kjører skriptet hver 6. time. Selv om internettleverandøren bytter IP bare noen få ganger i måneden, er et seks-timers vindu et fornuftig kompromiss mellom aktualitet og API-belastning.
Hvis du vil ha det oftere, erstatt med */30 * * * * (hvert 30. minutt). Men husk: Cloudflare API sin gratisgrense er 1200 forespørsler per minutt, så selv kall hvert minutt er uproblematisk for ett domene.
Lagre (Ctrl+X, Y, Enter). Cron fanger opp endringer automatisk, du trenger ikke å starte tjenesten på nytt. Hjelp til å dekode stjernene finner du på crontab.guru.
Kort videoguide om samme tema, fra NetworkChuck, med demonstrasjon på ekte Raspberry Pi og forklaring av hvert steg:
Hva gjør du hvis skriptet ikke fant sone-ID eller oppførings-ID
Noen ganger returnerer ikke API-et identifikatorene automatisk, spesielt hvis kontoen har mange domener eller oppføringer med lignende navn. Hent dem da manuelt:
- Gå til Cloudflare-dashbordet, velg domenet, DNS-fanen
- Åpne nettleserens utviklerverktøy (
F12→ Nettverk-fanen → XHR-underfanen) - Klikk på sky-ikonet ved siden av A-oppføringen din, så dukker det opp en forespørsel til API-et i nettverkspanelet
- Høyreklikk på den → Kopier → Kopier lenkeadresse (Chrome) eller Kopier URL (Firefox)
- I den kopierte lenken finner du delen etter
zones/, det er sone-ID-en, og etterdns_records/, det er oppførings-ID-en
Sett dem inn i ZONE_ID- og RECORD_ID-variablene i skriptet, så vil alt fungere. Sørg for at skyen i DNS-panelet er grå (proxy av): Cloudflare skal ikke mellomlagre IP for DDNS.
⁉️🤔 Ofte stilte spørsmål
Er det obligatorisk å bruke API-token i stedet for global nøkkel?
Den globale nøkkelen fungerer fortsatt, men token er det moderne og sikre alternativet. Et token kan begrenses til ett domene og rettigheter til DNS-redigering. Den globale nøkkelen gir tilgang til hele kontoen. Hvis skriptet eller Pi-en kompromitteres, tilbakekaller du bare tokenet, mens du måtte ha endret nøkkelen overalt.
Hvordan skiller denne tilnærmingen seg fra DuckDNS eller No-IP?
Tredjeparts DDNS-tjenester gir et tredjenivås subdomene som
myhome.duckdns.org. Cloudflare-tilnærmingen bruker ditt eget domene (home.example.com), dette ser mer profesjonelt ut, er ikke avhengig av andres tjeneste, og krever ikke månedlig innlogging for aktivitetsbekreftelse. I tillegg får du tilgang til hele Cloudflare-økosystemet: DDoS-beskyttelse, SSL-sertifikater, brannmurregler.
Må jeg videresende porter på ruteren?
Ja, for å nå Raspberry Pi fra internett. DDNS sørger bare for at domenet alltid peker til den gjeldende IP-en. Men for at trafikk fra den IP-en skal nå Pi-en, må du konfigurere portvideresending på ruteren for de nødvendige portene (22 for SSH, 80/443 for web, og så videre).
Hva gjør jeg hvis Raspberry Pi er bak ISP-NAT?
Noen internettleverandører bruker Carrier-Grade NAT (CGNAT), da har du ikke din egen offentlige IP og DDNS vil ikke hjelpe. Løsning: be om en hvit IP fra leverandøren (ofte gratis ved forespørsel) eller bruk Cloudflare Tunnel, som oppretter en kryptert kanal fra Pi til Cloudflare uten portvideresending.
Hvor mye koster denne løsningen?
Null. Cloudflare DNS er gratis for ubegrensede A-oppføringer. Du har allerede kjøpt Raspberry Pi. Strømforbruket til Pi 3/4 under belastning er omtrent 3-5 W, årlig blir det grovt regnet 250-400 kroner.
Kan jeg oppdatere flere subdomener?
Ja, dupliser blokkene med
RECORD_NAMEogDNS_IPi skriptet for hvert subdomene, eller pakk logikken inn i en løkke over en liste med navn.
Dynamisk DNS på Cloudflare: hva du bør sette opp i 2026
Oppsettet med Cloudflare API og cron har overlevd flere generasjoner Raspberry Pi og har ikke mistet sin relevans. Du får ditt eget underdomene, er ikke avhengig av tredjeparts DDNS-leverandører og betaler ikke en krone.
Hvis du vil gå videre, kan du se på ferdige Docker-images: oznu/cloudflare-ddns oppdaterer IP hvert 5. minutt og konfigureres via miljøvariabler. For dem som foretrekker Python, finnes aribasadme/rpi-cloudflare-ddns, som er skreddersydd for Raspberry Pi.
Det viktigste du gjorde i dag: Raspberry Pi er nå tilgjengelig fra hvor som helst i verden på en permanent adresse. Og dette er grunnlaget for alt: fra en WordPress-utviklingsserver til din egen skylagring.



