Dies ist eine alte Version des Dokuments!
Dieses Howto ist für Leute gedacht die selber einen Server bereitstellen wollen der als Knotenpunkt und vielleicht auch als Gateway (Exit-Node/Gateway) dient. Das heißt das viele Knoten (z.B. Router) sich über diesen Server verbinden und Daten austauschen können. Ebenso kann für alle Nutzer eine Internetanbindung über einen VPN-Provider zur Verfügung gestellt werden. Die Anleitung ist definitiv für fortgeschrittene Nutzer gedacht und wurde für Debian-artige Systeme geschrieben.
Aufsetzen des Watchdog-Scriptes
Das Watchdog-Script testet den OpenVPN Anschluss on Internet verfügbar ist und gibt das im Freifunk-Netz bekannt.
Das Script bemötigt noch tunctl und brctl:
apt-get install uml-utilities apt-get install bridge-utils
Dieses Script konfiguriert und startet die Dienste.
#!/bin/bash
exec >/var/log/freifunk_watchdog.log 2>&1
date
mac2ip()
{
#Get the IP of a node by MAC.
mac=$1
ff_subnet=29
[ -z "$mac" -o -z "$ff_subnet" -o ${#mac} -ne 17 ] && {
echo "0.0.0.0"
exit 1
}
seed=0
for x in $(echo $mac | tr ":" "\n"); do
seed=$((seed + 0x$x + (0x$x << 8) + (0x$x << 16)))
done
addr_t=$((1900545 + (seed % 65278)))
addr_c=$(((addr_t & 0xff00) >> 8))
addr_d=$(((addr_t & 0x00ff) >> 0))
echo "10.$ff_subnet.$addr_c.$addr_d"
}
is_running() {
ps aux | grep -v grep | grep "$1" > /dev/null
}
error() {
echo "(E) $1"
exit 1
}
fastd --config /etc/fastd/fastd.conf --daemon
modprobe batman-adv
batctl if add fastd_mesh
ip link set dev bat0 up
brctl addbr br-mesh
brctl addif br-mesh bat0
echo "client" > /sys/class/net/bat0/mesh/gw_mode
echo "3000" > /sys/class/net/bat0/mesh/orig_interval
echo "1" > /sys/class/net/bat0/mesh/bridge_loop_avoidance
echo "(I) Set IP '$mesh_ip' for bat0."
mesh_mac=`cat /sys/kernel/debug/batman_adv/bat0/originators | head -1 | grep -io '[0-9a-f:]\{17\}'`
mesh_ip=`mac2ip "$mesh_mac"`
ifconfig br-mesh "$mesh_ip" netmask 255.255.0.0 up
alfred -i br-mesh -b bat0 -m &
#is_running "openvpn " || /etc/init.d/openvpn start
vpn_interface="vpn_exit"
ping_servers()
{
echo "(I) Try to ping root servers on '$vpn_interface':"
#shuffle list and pick n entries
pick()
{
local n=$1; shift;
local s="`echo \"$@\" | tr ' ' '\n' | awk 'BEGIN { srand() } { print rand() "\t" $0 }' | sort -n | cut -f2- | tr '\n' ' '`"
get() { shift $(($#-$1)); echo "$@"; }
get $n $s
}
#check if any root server can be reached via default gateway and wan interface
IPCHECK="192.33.4.12 128.8.10.90 193.0.14.129 198.41.0.4 192.228.79.201 192.5.5.241 192.36.148.17 192.58.128.30"
for ip in `pick 3 $IPCHECK`; do
echo -n "(I) Ping '$ip' "
if ping $ip -c 1 -I $vpn_interface -q -W 1 > /dev/null 2>&1; then
echo "- success."
return 0
else
echo "- failed."
fi
done
echo "(W) Cannot reach any tested IP."
return 1
}
if ifconfig "$vpn_interface" &> /dev/null && ping_servers; then
echo "(I) Internet access on '$vpn_interface' => Server mode."
batctl gw_mode server 8MBit/8MBit
else
echo "(I) No Internet access on '$vpn_interface'. => Client mode."
batctl gw_mode client
fi
echo "(I) Done."
Dieses Script kann einmal nach dem Systemstart oder regelmäßig durch cron aufgerufen werden. Dafür muss folgende Zeile an die /etc/crontab angehängt werden:
*/5 * * * * root /root/freifunk_watchdog > /dev/null
Wichig ist dabei, dass das Script ausführbar ist:
chmod a+x freifunk_watchdog
Ein Eintrag in /etc/hosts sorgt dafür das der Name „node“ in eine Anycast-Adresse übersetzt wird die jeder Router hat. Damit läßt sich der Router, mit dem man verbunden ist, bequemer finden.
echo "fdef:17a0:ffb1::0 node" >> /etc/hosts