fix typo in pt.po headers
[debian/iodine.git] / debian / iodine-client-start
index c05a81d249f7d12766e26b185b5eaa0cfdae97fc..9b7cabf119f47c31f793a6f5e7cb0219c3a6c2a8 100755 (executable)
@@ -47,6 +47,13 @@ Put two lines in the file /etc/default/iodine-client
 
        passwd=password_for_that_tunnel
 
+
+or invoke the script with those environment variables set:
+
+       env subdomain=xxx passwd=xxx iodine-client-start
+
+If these are not set, the script will query the user for them.
+
 DETAILS
 
 The configuration file consists of lines which are either comments
@@ -64,7 +71,7 @@ testhost
 
 bounce_localnet
     Take the local network down and then up again before starting
-    tunnel (default: true)
+    tunnel (default: false)
 
 test_ping_localnet
     Test if the local network is working by pinging the gateway
@@ -95,6 +102,11 @@ mtu
     the default tunnel MTU is 1024, and if the local DNS server
     restricts to 512 byte packets you might need to use an MTU of 220.
 
+skip_raw_udp_mode
+    Set "-r" option in iodine command line. With this option, iodine
+    does not try to establish a direct UDP socket to the iodine server
+    on port 53. (default: true).
+
 continue_on_error
     Set if the script should continue even if a command fails.
     Use to test script when running as non-root. Defaults to false
@@ -104,7 +116,7 @@ EOF
 
 function version
 {
-    echo iodine-client-start 1.0.1
+    echo iodine-client-start 1.0.5
 }
 
 case $# in
@@ -163,7 +175,7 @@ fi
 echo "${testhost:=slashdot.org}"               > /dev/null
 
 ## Set if local network should be taken down and then up
-echo "${bounce_localnet:=true}"                        > /dev/null
+echo "${bounce_localnet:=false}"               > /dev/null
 
 ## Set for testing network availability via ping at various points
 echo "${test_ping_localnet:=true}"             > /dev/null
@@ -182,6 +194,9 @@ echo "${interface}"                         > /dev/null
 ##  - if local DNS server restricts to 512 byte packets then use MTU 220
 echo "${mtu}"                                  > /dev/null
 
+## Set it if you want try RAW udp mode
+echo "${skip_raw_udp_mode:=true}"           > /dev/null
+
 ## Set if the script should continue even if a command fails.
 ## Used to test script when running as non-root.
 if [ $(whoami) = root ]; then
@@ -196,8 +211,17 @@ fi
 ##  ipcalc (for /usr/bin/ipcalc)
 ##  dnsutils (for /usr/bin/dig)
 ##  fping (for /usr/bin/fping)
+##  or oping (for /usr/bin/oping)
 ##  gawk (for /usr/bin/gawk, to use gensub())
 
+if type -P fping > /dev/null; then
+    ping_cmd="fping -C1"
+elif type -P oping > /dev/null; then
+    ping_cmd="oping -c1"
+else
+    ping_cmd="echo would ping"
+fi
+
 ## TO DO
 ## - avoid double ping when DNS server and local router are the same
 ## - option to not kill existing iodine DNS tunnels, in case there
@@ -210,8 +234,13 @@ echo ==== Creating IP-over-DNS tunnel over local network connection...
 ## Find a network interface
 
 if [ -z ${interface} ]; then
-    interface=$(tail --lines=+3 /proc/net/wireless \
-       | head -1 | tr -d : | awk '{print $1}')
+    interfaces=$(tail --lines=+3 /proc/net/wireless \
+       | tr -d : | awk '{print $1}')
+    for dev in ${interfaces}; do
+        if ip -4 addr show dev ${dev} | grep -q inet; then
+            interface=${dev}
+        fi
+    done
 fi
 
 if [ -z ${interface} ]; then
@@ -289,7 +318,7 @@ fi
 
 if ${test_ping_localnet}; then
     echo ==== Ping test of  local network router and DNS servers...
-    fping -C1 ${router} ${nameservers} \
+    ${ping_cmd} ${router} ${nameservers} \
        || echo WARNING: Ping test failed.
 fi
 
@@ -297,18 +326,25 @@ fi
 
 for n in ${nameservers}; do
     n_net=$(ipcalc --nobinary ${n}/${prefix_len} | awk '$1=="Network:" {print $2}')
+    n_net8=$(ipcalc --nobinary ${n}/8 | awk '$1=="Network:" {print $2}')
     if [ "${n_net}" != "${local_net}" ]; then
-       echo ==== Adding point-to-point route for DNS server ${n}
-        ## remove point-to-point route first, in case it is already present
-       ip -4 route del ${n}/32 || true
-       ip -4 route add ${n}/32 via ${router} || ${continue_on_error}
+        if [ "${n_net8}" != "127.0.0.0/8" ]; then
+           echo ==== Adding point-to-point route for DNS server ${n}
+            ## remove point-to-point route first, in case it is already present
+           ip -4 route del ${n}/32 || true
+           ip -4 route add ${n}/32 via ${router} || ${continue_on_error}
+        fi
     fi
 done
 
 ## Bring up DNS tunnel
 
 echo ==== Creating IP-over-DNS tunnel...
-iodine -P "${passwd}" "${subdomain}" || ${continue_on_error}
+if ${skip_raw_udp_mode}; then
+    iodine_opts="${iodine_opts} -r"
+fi
+
+iodine ${iodine_opts} -P "${passwd}" "${subdomain}" || ${continue_on_error}
 
 ## Find DNS tunnel interface
 
@@ -345,7 +381,7 @@ echo ==== DNS tunnel remote endpoint: ${tunnel_remote}
 
 if ${test_ping_tunnel}; then
     echo ==== Ping test of local router, nameserver, and DNS tunnel...
-    fping -C1 ${router} ${nameservers} ${tunnel_remote} \
+    ${ping_cmd} ${router} ${nameservers} ${tunnel_remote} \
        || echo WARNING: Ping test failed.
 fi
 
@@ -354,7 +390,7 @@ fi
 echo ==== Setting default route through DNS tunnel...
 
 ## Remove default route via local router
-ip -4 route del default via ${router} || ${continue_on_error}
+ip -4 route del default via ${router} || echo WARNING: No default route to delete
 ## Add default via tunnel
 ip -4 route add default via ${tunnel_remote} || ${continue_on_error}
 
@@ -362,6 +398,6 @@ ip -4 route add default via ${tunnel_remote} || ${continue_on_error}
 
 if ${test_ping_final}; then
     echo ==== Ping test of local router, nameserver, DNS tunnel, external test host...
-    fping -C1 ${router} ${nameservers} ${tunnel_remote} ${testhost_ip:-${testhost}} \
+    ${ping_cmd} ${router} ${nameservers} ${tunnel_remote} ${testhost_ip:-${testhost}} \
        || echo WARNING: Ping test failed.
 fi