/etc/init.d/vpn: Unterschied zwischen den Versionen
(skript1) |
Glenn (Diskussion | Beiträge) (+kat) |
||
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | ===Funktionen=== | ||
+ | <pre> | ||
+ | /etc/init.d/vpn start |stop | restart | restart_olsr | restart_tunnel | pingtest | status | check | ifup INTERFACE NODE | ||
+ | </pre> | ||
+ | |||
+ | Die Funktion "check" wird alle 5 Minuten per cron ausgefuehrt und startet den Tunnel oder den OLSR-Dienst neu, falls keine CPU-Zeit mehr konsumiert wird. | ||
+ | |||
+ | ===Skript=== | ||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
Zeile 109: | Zeile 117: | ||
ps ax| | ps ax| | ||
awk -F tap '/tap/ { | awk -F tap '/tap/ { | ||
− | if($2<99&&$2>=0) | + | if($2<99&&$2>=0){ |
− | + | NO=$2*1 | |
+ | printf("tap %2i - ",NO) | ||
+ | system("grep \"device tap"NO" \" /etc/vtund.conf") | ||
+ | } | ||
+ | }'| | ||
sort | sort | ||
} | } | ||
Zeile 122: | Zeile 134: | ||
fkt_pingall_clients() { | fkt_pingall_clients() { | ||
− | awk '/ifup/ {printf $1": ";system("ping -c 1 10.63."$12". | + | awk '/ifup/ {printf $1": ";system("ping -c 3 10.63."$12".253 | grep \"64 bytes\"");print ""}' /etc/vtund.conf |
+ | awk '/ifup/ {printf $1": ";system("ping -c 3 10.63."$12".1 | grep \"64 bytes\"");print ""}' /etc/vtund.conf | ||
+ | } | ||
+ | |||
+ | fkt_check_olsr_and_tunnel () { | ||
+ | BIN_OLSR="olsrd" | ||
+ | BIN_VTUN="vtund" | ||
+ | |||
+ | PID_OLSR="$(pidof -s $BIN_OLSR)" | ||
+ | PID_VTUN="$(pidof -s $BIN_VTUN)" | ||
+ | |||
+ | OLSR_TIME_1="$(top -p $PID_OLSR -n 1 -b | grep $BIN_OLSR | awk '{print $11}')" | ||
+ | VTUN_TIME_1="$(top -p $PID_VTUN -n 1 -b | grep $BIN_VTUN | awk '{print $11}')" | ||
+ | |||
+ | sleep 60 | ||
+ | |||
+ | OLSR_TIME_2="$(top -p $PID_OLSR -n 1 -b | grep $BIN_OLSR | awk '{print $11}')" | ||
+ | VTUN_TIME_2="$(top -p $PID_VTUN -n 1 -b | grep $BIN_VTUN | awk '{print $11}')" | ||
+ | |||
+ | if [ "$OLSR_TIME_1" = "$OLSR_TIME_2" ]; then | ||
+ | $0 restart_olsr | ||
+ | fi | ||
+ | |||
+ | if [ "$VTUN_TIME_1" = "$VTUN_TIME_2" ]; then | ||
+ | $0 restart_tunnel | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | case $1 in | ||
+ | start) | ||
+ | fkt_infotext "Starting freifunk-VPN ..." | ||
+ | fkt_write_olsrd_conf | ||
+ | fkt_netcount_start | ||
+ | fi | ||
+ | |||
+ | if [ "$VTUN_TIME_1" = "$VTUN_TIME_2" ]; then | ||
+ | $0 restart_tunnel | ||
+ | fi | ||
} | } | ||
case $1 in | case $1 in | ||
start) | start) | ||
+ | fkt_infotext "Starting freifunk-VPN ..." | ||
fkt_write_olsrd_conf | fkt_write_olsrd_conf | ||
fkt_netcount_start | fkt_netcount_start | ||
Zeile 133: | Zeile 183: | ||
;; | ;; | ||
stop) | stop) | ||
+ | fkt_infotext "Stopping freifunk-VPN ..." | ||
fkt_kill_olsrd | fkt_kill_olsrd | ||
fkt_kill_vtund | fkt_kill_vtund | ||
Zeile 140: | Zeile 191: | ||
$0 stop | $0 stop | ||
$0 start | $0 start | ||
+ | ;; | ||
+ | restart_olsr) | ||
+ | fkt_infotext "Stopping/Starting freifunk-olsr ..." | ||
+ | fkt_kill_olsrd | ||
+ | fkt_start_olsrd | ||
+ | ;; | ||
+ | restart_tunnel) | ||
+ | fkt_infotext "Stopping/Starting freifunk-tunnel ..." | ||
+ | fkt_kill_vtund | ||
+ | fkt_start_vtund | ||
;; | ;; | ||
status) | status) | ||
Zeile 145: | Zeile 206: | ||
fkt_status_vtund | fkt_status_vtund | ||
fkt_status_netcount | fkt_status_netcount | ||
+ | ;; | ||
+ | check) | ||
+ | fkt_check_olsr_and_tunnel | ||
;; | ;; | ||
pingtest) | pingtest) | ||
Zeile 153: | Zeile 217: | ||
;; | ;; | ||
*) | *) | ||
− | echo "Usage: $0 (start|stop|restart|pingtest|status|ifup INTERFACE NODE)" | + | echo "Usage: $0 ( start |stop | restart | restart_olsr | restart_tunnel | pingtest | status | check | ifup INTERFACE NODE)" |
;; | ;; | ||
esac | esac | ||
+ | </pre> | ||
− | + | [[Kategorie:Firmware]] |
Aktuelle Version vom 9. März 2008, 20:59 Uhr
Funktionen
/etc/init.d/vpn start |stop | restart | restart_olsr | restart_tunnel | pingtest | status | check | ifup INTERFACE NODE
Die Funktion "check" wird alle 5 Minuten per cron ausgefuehrt und startet den Tunnel oder den OLSR-Dienst neu, falls keine CPU-Zeit mehr konsumiert wird.
Skript
#!/bin/sh fkt_infotext() { logger -p daemon.info -t $0 $1 echo $1 } fkt_write_olsrd_conf() { fkt_infotext "generating olsrd.conf ..." cp /etc/olsrd.conf_head /etc/olsrd.conf awk '/ifup/ {print $3,$12}' /etc/vtund.conf| while read IFACE NODE do cat>>/etc/olsrd.conf<<EOF Interface "$IFACE" { HelloInterval 50.0 HelloValidityTime 900.0 TcInterval 30.0 TcValidityTime 2700.0 MidInterval 150.0 MidValidityTime 2700.0 HnaInterval 150.0 HnaValidityTime 900.0 Ip4Broadcast 10.63.$NODE.253 LinkQualityMult default 0.1 } EOF done } fkt_netcount_start() { fkt_infotext "installing netfilter counters ..." iptables -N vpn_user_outgoing iptables -N vpn_olsr_outgoing iptables -N vpn_user_incoming iptables -N vpn_olsr_incoming iptables -I OUTPUT -o tap+ -j vpn_user_outgoing iptables -I OUTPUT -o tap+ -p udp --sport 698 -j vpn_olsr_outgoing iptables -I INPUT -i tap+ -j vpn_user_incoming iptables -I INPUT -i tap+ -p udp --dport 698 -j vpn_olsr_incoming awk '/ifup/ {print $3}' /etc/vtund.conf| while read IFACE do iptables -I vpn_user_outgoing -i $IFACE -j ACCEPT iptables -I vpn_olsr_outgoing -i $IFACE -j ACCEPT iptables -I vpn_user_incoming -i $IFACE -j ACCEPT iptables -I vpn_olsr_incoming -i $IFACE -j ACCEPT done } fkt_netcount_stop() { fkt_infotext "deleting netfilter counters ..." iptables -D OUTPUT -o tap+ -j vpn_user_outgoing iptables -D OUTPUT -o tap+ -p udp --sport 698 -j vpn_olsr_outgoing iptables -D INPUT -i tap+ -j vpn_user_incoming iptables -D INPUT -i tap+ -p udp --dport 698 -j vpn_olsr_incoming iptables -F vpn_olsr_outgoing iptables -F vpn_user_outgoing iptables -F vpn_olsr_incoming iptables -F vpn_user_incoming iptables -X vpn_olsr_outgoing iptables -X vpn_user_outgoing iptables -X vpn_olsr_incoming iptables -X vpn_user_incoming } fkt_start_vtund() { fkt_infotext "starting vtun-daemon ..." vtund -f /etc/vtund.conf -s } fkt_start_olsrd() { fkt_infotext "starting olsr-daemon ..." olsrd -f /etc/olsrd.conf -d 0 } fkt_kill_olsrd() { fkt_infotext "ending olsrd-process ..." PID=$(pidof olsrd) test ! -z "$PID" && kill PID=$(pidof olsrd) test ! -z "$PID" && kill -9 $PID } fkt_kill_vtund() { fkt_infotext "ending vtund-process ..." PID=$(pidof vtund) test ! -z "$PID" && kill $PID } fkt_interface_up() { fkt_infotext "starting interface $1 for node $2 ..." ip addr add dev $1 10.63.$2.254/30 brd 10.63.$2.255 ip link set $1 mtu 1450 up fkt_infotext "setting host-routes for node $2 ..." ip route add 10.63.$2.253 dev $1 } fkt_status_olsrd() { fkt_infotext "status olsrd:" } fkt_status_vtund() { fkt_infotext "status vtund:" ps ax| awk -F tap '/tap/ { if($2<99&&$2>=0){ NO=$2*1 printf("tap %2i - ",NO) system("grep \"device tap"NO" \" /etc/vtund.conf") } }'| sort } fkt_status_netcount() { fkt_infotext "status netcount:" iptables -nxvL INPUT iptables -nxvL FORWARD iptables -nxvL OUTPUT } fkt_pingall_clients() { awk '/ifup/ {printf $1": ";system("ping -c 3 10.63."$12".253 | grep \"64 bytes\"");print ""}' /etc/vtund.conf awk '/ifup/ {printf $1": ";system("ping -c 3 10.63."$12".1 | grep \"64 bytes\"");print ""}' /etc/vtund.conf } fkt_check_olsr_and_tunnel () { BIN_OLSR="olsrd" BIN_VTUN="vtund" PID_OLSR="$(pidof -s $BIN_OLSR)" PID_VTUN="$(pidof -s $BIN_VTUN)" OLSR_TIME_1="$(top -p $PID_OLSR -n 1 -b | grep $BIN_OLSR | awk '{print $11}')" VTUN_TIME_1="$(top -p $PID_VTUN -n 1 -b | grep $BIN_VTUN | awk '{print $11}')" sleep 60 OLSR_TIME_2="$(top -p $PID_OLSR -n 1 -b | grep $BIN_OLSR | awk '{print $11}')" VTUN_TIME_2="$(top -p $PID_VTUN -n 1 -b | grep $BIN_VTUN | awk '{print $11}')" if [ "$OLSR_TIME_1" = "$OLSR_TIME_2" ]; then $0 restart_olsr fi if [ "$VTUN_TIME_1" = "$VTUN_TIME_2" ]; then $0 restart_tunnel fi } case $1 in start) fkt_infotext "Starting freifunk-VPN ..." fkt_write_olsrd_conf fkt_netcount_start fi if [ "$VTUN_TIME_1" = "$VTUN_TIME_2" ]; then $0 restart_tunnel fi } case $1 in start) fkt_infotext "Starting freifunk-VPN ..." fkt_write_olsrd_conf fkt_netcount_start fkt_start_vtund fkt_start_olsrd ;; stop) fkt_infotext "Stopping freifunk-VPN ..." fkt_kill_olsrd fkt_kill_vtund fkt_netcount_stop ;; restart) $0 stop $0 start ;; restart_olsr) fkt_infotext "Stopping/Starting freifunk-olsr ..." fkt_kill_olsrd fkt_start_olsrd ;; restart_tunnel) fkt_infotext "Stopping/Starting freifunk-tunnel ..." fkt_kill_vtund fkt_start_vtund ;; status) fkt_status_olsrd fkt_status_vtund fkt_status_netcount ;; check) fkt_check_olsr_and_tunnel ;; pingtest) fkt_pingall_clients ;; ifup) fkt_interface_up $2 $3 ;; *) echo "Usage: $0 ( start |stop | restart | restart_olsr | restart_tunnel | pingtest | status | check | ifup INTERFACE NODE)" ;; esac