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.delay = delay
|
||||||
self.failed_attempts = 0
|
self.failed_attempts = 0
|
||||||
self.bus = dbus.SystemBus()
|
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.activate_vpn() # Auto connect at startup (Listen for StateChanged going forward)
|
||||||
self.get_network_manager().connect_to_signal("StateChanged", self.onNetworkStateChanged)
|
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)
|
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")
|
logger.info("No active connections found")
|
||||||
return None
|
return None
|
||||||
logger.info("Found %d active connection(s)", len(active_connections))
|
logger.info("Found %d active connection(s)", len(active_connections))
|
||||||
return active_connections[0]
|
return active_connections
|
||||||
|
|
||||||
def activate_vpn(self):
|
def activate_vpn(self):
|
||||||
"""Activates the vpn connection."""
|
"""Activates the vpn connection."""
|
||||||
logger.info("Activating %s VPN connection", self.vpn_name)
|
logger.info("Activating %s VPN connection", self.vpn_name)
|
||||||
vpn_con = self.get_vpn_interface(self.vpn_name)
|
vpn_con = self.get_vpn_interface(self.vpn_name)
|
||||||
active_con = self.get_active_connection()
|
active_cons = self.get_active_connection()
|
||||||
if active_con is None:
|
if active_cons is None:
|
||||||
|
print('active cons is None')
|
||||||
return
|
return
|
||||||
|
|
||||||
# check if we have to ignore vpn
|
inet_con = None
|
||||||
proxy = self.bus.get_object('org.freedesktop.NetworkManager', active_con)
|
for active_con in active_cons:
|
||||||
con = dbus.Interface(proxy, 'org.freedesktop.DBus.Properties').Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection')
|
print(active_con)
|
||||||
proxy = self.bus.get_object('org.freedesktop.NetworkManager', con)
|
# check if we have to ignore vpn
|
||||||
settings = dbus.Interface(proxy, 'org.freedesktop.NetworkManager.Settings.Connection').GetSettings()
|
proxy = self.bus.get_object('org.freedesktop.NetworkManager', active_con)
|
||||||
if settings['connection']['id'] in self.ignore_networks:
|
con = dbus.Interface(proxy, 'org.freedesktop.DBus.Properties').Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection')
|
||||||
logger.info("Ignored network connection %s based on settings", settings['connection']['id'])
|
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
|
return
|
||||||
|
|
||||||
# activate vpn and watch for reconnects
|
# 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:
|
try:
|
||||||
new_con = self.get_network_manager().ActivateConnection(
|
new_con = self.get_network_manager().ActivateConnection(
|
||||||
vpn_con,
|
vpn_con,
|
||||||
dbus.ObjectPath("/"),
|
dbus.ObjectPath("/"),
|
||||||
active_con,
|
inet_con,
|
||||||
)
|
)
|
||||||
proxy = self.bus.get_object('org.freedesktop.NetworkManager', new_con)
|
proxy = self.bus.get_object('org.freedesktop.NetworkManager', new_con)
|
||||||
iface = dbus.Interface(proxy, 'org.freedesktop.NetworkManager.VPN.Connection')
|
iface = dbus.Interface(proxy, 'org.freedesktop.NetworkManager.VPN.Connection')
|
||||||
|
@ -232,6 +245,7 @@ class AutoVPN(object):
|
||||||
except dbus.exceptions.DBusException:
|
except dbus.exceptions.DBusException:
|
||||||
# Ignore dbus connections (in case VPN already active when this script runs)
|
# 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?
|
# TODO: Do this handling better; maybe check active/inactive status above and bail if already active?
|
||||||
|
print('dbus.exceptions.DBusException')
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -274,7 +288,7 @@ After=network-online.target
|
||||||
Wants=network-online.target systemd-networkd-wait-online.service
|
Wants=network-online.target systemd-networkd-wait-online.service
|
||||||
|
|
||||||
[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
|
Restart=on-failure
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
|
Reference in New Issue