andyreagan.com

Update Cloudflare Proxy IP

I use Cloudflare to proxy my home IP for this blog (more details).

To keep this up to date, I run a script on the synology that's this:

cd /var/services/homes/andyreagan/cron-tasks/update-dns-cloudflare
venv/bin/python update_cloudflare_ip.py

The python script is:

import requests
import os

from cloudflare import Cloudflare
from dotenv import load_dotenv

load_dotenv()

ZONE_ID = os.environ['ZONE_ID']

assert ZONE_ID != ''
assert os.environ['CLOUDFLARE_API_TOKEN'] is not None

# uses CLOUDFLARE_API_TOKEN from the environment
client = Cloudflare()

def get_ip() -> str:
    response = requests.get('https://api.ipify.org')
    return response.text

dns_a_records = client.dns.records.list(
    zone_id=ZONE_ID,
    type="A"
)

print(f"Found {len(list(dns_a_records))} DNS records")
assert len(list(dns_a_records)) == 2

external_ip = get_ip()
print(f"External IP is {external_ip}")

assert external_ip != ''

for record in dns_a_records:
    if record.content != external_ip:
        print(f"Update needed from {record.content} -> {external_ip}. Before:")
        print(record)
        result = client.dns.records.edit(
            dns_record_id=record.id,
            zone_id=ZONE_ID,
            content=external_ip
        )
        print("After:")
        print(result)
        assert result.content == external_ip

print("Complete")

All in all, here's what the folder looks like on Synology File Station:

folder.png

and here's the settings for the task:

task-settings.png

Happy self-hosting!

previous | next | random

Last modified: May 20, 2025