#!/bin/sh export DATE="17.2.2006" export TITLE="Verwaltung: Opennet" . ${0%/*}/cgi-bin-pre.sh cat<<EOF

# Verwaltung: OpenVPN-Gateways

EOF if [ "$REQUEST_METHOD" = "POST" ]; then read QUERY_STRING fi eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}') if [ -n "$add_gw" ]; then nvram set on_gwauto="$on_gwauto" if [ "$on_gwauto" != "on" ]; then number=1 on_gwaddrs_new= on_gwaddrs_old=$(nvram get on_gwaddrs) ### go through all existing entrys / use old entrys as reference, there couldnt be more now for dummy in $on_gwaddrs_old; do # get address, continue if no entry found addr=$(eval echo \$on_gw$number) if [ -n "$addr" ]; then # search information about status and age in old entrys worked=$(echo $on_gwaddrs_old | awk 'BEGIN {RS=" ";FS=":"}$1 == "'$addr'" {print $2}') age=$(echo $on_gwaddrs_old | awk 'BEGIN {RS=" ";FS=":"}$1 == "'$addr'" {print $3}') # store values on_gwaddrs_new="$on_gwaddrs_new $addr:$worked:$age" fi : $((number++)) done; # add new entry if [ -n "$on_gwtoadd" ]; then on_gwaddrs_new="$on_gwaddrs_new $on_gwtoadd::"; fi on_gwaddrs_new=$(echo $on_gwaddrs_new) nvram set on_gwaddrs="$on_gwaddrs_new" else # refresh gateway values /usr/sbin/cron.minutely_ongateway refresh fi elif [ -n "$add_blackgw" ]; then number=1 on_gwblackaddrs_new= for on_gwblackaddr in $(nvram get on_gwblackaddrs); do on_gwblackaddrs_new="$on_gwblackaddrs_new "$(eval echo \$on_gwblack$number) number=$(($number+1)) done; on_gwblackaddrs_new=$(echo $on_gwblackaddrs_new) nvram set on_gwblackaddrs="$on_gwblackaddrs_new $on_gwblacktoadd" if [ "$on_gwauto" = "on" ]; then # refresh gateway values and remove possible blacklisted entrys /usr/sbin/cron.minutely_ongateway refresh fi elif [ -n "$openvpn_restart" ]; then nvram set on_gwcount=10 # force not to wait before changing the gateway echo -n "
..." /usr/sbin/cron.minutely_ongateway echo -n "...
" nvram set on_gwcount=0 fi gwauto=$(nvram get on_gwauto) cat<<EOF In diesem Bereich können die IP-Adressen der von euch gewünschten OpenVPN-Gateways konfiguriert werden.
mehr Informationen.
Falls ihr euch über aktuelle Gateways im Opennet informieren wollt, schaut im Opennet-Wiki nach. Als Gateway wird der jeweils erste eingetragene Gateway genutzt, zu dem eine Route führt. Ein Wechsel der Gateways erfolgt, wenn der aktuelle Gateway etwa 6 Minuten lang nicht der erste erreichbare Gateway entsprechend der Liste ist. Achtung: Ein Wechsel des Gateways führt zur Unterbrechung aller aktiven Internetverbindungen.
Sind keine Gateways aus dieser Liste erreichbar, (oder ist die Liste leer), ist OpenVPN deaktiviert . Falls Gateways ohne OpenVPN im Opennet aktiv sind, werden diese dann automatisch genutzt.
Automatische Gateway-Suche: Die Gateways werden automatisch ermittelt und anhand ihrer Entfernung (HOP-Count) sortiert. Dies muss nicht in allen Fällen optimal sein.
Informationen zu den Angaben in den Spalten:
Unter 'Erreichbarkeit' wird angegeben, ob aktuell eine Route zum Gateway existiert. Zusätzlich wird vermerkt, ob ein Tunnel zu diesem Gateway aufgebaut ist und/oder ob dieser Gateway über die Blacklist gesperrt wurde.
Unter 'OpenVPN-Test' wird angegeben, ob testweise eine OpenVPN Verbindung zum entsprechenden Gateway aufgebaut werden konnte. Zusätzlich steht in Klammern, wann der entsprechende Gateway zuletzt getestet wurde. Fehlt diese Angabe, wurde noch kein Test durchgeführt.

## Gateway-Liste

Automatische Gateway-Suche

| IP-Adresse | Erreichbarkeit | OpenVPN-Test
EOF first_reachable_gw= # indicates at which position there is a possible gateway is_a_better_gw="no" # indicates that there is a 'better' gateway number=1 for on_gwaddr in $(nvram get on_gwaddrs); do on_gw_addr=$(echo $on_gwaddr | cut -d":" -f1) on_gw_status=$(echo $on_gwaddr | cut -d":" -f2) on_gw_age=$(echo $on_gwaddr | cut -d":" -f3) cat<<EOF
" #--------------------------------------------------------------------------------------------------------- if [ -z "$first_reachable_gw" ]; then if [ -n "$reachable" ] && [ -z "$blacklisted" ] && [ "$on_gw_status" = "y" ]; then first_reachable_gw="$number" if [ "$(nvram get on_gw)" != "$on_gw_addr" ]; then is_a_better_gw="yes" fi fi fi number=$(($number+1)) echo "

$number.

EOF blacklisted="$(nvram get on_gwblackaddrs | awk "/$on_gw_addr/"'{print}')" reachable="$(route -n | cut -d" " -f1 | grep $on_gw_addr)" #--------------------------------------------------------------------------------------------------------- if [ -n "$reachable" ]; then echo "" else echo "" fi if [ "$(nvram get on_gw)" = "$on_gw_addr" ]; then if [ -f /tmp/openvpn_msg.txt ];then echo "Tunnel aktiv " else if [ -f /var/run/openvpn.opennet.pid ]; then echo "Tunnel startend "; fi fi fi if [ -n "$blacklisted" ]; then echo "* gesperrt *"; fi echo "

" if [ "$on_gw_status" = "y" ]; then echo "" else echo "" fi if [ -n "$on_gw_status" ]; then echo " (vor $on_gw_age min)"; fi echo "

" done cat<<EOF
Gateway hinzufügen:

## Gateway-Blacklist

mehr Informationen
An dieser Stelle kannst Du gezielt einzelne Gateways sperren. Auch wenn diese in der Liste oben auftauchen, werden die Rechner aus der Blacklist nicht berücksichtigt. (Über welchen Rechner eine Verbindung ins Internet ohne OpenVPN - wenn überhaupt - hergestellt wird, kann hierdurch allerdings nicht beeinflusst werden)

| IP-Adresse | Erreichbarkeit
EOF number=1 for on_gwblackaddr in $(nvram get on_gwblackaddrs); do cat<<EOF
" number=$(($number+1)) echo "
$number. |  | EOF if [ "$(route -n | cut -d" " -f1 | grep $on_gwblackaddr)" = "$on_gwblackaddr" ]; then echo "" else echo "" fi echo "
" done cat<<EOF
Gateway zur Blacklist hinzufügen:

EOF if [ "$is_a_better_gw" = "yes" ]; then wait=$((6-$(nvram get on_gwcount))) cat<<EOF

Der erste erreichbare und nicht gesperrte Gateway ist im Moment nicht der aktive Gateway. Der Tunnel wird in etwa $wait Minuten neu gestartet. Die Veränderungen sind dann bei einer Aktualisierung dieser Seite zu sehen.

EOF fi cat<<EOF EOF nvram commit . ${0%/*}/cgi-bin-post.sh