Opennet Firmware
mig_openvpn_updown.sh
gehe zur Dokumentation dieser Datei
1#!/bin/sh
2#
3# Opennet Firmware
4#
5# Copyright 2010 Rene Ejury <opennet@absorb.it>
6# Copyright 2015 Lars Kruse <devel@sumpfralle.de>
7#
8# Licensed under the Apache License, Version 2.0 (the "License");
9# you may not use this file except in compliance with the License.
10# You may obtain a copy of the License at
11#
12# http://www.apache.org/licenses/LICENSE-2.0
13#
14
15
16# shellcheck source=opennet/packages/on-core/files/usr/lib/opennet/on-helper.sh
17. "${IPKG_INSTROOT:-}/usr/lib/opennet/on-helper.sh"
18
19# die folgenden Variablen stammen aus der OpenVPN-Umgebung
20script_type=${script_type:-}
21route_vpn_gateway=${route_vpn_gateway:-}
22route_network_1=${route_network_1:-}
23# use either IPv4 or IPv6 Address of peer/server
24trusted_ip=${trusted_ip:-${trusted_ip6:-}}
25
26
27# parse die foreign-Options, beispielsweise:
28# foreign_option_4='dhcp-option DNS 10.1.0.1'
29# Ergebnis: zeilenweise Auflistung von DHCP-Options und zugehoerigem Wert
30# Beispielsweise:
31# DNS 10.1.0.1
32# NTP 10.1.0.1
33get_servers_from_dhcp_options() {
34 local index=1
35 local option
36 while true; do
37 # prüfe ob die "foreign_option_XXX"-Variable gesetzt ist
38 option=$(eval echo "\${foreign_option_$index:-}")
39 [ -z "$option" ] && break
40 echo "$option"
41 index=$((index + 1))
42 done | awk '{ if ($1 == "dhcp-option") print $2,$3 }'
43}
44
45
46# die PATH-Umgebungsvariable beim Ausfuehren des openvpn-Skripts beinhaltet leider nicht die sbin-Verzeichnisse
47IP_BIN=$(PATH=$PATH:/sbin:/usr/sbin command -v ip)
48
49
50# Allgemeine openvpn-Ereignisbehandlung
51log_openvpn_events_and_disconnect_if_requested "mig-openvpn-connections"
52
53# Sonder-Aktionen für mig-Verbindungen
54case "$script_type" in
55 up)
56 "$IP_BIN" route replace default via "$route_vpn_gateway" table "$ROUTING_TABLE_ON_UPLINK" || true
57 get_servers_from_dhcp_options >"$MIG_PREFERRED_SERVERS_FILE"
58 update_dns_servers
59 update_ntp_servers
60 is_on_module_installed_and_enabled "on-monitoring" && {
61 # "route_vpn_gateway" ist eigentlich sinnvoller - aber er liefert keine Ping-Antwort
62 add_monitoring_multiping_host "$route_network_1" "gateway"
63 add_monitoring_multiping_host "$trusted_ip" "ugw"
64 }
65 ;;
66 down)
67 # löse einen baldigen Verbindungsaufbau aus
68 is_on_module_installed_and_enabled "on-openvpn" \
69 && has_mig_openvpn_credentials \
70 && { echo "on-function update_mig_connection_status" | schedule_task; }
71 true
72 rm -f "$MIG_PREFERRED_SERVERS_FILE"
73 update_dns_servers
74 update_ntp_servers
75 # die monitoring-Host-Eintraege (siehe oben) muessen nicht entfernt werden - dies geschieht bei der Paket-Deinstallation
76 ;;
77esac 2>&1 | logger -t mig-updown
78
79exit 0
done
Definition: core.sh:85