-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathddns.sh
executable file
·107 lines (71 loc) · 2.11 KB
/
ddns.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/bin/sh
#Configuration
WAN="igc0"
DD_SCRIPT_PATH="$PWD"
TEMP_NEW_IP_FILE="$DD_SCRIPT_PATH/newip.txt"
IP_SAVE_FILE="$DD_SCRIPT_PATH/currentip.txt"
#NS specific
NS1_API_KEY="YOUR_KEY"
ZONE="YOUR_DOMAIN.com"
DOMAIN="SUB_DOMAIN1 SUB_DOMAIN2 SUB_DOMAIN3"
#Functions
NS1_A_RECORD_UPDATE() {
local current_ip=$1
local zone=$2
local domain=$3
local nsone_api_key=$4
local response=$(curl -s -S -X POST -H "X-NSONE-Key: $nsone_api_key" -d "{\"answers\": [{\"answer\": [\"$current_ip\"]}], \"ttl\": 3600}" "https://api.nsone.net/v1/zones/$zone/$domain.$zone/A" 2>&1)
echo "$(date): $response" >> $DD_SCRIPT_PATH/log.txt
}
IP_ECHO_EXT_API(){
echo "Checking your IP shown to httpbin..."
CURRENT_IP=$(curl -s http://httpbin.org/ip | jq -r '.origin')
echo "IP = $CURRENT_IP"
}
IP_ECHO_WAN_CHECK(){
echo "Checking WAN IP address..."
CURRENT_IP=$(ifconfig $WAN | grep 'inet' | grep -v 'inet6' | awk -F ' ' '{ print $2 }')
echo "IP = $(CURRENT_IP)"
}
CHECK_IP(){
#Use this when script is running on top level firewall
#IP_ECHO_WAN_CHECK
#Use this when script is running on NATed system
IP_ECHO_EXT_API
}
#Check presence of needed files
# T B D
#Current IP check process
CURRNET_IP=""
echo "Locally, you were using IP = "
cat $IP_SAVE_FILE
#2023/11/24 : Clearified IP get API TBD position
#echo "Name server was using IP = "
#TBD : sub0 ip return API
#TBD : sub1 ip return API
#TBD : sub2 ip return API
#TBD : sub3 ip return API
#...
CHECK_IP
echo "Current public IP = $CURRENT_IP"
echo "$CURRENT_IP" > "$TEMP_NEW_IP_FILE"
#IP change detection process
if cmp -s "$IP_SAVE_FILE" "$TEMP_NEW_IP_FILE"; then
IP_HAS_CHANGED=false
else
IP_HAS_CHANGED=true
echo "Public IP has changed"
fi
#IP update process
if [ "$IP_HAS_CHANGED" = "true" ]; then
for THIS_SUBDOMAIN in $DOMAIN ; do
echo "Requesting POST to NS1..."
echo "$(date): Request POST for IP : $CURRENT_IP" >> $DD_SCRIPT_PATH/log.txt
NS1_A_RECORD_UPDATE "$CURRENT_IP" "$ZONE" "$THIS_SUBDOMAIN" "$NS1_API_KEY"
done
echo "$CURRENT_IP" > "$IP_SAVE_FILE"
else
echo "IP has not changed."
fi
#Post Process
rm $TEMP_NEW_IP_FILE