From 8dc3bef48ce6a32b902d3cb662cb2160a0d7e214 Mon Sep 17 00:00:00 2001 From: binhex Date: Tue, 23 May 2017 17:43:01 +0100 Subject: [PATCH] use curly, small restructure --- Dockerfile | 2 +- run/root/checkvpnconn.sh | 22 ---------------- run/root/getvpnextip.sh | 50 ++++++++++++++++++++++++++++-------- run/root/getvpnport.sh | 18 ++++++++----- {build => run}/root/start.sh | 3 --- 5 files changed, 51 insertions(+), 44 deletions(-) delete mode 100644 run/root/checkvpnconn.sh rename {build => run}/root/start.sh (98%) diff --git a/Dockerfile b/Dockerfile index dc15e55..575f75b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ MAINTAINER binhex ADD build/root/*.sh /root/ # add bash script to run openvpn -ADD build/root/*.sh /root/ +ADD run/root/*.sh /root/ # add bash script to run privoxy ADD run/nobody/*.sh /home/nobody/ diff --git a/run/root/checkvpnconn.sh b/run/root/checkvpnconn.sh deleted file mode 100644 index 448bdc2..0000000 --- a/run/root/checkvpnconn.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -# check we have internet connectivity before we attempt to get vpn incoming port and external ip -check_site_hostname="${1}" -check_site_port="${2}" -counter=0 - -echo "[debug] Checking Internet connectivity..." - -while ! nc -z -w 1 "${check_site_hostname}" "${check_site_port}"; do - - counter=$((counter+1)) - if (( ${counter} > 9 )); then - echo "[debug] Cannot detect Internet connectivity, giving up" - return 1 - else - echo "[debug] Cannot connect to hostname '${check_site_hostname}' port '${check_site_port}', retrying..." - fi - -done - -echo "[debug] Successfully connected to hostname '${check_site_hostname}' port '${check_site_port}'" diff --git a/run/root/getvpnextip.sh b/run/root/getvpnextip.sh index aad8740..4a0d007 100644 --- a/run/root/getvpnextip.sh +++ b/run/root/getvpnextip.sh @@ -1,29 +1,57 @@ #!/bin/bash -# ensure we have connectivity before attempting to detect external ip address -source /root/checkvpnconn.sh "google.com" "443" - # define name servers to connect to in order to get external ip address pri_external_ip_ns="ns1.google.com" sec_external_ip_ns="resolver1.opendns.com" +retry_count=30 -# use dns query to get external ip address -external_ip="$(dig TXT +short o-o.myaddr.l.google.com @${pri_external_ip_ns} | tr -d '"')" -exit_code="${?}" +# remove previous run output file +rm -f /home/nobody/vpn_external_ip.txt -# if error then try secondary name server -if [[ "${exit_code}" != 0 ]]; then +while true; do - external_ip="$(dig +short myip.opendns.com @${sec_external_ip_ns})" + external_ip="$(dig TXT +short o-o.myaddr.l.google.com @${pri_external_ip_ns} | tr -d '"')" exit_code="${?}" + # if error then try secondary name server if [[ "${exit_code}" != 0 ]]; then - external_ip="0.0.0.0" + echo "[warn] Failed to get external IP from Google NS, trying OpenDNS..." + + external_ip="$(dig +short myip.opendns.com @${sec_external_ip_ns})" + exit_code="${?}" + + if [[ "${exit_code}" != 0 ]]; then + + if [ "${retry_count}" -eq "0" ]; then + + external_ip="0.0.0.0" + + echo "[warn] Cannot determine external IP address, exausted retries setting to ${external_ip}" + break + + else + + retry_count=$((retry_count-1)) + sleep 1s + + fi + + else + + echo "[info] Successfully retrieved external IP address ${external_ip}" + break + + fi + + else + + echo "[info] Successfully retrieved external IP address ${external_ip}" + break fi -fi +done # write external ip address to text file, this is then read by the downloader script echo "${external_ip}" > /home/nobody/vpn_external_ip.txt diff --git a/run/root/getvpnport.sh b/run/root/getvpnport.sh index 4a74260..bdb6693 100644 --- a/run/root/getvpnport.sh +++ b/run/root/getvpnport.sh @@ -1,15 +1,18 @@ #!/bin/bash +# statically assigned url for pia api (taken from pia script) +pia_api_host="209.222.18.222" +pia_api_port="2000" +pia_api_url="http://${pia_api_host}:${pia_api_port}" + +# remove previous run output file +rm -f /home/nobody/vpn_incoming_port.txt + # check we are provider pia (note this env var is passed through to up script via openvpn --sentenv option) if [[ "${VPN_PROV}" == "pia" ]]; then - # ensure we have connectivity before attempting to assign incoming port from pia api - source /root/checkvpnconn.sh "google.com" "443" - - # statically assigned url for pia api (taken from pia script) - pia_api_host="209.222.18.222" - pia_api_port="2000" - pia_api_url="http://${pia_api_host}:${pia_api_port}" + # remove temp file from previous run + rm -f /tmp/VPN_INCOMING_PORT # create pia client id (randomly generated) client_id=$(head -n 100 /dev/urandom | sha256sum | tr -d " -") @@ -26,6 +29,7 @@ if [[ "${VPN_PROV}" == "pia" ]]; then else echo "[debug] Successfully assigned incoming port ${VPN_INCOMING_PORT}" + fi # write port number to text file, this is then read by the downloader script diff --git a/build/root/start.sh b/run/root/start.sh similarity index 98% rename from build/root/start.sh rename to run/root/start.sh index e449401..5b46bb3 100644 --- a/build/root/start.sh +++ b/run/root/start.sh @@ -179,9 +179,6 @@ else echo "[warn] Unable to chown/chmod /config/openvpn, assuming SMB mountpoint" fi - # remove file from previous run of getvpnport.sh - rm -rf /home/nobody/vpn_incoming_port.txt - # setup ip tables and routing for application source /root/iptable.sh