Update AutoVPN docs to be more robust and have a fixedup script/systemd unit
This commit is contained in:
parent
a78434a332
commit
546877a9d7
|
@ -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]
|
||||
|
|
Reference in New Issue