bundles/pppd: automatically restart pppoe (once per hour) if no public ip address can be found
Some checks failed
bundlewrap/pipeline/head There was a failure building this commit

This commit is contained in:
Franzi 2020-12-10 16:14:17 +01:00
parent b80c0b12fe
commit bd217f0666
Signed by: kunsi
GPG key ID: 12E3D2136B818350
4 changed files with 54 additions and 1 deletions

View file

@ -0,0 +1,46 @@
#!/usr/bin/env python3
from datetime import datetime
from ipaddress import ip_address
from subprocess import run
from sys import exit
import netifaces
now = int(datetime.timestamp(datetime.utcnow()))
try:
with open('/var/tmp/pppd-last-restart.status', 'r') as f:
last_restart = int(f.read().strip())
except:
last_restart = 0
if now-3600 < last_restart:
print('Last restart is less than an hour ago, exiting ...')
exit(0)
ifaces = set()
for i in netifaces.interfaces():
if i.startswith('ppp'):
ifaces.add(i)
system_has_public_ip = False
for iface in ifaces:
for type in [netifaces.AF_INET, netifaces.AF_INET6]:
for ip in netifaces.ifaddresses(iface)[type]:
try:
addr = ip_address(ip['addr'])
if not addr.is_private and not addr.is_loopback:
system_has_public_ip = True
except:
# Apparently not an ip
pass
if not system_has_public_ip:
run(['systemctl', 'restart', 'pppoe'])
with open('/var/tmp/pppd-last-restart.status', 'w') as f:
f.write(now)
print('pppoe.service has been restarted')

View file

@ -81,6 +81,9 @@ files = {
'svc_systemd:pppoe:restart', 'svc_systemd:pppoe:restart',
}, },
}, },
'/usr/local/bin/restart-pppoe-if-no-public-ip': {
'mode': '0755',
},
} }
if 'dyndns' in node.metadata['pppd']: if 'dyndns' in node.metadata['pppd']:

View file

@ -4,7 +4,11 @@ defaults = {
'ppp': {}, 'ppp': {},
'pppoe': {}, 'pppoe': {},
'python3-requests': {}, 'python3-requests': {},
'python3-netifaces': {},
'ndisc6': {}, 'ndisc6': {},
}, },
}, },
'cron': {
'restart-pppoe-if-no-public-ip': '*/5 * * * * root /usr/local/bin/restart-pppoe-if-no-public-ip',
},
} }

View file

@ -41,7 +41,7 @@ nodes['home.router'] = {
# connected longer than 24 hours. We install this cronjob # connected longer than 24 hours. We install this cronjob
# to make sure we don't get disconnected randomly during the # to make sure we don't get disconnected randomly during the
# day. # day.
'restart_pppd': '23 2 * * * root systemctl restart pppoe', 'restart_pppd': '23 2 * * * root systemctl restart pppoe && date -u +%s > /var/tmp/pppd-last-restart.status',
}, },
'dhcpd': { 'dhcpd': {
'subnets': { 'subnets': {