Add DDNS service to the Pi

This commit is contained in:
Thomas Kleinendorst 2024-04-12 08:39:41 +02:00
parent 04c8038733
commit 04671f7d31
10 changed files with 96 additions and 12 deletions

View file

@ -0,0 +1,10 @@
[Unit]
Description=Cloudflare DDNS timer
[Timer]
OnCalendar=daily
RandomizedDelaySec=900
Persistent=true
[Install]
WantedBy=timers.target

View file

@ -40,8 +40,8 @@ for subdomain in subdomains:
resolvedIP = resolve_name(fullDomainName) resolvedIP = resolve_name(fullDomainName)
if resolvedIP == publicIP: if resolvedIP == publicIP:
logging.info(f'Currently resolved name already matches the public ip ({publicIP}), exiting...') logging.info(f'Currently resolved name already matches the public ip ({publicIP}), skipping this name...')
exit(0) continue
zoneId = cloudflare.get_zone_id(fixedTopLevelDomain) zoneId = cloudflare.get_zone_id(fixedTopLevelDomain)
recordId = cloudflare.get_record_id(zoneId, fullDomainName) recordId = cloudflare.get_record_id(zoneId, fullDomainName)

View file

@ -0,0 +1,3 @@
#!/usr/bin/bash
source ~/bin/cloudflare_ddns/venv/bin/activate
python3 ~/bin/cloudflare_ddns/cloudflare_ddns.py --config-file ~/cloudflare_ddns/ddns_config.ini $@

View file

@ -7,3 +7,60 @@
vars: vars:
username: cloudflare_ddns username: cloudflare_ddns
password: "{{ cloudflare_ddns_user_password }}" password: "{{ cloudflare_ddns_user_password }}"
- name: Install Python dependencies # noqa: package-latest
become: true
ansible.builtin.apt:
pkg: python3-pip
state: latest
- name: Copy over DDNS scripting
become: true
become_user: cloudflare_ddns
ansible.builtin.copy:
src: cloudflare_ddns
dest: ~/bin/
mode: '0700'
- name: Configure Python venv
become: true
become_user: cloudflare_ddns
ansible.builtin.shell: |
cd ~/bin/cloudflare_ddns
python3 -m venv ./venv
chmod u+x ./venv/bin/activate
source ./venv/bin/activate
pip3 install -r ./requirements.txt
args:
executable: /bin/bash
creates: ~/bin/cloudflare_ddns/venv
- name: Create directory for storing public IP change logs and config
become: true
become_user: cloudflare_ddns
ansible.builtin.file:
path: ~/cloudflare_ddns
state: directory
mode: '0700'
- name: Fill config file and store it in folder
become: true
become_user: cloudflare_ddns
ansible.builtin.template:
src: ddns_config.ini.j2
dest: ~/cloudflare_ddns/ddns_config.ini
mode: '0600'
- name: Install Cloudflare DDNS service file
become: true
ansible.builtin.template:
src: cloudflare_ddns.service
dest: /lib/systemd/system/
mode: '0644'
- name: Install Cloudflare DDNS timer file
become: true
ansible.builtin.copy:
src: cloudflare_ddns.timer
dest: /lib/systemd/system/
mode: '0644'
- name: Enable the newly added systemd timer
become: true
ansible.builtin.systemd_service:
daemon_reload: true
name: cloudflare_ddns.timer
state: started
enabled: true

View file

@ -0,0 +1,13 @@
[Unit]
Description=Cloudflare DDNS service
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
User=cloudflare_ddns
Group=cloudflare_ddns
ExecStart=/home/cloudflare_ddns/bin/cloudflare_ddns/cloudflare_ddns.sh {{ wireguard_address }}
[Install]
WantedBy=default.target

View file

@ -2,5 +2,4 @@
dns_cloudflare_token = {{ dns_cloudflare_token }} dns_cloudflare_token = {{ dns_cloudflare_token }}
[log_changes] [log_changes]
# TODO: Update this... log_path = /home/cloudflare_ddns/cloudflare_ddns/ddns_update.log
log_path = /home/thomas/repositories/raspberry-pi-iac/ddns_update.log

View file

@ -1,9 +1,11 @@
$ANSIBLE_VAULT;1.1;AES256 $ANSIBLE_VAULT;1.1;AES256
66356265626336393935313366363030306565343830633365383938383363376430326330633430 66636366666633653933313233613230396161303661363939646564633533363963623639633662
6138653236396139613861393639303766633062323336310a373133336139316661383039303533 3266613932346433326263313864336437656132643534660a386639623636656161376237333735
63343563333232633166353061346630326339303062663066663464333733613164623864306264 32613536383532396632343235323338626562393138396266393765373735666661646534333230
6165366331373734660a623664353734613037343537646135663239616239383136636562356137 3366633633393866620a643161323663316135303235376263633664333665383535386162356330
62646565626565663831396137313364626632353064633661333135636439663537343438653237 35656339306365373366333338643433613637393431353336353965663030366330386231653562
66633733353435653031366533376463616335633131613862393764353337643665353464623939 38663362356430373161373330663333636363653866643633613631333733356236636635306163
33613931343561316133386636613036666363663161353163306566393234323239643762386130 64326137643965623761303730613066366334313734333032653461303064373162303838643233
35623434313161313034 65643031316465326263643438326235313537636330323735353664613337653730313264376234
35353134626236306632386462393563303433323738336231303863366463386433373733333532
6134386564383632663264343032323566323662313331663530