Release
[ddns.git] / ddns
1 #!/bin/bash
2
3 . /etc/ddns/ddns.conf
4
5 IFS=, HOSTS=($HOSTNAME)
6 MAINHOST=$HOSTS
7
8 if [ -z "$SLEEP" ] ; then
9   $SLEEP=60
10 fi
11
12 while :
13
14 do
15
16 echo "Sleeping..."
17 sleep $SLEEP
18
19 new_ip_address=$(curl -4 $URL | sed 's/[ \t\n]*$//')
20
21 result=$(whois $new_ip_address)
22
23 if [ $? = 0 ]
24 then
25
26 # Ignoring, if after mobile NAT
27 cnt=`echo "$result" | grep descr | grep -i 'beeline\|mts\|megafon' | wc -l`
28
29 if [ $cnt -gt 0 ]
30 then
31   echo "Mobile NAT detected, backup channel, no action taken"
32   continue
33 fi
34
35 if [ -z "$new_ip_address" ] ; then
36   echo "New IP unknown"
37   continue
38 fi  
39
40 if [ -z "$old_ip_address" ] ; then
41   old_ip_address=$(host -W 1 -R 4 -4 -t A $MAINHOST $SERVER | grep "has address" | awk '{print $4}')
42   old_ip_address=$(echo $old_ip_address)
43   if [ -z "$old_ip_address" ] ; then
44     echo "Old IP unknown"
45     continue
46   fi
47 fi  
48
49 echo "[$old_ip_address],[$new_ip_address]"
50
51 if [ "$old_ip_address" = "$new_ip_address" ] ; then
52
53   echo "IP not changed, no action"
54
55 else
56
57   for host in ${HOSTS[@]}; do
58     nsupdate -v -k $KEYFILE << EOF
59 server $SERVER
60 zone $ZONE
61 update delete $host A
62 update add $host $TTL A $new_ip_address
63 send
64 EOF
65
66     echo "DNS update for $host"
67   done  
68   
69   unset old_ip_address
70
71   if [ ! -z "$EXEC" ]
72   then
73     $EXEC
74   fi
75
76 fi
77
78 fi
79
80 done