Installation der Statusseite
Eine kleine Statusseite die den Verkehr und den Status des Gateways anzeigt. Dafür wird lighttpd und ein CGI-Script verwendet.
apt-get install lighttpd apt-get install gawk
gawk wird für das CGI-Script benötigt. Der Inhalt von /etc/lighttpd/lighttpd.conf:
server.document-root = "/etc/lighttpd/www/"
server.port = 80
server.bind = "10.29.x.y"
$SERVER["socket"] == "10.29.x.y:80" {}
server.username = "www"
server.groupname = "www"
mimetype.assign = (
".html" => "text/html",
".txt" => "text/plain",
".jpg" => "image/jpeg",
".png" => "image/png",
".css" => "text/css"
)
index-file.names = ( "index.html" )
In der Konfigurationsdatei muss anstatt 10.29.x.y die korrekte IP eingetragen werden unter der die Statusseite im Freifunknetz erreichbar sein soll.
Der Inhalt von /etc/lighttpd/generate.sh:
#!/bin/bash
dst="$1"
src="/tmp/freifunk_status"
vpn_if='fastd_bat'
wan_if='vpnexit'
avg_time=5
#write stdout to file
exec >"$src" 2>&1
convert() {
echo $1 | awk '{
split("B,KiB,MiB,GiB,TiB,EiB,PiB,YiB,ZiB", s, ",")
c=1; x=$1
while (x>=1024 && c<8) {x/=1024; c++}
xf=(c==1)?"%d":"%.2f"
printf(xf" %s\n", x, s[c])
}'
}
vpn_tx1_bytes=`cat "/sys/class/net/$vpn_if/statistics/tx_bytes"`
vpn_rx1_bytes=`cat "/sys/class/net/$vpn_if/statistics/rx_bytes"`
wan_tx1_bytes=`cat "/sys/class/net/$wan_if/statistics/tx_bytes"`
wan_rx1_bytes=`cat "/sys/class/net/$wan_if/statistics/rx_bytes"`
sleep $avg_time
vpn_tx2_bytes=`cat "/sys/class/net/$vpn_if/statistics/tx_bytes"`
vpn_rx2_bytes=`cat "/sys/class/net/$vpn_if/statistics/rx_bytes"`
wan_tx2_bytes=`cat "/sys/class/net/$wan_if/statistics/tx_bytes"`
wan_rx2_bytes=`cat "/sys/class/net/$wan_if/statistics/rx_bytes"`
wan_tx_speed=$((($wan_tx2_bytes-$wan_tx1_bytes)/$avg_time))
wan_rx_speed=$((($wan_rx2_bytes-$wan_rx1_bytes)/$avg_time))
vpn_tx_speed=$((($vpn_tx2_bytes-$vpn_tx1_bytes)/$avg_time))
vpn_rx_speed=$((($vpn_rx2_bytes-$vpn_rx1_bytes)/$avg_time))
wan_tx_str="`convert $wan_tx2_bytes` (`convert $wan_tx_speed`/s)"
wan_rx_str="`convert $wan_rx2_bytes` (`convert $wan_rx_speed`/s)"
vpn_tx_str="`convert $vpn_tx2_bytes` (`convert $vpn_tx_speed`/s)"
vpn_rx_str="`convert $vpn_rx2_bytes` (`convert $vpn_rx_speed`/s)"
u=`uptime`
load="${u##*:}"
u="${u%%,*}"
uptime="${u##*up}"
hdd=`df -h | grep '/$' | cut -d' ' -f 20`
echo '<html>'
echo '<head>'
echo '<title>Gateway-Status</title>'
echo '<link rel="stylesheet" type="text/css" href="style.css">'
echo '</head>'
echo '<body>'
echo '<br /><br />'
echo '<h2>Statusseite des Gateways vpnx.freifunk-bielefeld.de</h2>'
echo '<center>('`date`')</center>'
echo '<table>'
echo '<tr style="vertical-align:bottom;">'
echo '<td id="left_top">'$wan_tx_str'</td>'
echo '<td id="middle_top"><b>Load:</b>'$load'<br><b>Uptime:</b>'$uptime'</td>'
echo '<td id="right_top">'$vpn_rx_str'</td>'
echo '</tr>'
echo '<tr>'
echo '<td colspan=3><img src="schema.png" class="schema"></td></tr>'
echo '<tr style="vertical-align:top;">'
echo '<td id="left_bottom">'$wan_rx_str'</td>'
echo '<td id="middle_bottom"><b>HDD:</b> '$hdd'<br><a href="vnstat/">Traffic Statistics</a></td>'
echo '<td id="right_bottom">'$vpn_tx_str'</td>'
echo '</tr>'
echo '</table>'
echo '</body>'
echo '</html>'
#move to final destination
mv "$src" "$dst"
exit 0
Für die Statusseite werde zusätzlich die beiden Dateien style.css und schema.png benötigt.
cd /etc/lighttpd/www wget http://freifunk-bielefeld.de/lib/exe/fetch.php?media=style.css.zip -O style.css wget http://freifunk-bielefeld.de/lib/exe/fetch.php?media=schema.png -O schema.png
Das obige Script generiert die Statusseite und soll alle zwei Minuten ausgeführt werden. Dafür wird ein Eintrag in die /etc/crontab vorgenommen:
*/2 * * * * www /etc/lighttpd/generate.sh '/etc/lighttpd/www/index.html'
Natürlich muss das script auch ausführbar sein:
chmod a+x /etc/lighttpd/generate.sh
Das Verzeichnis für den Inhalt muss noch erstellt werden:
mkdir /etc/lighttpd/www
Bevor lighttpd gestartet wird wird dafür noch eine Nutzer und eine Gruppe angelegt:
groupadd www useradd -g www -d /etc/lighttpd/www -s /sbin/nologin www chown -R www:www /etc/lighttpd/www/ chmod -R 775 /etc/lighttpd/www/
Nun kann der Webserver gestartet werden.
/etc/init.d/lighttpd start
vnStat
vnStat protokolliert den Netzwerkverkehr auf mehreren Anschlüssen und listest das Volumen je Minute/Stunde/Tag/Monat auf.
apt-get install php5-cgi apt-get install vnstat vnstat -u -i fastd_bat vnstat -u -i tun0 vnstat -u -i icvpn
In der /etc/vnstat.conf muss unter #default Interface:
Interface "tun0" Interface "fastd_bat" Interface "icvpn"
ergänzt werden
In /etc/lighttpd/lighttpd.conf muss dann hinzugefügt werden:
server.modules = ("mod_fastcgi")
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket"
)))
und
index-file.names = ( "index.html" )
wird durch
index-file.names = ( "index.html", "index.php" )
ersetzt
Nun muss nur noch das php-frontend in den richtigen Pfad heruntergeladen und entpackt werden und die /etc/lighttpd/www/vnstat/config.php angepasst werden:
wget http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.5.1.tar.gz tar -xvzf vnstat_php_frontend-1.5.1.tar.gz mv vnstat_php_frontend-1.5.1 /etc/lighttpd/www/vnstat
Alle Interfaces müssen als array aufgeführt sein:
$iface_list = array('tun0', 'fastd_bat', 'icvpn', 'eth0');
und für jedes Interface wird noch ein Titel vergeben
$iface_title['tun0'] = 'Exit-VPN'; $iface_title['fastd_bat'] = 'Freifunk intern'; $iface_title['icvpn'] = 'IC-VPN'; $iface_title['eth0'] = 'Netzwerkkarte';