diff --git a/device-config/2/bin/heartbeat b/device-config/2/bin/heartbeat index 9854635..b8a2f90 100755 --- a/device-config/2/bin/heartbeat +++ b/device-config/2/bin/heartbeat @@ -42,6 +42,8 @@ led5g(){ . /etc/vpnsecret # Source the server authentication secret # Prepare for default VPN-WiFi bridge +/sbin/uci set network.VPN360.ifname="eth1 tap0" +/sbin/uci set network.DHCP.ifname="lo" /sbin/uci set wireless.@wifi-iface[0].network="VPN360" /sbin/uci commit @@ -62,49 +64,56 @@ counter=0 while [ $counter -lt 60 ] do # Retrieve hosts file from server - if /usr/bin/wget -O/etc/hosts https://$HOSTNAME/hosts --timeout=2 --post-data "secret=$SECRET" --no-check-certificate >/var/log/wget 2>&1 - then + if /usr/bin/wget -O/etc/hosts https://$HOSTNAME/hosts --timeout=2 --post-data "secret=$SECRET" --no-check-certificate >/var/log/wget 2>&1 + then - if pgrep "openvpn" >/dev/null - then - if [ $(ipaddr) ] # = If connection to the server is working - then - # Turn on LEDs indicating boot completion and connection success - powerled 1 - led5g 1 + if grep -Fq "No VPN" /etc/hosts; + then + break + fi - # Enable WiFi as the VPN bridge is now functional - startwifi + if pgrep "openvpn" >/dev/null + then + if [ $(ipaddr) ] # = If connection to the server is working + then + # Turn on LEDs indicating boot completion and connection success + powerled 1 + led5g 1 - # Send a heartbeat to the server every 10 seconds - # This is also used to transfer commands from the server to the device - while [ True ] - do - /bin/sleep 10 + # Enable WiFi as the VPN bridge is now functional + startwifi - # Let's hope there is an IP address on the VPN interface - # If not, this might be a temporary issue (lost network connection or lease expiration) - # We assume that users will reboot the device if it doesn't work for extended periods of time - if [ $(ipaddr) ] - then - /usr/bin/wget -O- https://$HOSTNAME/heartbeat --post-data "secret=$SECRET&ip=$(ipaddr)" --no-check-certificate 2>/var/log/wget | /bin/ash - fi - done + # Send a heartbeat to the server every 10 seconds + # This is also used to transfer commands from the server to the device + while [ True ] + do + /bin/sleep 10 - fi - else - # Launch VPN client if not running - /usr/sbin/openvpn /etc/openvpn/client.conf >/var/log/openvpn & - fi - fi - counter=$(( counter + 1 )) - powerled $(( counter % 2 )) - /bin/sleep 1 # Wait for a second before re-trying + # Let's hope there is an IP address on the VPN interface + # If not, this might be a temporary issue (lost network connection or lease expiration) + # We assume that users will reboot the device if it doesn't work for extended periods of time + if [ $(ipaddr) ] + then + /usr/bin/wget -O- https://$HOSTNAME/heartbeat --post-data "secret=$SECRET&ip=$(ipaddr)" --no-check-certificate 2>/var/log/wget | /bin/ash + fi + done + + fi + else + # Launch VPN client if not running + /usr/sbin/openvpn /etc/openvpn/client.conf >/var/log/openvpn & + fi + fi + counter=$(( counter + 1 )) + powerled $(( counter % 2 )) + /bin/sleep 1 # Wait for a second before re-trying done # We should only ever get to this point if no VPN connection was established within a minute # Switch WiFi device to the DHCP bridge +/sbin/uci set network.VPN360.ifname="tap0" +/sbin/uci set network.DHCP.ifname="eth1" /sbin/uci set wireless.@wifi-iface[0].network="DHCP" /sbin/uci commit