From cc7559e9e41bbebc3a58d55ad52707b3cff8d952 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Tue, 28 Sep 2021 20:30:21 -0400 Subject: cryptonomic-dyndns will prefer IPv6 if no public IPv4 address is available --- selfpublish.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/selfpublish.sh b/selfpublish.sh index 521d9da..fa366a8 100644 --- a/selfpublish.sh +++ b/selfpublish.sh @@ -83,6 +83,7 @@ fortune-mod fortunes-min gnupg (>= 2.2.14) libssl1.1 (>= 1.1.1d) +netmask openssl ssh EOF @@ -178,6 +179,44 @@ EOF # File: /usr/share/doc/selfpublish-dot-sh/README.Debian 644 # This gets overwritten :( # EOF + control_file_file /usr/lib/cryptonomic/cryptonomic-ipv4 755 <<'EOF' +#!/bin/bash + +ipv4_check_masks_() +{ + ip=$(netmask -x "$1"/32) || return + ip=${ip%/*} + shift + for cidr in "$@" + do + prefix=${cidr%/*} + mask=${cidr#*/} + if (( (ip & mask) == prefix )) + then + return 1 + fi + done + true +} + +ipv4_address_is_public() +{ + ipv4_check_masks_ "$1" $CIDR_NONPUBLIC +} + +CIDR_NONPUBLIC=$(netmask -x 127.0/8 10.0/8 192.168.0/16 172.16.0/20 169.254.0/16) + +ip -4 -oneline addr | +while read n dev _ inet _ +do + a=${inet%%/*} + if ipv4_address_is_public "$a"; then + echo "$a" + fi +done + + +EOF control_file_file /usr/lib/cryptonomic/cryptonomic-gpg 755 <<'EOF' #!/bin/sh @@ -407,6 +446,9 @@ elif [ "$1" = dyndns ] then shift # further command line options are ssh options + if [ -z "$(cryptonomic ipv4)" ] + then set -- "$@" -6 + fi set -- ssh -i "$KEY_FILE" dyndns@"$DOMAIN" "$@" -- "$(hostname)" if [ -r "$KEY_FILE" ] -- cgit v1.2.3