Skip to content

Commit ddb8676

Browse files
committed
optimize public IP lookup
1 parent 0b099a4 commit ddb8676

2 files changed

Lines changed: 25 additions & 20 deletions

File tree

hetzner_ddns.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
interval='60' # Seconds between updates / TTL value
22
key='********************************' # Hetzner DNS API key
33
domain='example.com' # Top level domain name
4-
records='homelab media vpn' # Space separated host subdomains (@ for domain itself)
4+
records='homelab media vpn' # Space separated host subdomains (@ for domain itself)

hetzner_ddns.sh

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ get_records() {
8181
done
8282
}
8383

84-
get_ip_addr() {
84+
get_record_ip_addr() {
8585
# Get record's IP address
8686
if [ -n "$record_ipv4" ]; then
8787
ipv4_rec="$(
@@ -97,17 +97,19 @@ get_ip_addr() {
9797
jq -r '.record.value'
9898
)"
9999
fi
100-
# Get current IP address
101-
if [ -n "$record_ipv4" ]; then
102-
ipv4_cur="$(
103-
curl 'http://ipv4.whatismyip.akamai.com/' 2>/dev/null
104-
)"
105-
fi
106-
if [ -n "$record_ipv6" ]; then
107-
ipv6_cur="$(
108-
curl 'http://ipv6.whatismyip.akamai.com/' 2>/dev/null
109-
)"
100+
if [ -z "$ipv4_rec" ] && [ -z "$ipv6_rec" ]; then
101+
return 1
110102
fi
103+
}
104+
105+
get_my_ip_addr() {
106+
# Get current public IP address
107+
ipv4_cur="$(
108+
curl 'http://ipv4.whatismyip.akamai.com/' 2>/dev/null
109+
)"
110+
ipv6_cur="$(
111+
curl 'http://ipv6.whatismyip.akamai.com/' 2>/dev/null
112+
)"
111113
if [ -z "$ipv4_cur" ] && [ -z "$ipv6_cur" ]; then
112114
return 1
113115
fi
@@ -159,14 +161,17 @@ pick_record() {
159161
}
160162

161163
set_records() {
162-
# Update all records if possible
163-
for n in $records; do
164-
record_ipv4="$(pick_record "$n" "$records_ipv4")"
165-
record_ipv6="$(pick_record "$n" "$records_ipv6")"
166-
if [ -n "$record_ipv4" ] || [ -n "$record_ipv6" ]; then
167-
get_ip_addr && set_record
168-
fi
169-
done
164+
# Get my public IP address
165+
if get_my_ip_addr; then
166+
# Update all records if possible
167+
for n in $records; do
168+
record_ipv4="$(pick_record "$n" "$records_ipv4")"
169+
record_ipv6="$(pick_record "$n" "$records_ipv6")"
170+
if [ -n "$record_ipv4" ] || [ -n "$record_ipv6" ]; then
171+
get_record_ip_addr && set_record
172+
fi
173+
done
174+
fi
170175
}
171176

172177
printf '[%s] Started Hetzner DDNS daemon\n' "$(date '+%Y-%m-%d %H:%M:%S')" \

0 commit comments

Comments
 (0)