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
20 script_type=${script_type:-}
21 route_vpn_gateway=${route_vpn_gateway:-}
22 route_network_1=${route_network_1:-}
23 # use either IPv4 or IPv6 Address of peer/server
24 trusted_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
33 get_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
47 IP_BIN=$(PATH=$PATH:/sbin:/usr/sbin command -v ip)
48 
49 
50 # Allgemeine openvpn-Ereignisbehandlung
51 log_openvpn_events_and_disconnect_if_requested "mig-openvpn-connections"
52 
53 # Sonder-Aktionen für mig-Verbindungen
54 case "$script_type" in
55  up)
56  "$IP_BIN" route replace default via "$route_vpn_gateway" table "$ROUTING_TABLE_ON_UPLINK" || true
57  # verhindere das Routing von explizit unerwuenschtem Verkehr ueber den Nutzer-Tunnel (falls die Regel noch nicht existiert)
58  "$IP_BIN" route replace throw default table "$ROUTING_TABLE_ON_UPLINK" tos "$TOS_NON_TUNNEL" 2>/dev/null || true
59  get_servers_from_dhcp_options >"$MIG_PREFERRED_SERVERS_FILE"
62  is_on_module_installed_and_enabled "on-monitoring" && {
63  # "route_vpn_gateway" ist eigentlich sinnvoller - aber er liefert keine Ping-Antwort
64  add_monitoring_multiping_host "$route_network_1" "gateway"
65  add_monitoring_multiping_host "$trusted_ip" "ugw"
66  }
67  ;;
68  down)
69  # löse einen baldigen Verbindungsaufbau aus
72  && { echo "on-function update_mig_connection_status" | schedule_task; }
73  true
74  rm -f "$MIG_PREFERRED_SERVERS_FILE"
77  # die monitoring-Host-Eintraege (siehe oben) muessen nicht entfernt werden - dies geschieht bei der Paket-Deinstallation
78  ;;
79 esac 2>&1 | logger -t mig-updown
80 
81 exit 0
has_mig_openvpn_credentials()
Prüft, ob der Nutzer bereits einen Schlüssel und ein Zertifikat angelegt hat.
Definition: on-openvpn.sh:14
on core on function update_ntp_servers on function update_dns_servers
Übertrage die Liste der als DNS-Dienst announcierten Server in die dnsmasq-Konfiguration.
Definition: 100-on-core:11
update_ntp_servers()
Übertrage die Liste der als NTP-Dienst announcierten Server in die sysntpd-Konfiguration.
Definition: core.sh:62
log_openvpn_events_and_disconnect_if_requested()
Allgemeines Ereignisbehandlung fuer openvpn-Verbindungen: Logging und eventuell Dienst-Bereinigung (n...
Definition: openvpn.sh:59
set eu grep root::etc shadow exit if command v chpasswd dev null
Definition: on-password:12
done
Definition: core.sh:85
is_on_module_installed_and_enabled(module)
Pruefe ob ein Modul sowohl installiert, als auch aktiv ist.
Definition: modules.sh:9