X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;ds=sidebyside;f=dynamic-ip-update;h=f75bd05368864a198ae0b17e428aa8b8558b0d23;hb=9c77c557e60d21caceeef1e78e35b35ed968fca9;hp=1e6cabbf0fce19f9118596b3aec207ec18e22c25;hpb=d6def754cd241538c61456536b52ee51cbd85b42;p=distro-setup diff --git a/dynamic-ip-update b/dynamic-ip-update index 1e6cabb..f75bd05 100755 --- a/dynamic-ip-update +++ b/dynamic-ip-update @@ -1,5 +1,47 @@ #!/bin/bash -source ~/.bashrc + +f=/usr/local/lib/err;test -r $f || { echo "error: $0 no $f" >&2;exit 1;}; . $f +[[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@" + +this_file="$(readlink -f -- "${BASH_SOURCE[0]}")" +readonly this_file +this_dir="${this_file%/*}" +readonly this_dir +cd "$this_dir" + +usage() { + cat <&2; exit 1; } + +force=false # default +temp=$(getopt -l help hf "$@") || usage 1 +eval set -- "$temp" +while true; do + case $1 in + -f) force=true ;; + --) shift; break ;; + *) echo "$0: unexpected args: $*" >&2 ; usage 1 ;; + esac + shift +done + +##### end command line parsing ######## main() { @@ -24,6 +66,7 @@ main() { case $gateway in 10.2.0.1) + dyndomain=b8.nz dynhost=i.b8.nz ;; *) @@ -31,6 +74,11 @@ main() { ;; esac + # We check if we are at home by testing gateway ssh + # fingerprint. However, if we found in the past that we are, I dont + # like to spam its logs with ssh login attempts, so just check if our + # gateway interface has an increasing amount of packets sent + + # received from last time. athome=false if [[ -s /dev/shm/dynamic-ip-update-state ]]; then oldbytes=$(cat /dev/shm/dynamic-ip-update-state) @@ -54,7 +102,7 @@ main() { return 0 fi if ip4=$(curl -s4 https://iankelling.org/cgi/pubip); then - if [[ $cur4 && $ip4 && $cur4 != $ip4 ]]; then + if $force || [[ $cur4 && $ip4 && $cur4 != $ip4 ]]; then up4=true # update ipv4 fi fi @@ -80,7 +128,7 @@ main() { fi fi - if [[ $cur6 != $ip6 ]]; then + if $force || [[ $cur6 != $ip6 ]]; then up6=true fi @@ -102,6 +150,8 @@ EOF cat >>$f < nsupdate_fail_limit )); then + echo error: nsupdate is persistently failing >&2 + exit 1 + fi } loop-main() { @@ -139,10 +191,12 @@ loop-main() { done } - +nsupdate_fails=0 if [[ $INVOCATION_ID ]]; then + nsupdate_fail_limit=10 loop-main else + nsupdate_fail_limit=0 main fi