From 546877a9d773dd827c96f33e3dc056b54de17bc9 Mon Sep 17 00:00:00 2001 From: KemoNine Date: Tue, 10 Jul 2018 21:57:50 -0400 Subject: [PATCH] Update AutoVPN docs to be more robust and have a fixedup script/systemd unit --- armbian/vpn_autoconnect.md | 42 +++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/armbian/vpn_autoconnect.md b/armbian/vpn_autoconnect.md index 80814f5..06588ab 100644 --- a/armbian/vpn_autoconnect.md +++ b/armbian/vpn_autoconnect.md @@ -132,7 +132,8 @@ class AutoVPN(object): self.delay = delay self.failed_attempts = 0 self.bus = dbus.SystemBus() - self.ignore_networks = filter(None, ignore_networks.split(',')) + self.ignore_networks = ignore_networks.split(',') + print(self.ignore_networks) self.activate_vpn() # Auto connect at startup (Listen for StateChanged going forward) self.get_network_manager().connect_to_signal("StateChanged", self.onNetworkStateChanged) logger.info("Maintaining connection for %s, reattempting up to %d times with %d ms between retries", vpn_name, max_attempts, delay) @@ -198,32 +199,44 @@ class AutoVPN(object): logger.info("No active connections found") return None logger.info("Found %d active connection(s)", len(active_connections)) - return active_connections[0] + return active_connections def activate_vpn(self): """Activates the vpn connection.""" logger.info("Activating %s VPN connection", self.vpn_name) vpn_con = self.get_vpn_interface(self.vpn_name) - active_con = self.get_active_connection() - if active_con is None: + active_cons = self.get_active_connection() + if active_cons is None: + print('active cons is None') return - # check if we have to ignore vpn - proxy = self.bus.get_object('org.freedesktop.NetworkManager', active_con) - con = dbus.Interface(proxy, 'org.freedesktop.DBus.Properties').Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection') - proxy = self.bus.get_object('org.freedesktop.NetworkManager', con) - settings = dbus.Interface(proxy, 'org.freedesktop.NetworkManager.Settings.Connection').GetSettings() - if settings['connection']['id'] in self.ignore_networks: - logger.info("Ignored network connection %s based on settings", settings['connection']['id']) + inet_con = None + for active_con in active_cons: + print(active_con) + # check if we have to ignore vpn + proxy = self.bus.get_object('org.freedesktop.NetworkManager', active_con) + con = dbus.Interface(proxy, 'org.freedesktop.DBus.Properties').Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection') + proxy = self.bus.get_object('org.freedesktop.NetworkManager', con) + settings = dbus.Interface(proxy, 'org.freedesktop.NetworkManager.Settings.Connection').GetSettings() + if settings['connection']['id'] not in self.ignore_networks: + print('found valid con') + inet_con = active_con + break + + if inet_con is None: + print('no valid con') + logger.info("Ignored network connections based on settings") return # activate vpn and watch for reconnects - if vpn_con and active_con: + if vpn_con and inet_con: + print('activating vpn') + print(inet_con) try: new_con = self.get_network_manager().ActivateConnection( vpn_con, dbus.ObjectPath("/"), - active_con, + inet_con, ) proxy = self.bus.get_object('org.freedesktop.NetworkManager', new_con) iface = dbus.Interface(proxy, 'org.freedesktop.NetworkManager.VPN.Connection') @@ -232,6 +245,7 @@ class AutoVPN(object): except dbus.exceptions.DBusException: # Ignore dbus connections (in case VPN already active when this script runs) # TODO: Do this handling better; maybe check active/inactive status above and bail if already active? + print('dbus.exceptions.DBusException') pass if __name__ == '__main__': @@ -274,7 +288,7 @@ After=network-online.target Wants=network-online.target systemd-networkd-wait-online.service [Service] -ExecStart=/etc/autovpn/autovpn.py `cat /etc/autovpn/default` `cat /etc/autovpn/exclude` +ExecStart=/bin/sh -c "/etc/autovpn/autovpn.py `cat /etc/autovpn/default` `cat /etc/autovpn/exclude`" Restart=on-failure [Install]