Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
gatewayserver_aufsetzen [2013/02/27 22:09] – mwarning | gatewayserver_aufsetzen [2014/08/10 18:09] – mwarning | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ===== Aufsetzen eines Gatewayservers | + | ===== Aufsetzen eines Servers/ |
- | Dieses Howto ist für Leute gedacht die selber einen Server bereitstellen wollen der als N2N Knotenpunkt und Gateway dient. Das heißt das viele Knoten (z.B. Router) sich über diesen Server verbinden | + | Dieses Howto ist für Leute gedacht die selber einen Server bereitstellen wollen der als Knotenpunkt und vielleicht auch als Gateway |
- | und zudem eine Internetanbindung zur Verfügung gestellt | + | Die Anleitung ist definitiv für fortgeschrittene Nutzer gedacht und wurde für Debian-artige Systeme |
- | Die Anleitung ist definitiv für fortgeschrittene Nutzer gedacht und wurde für Debiansysteme | + | |
* Einen fastd-Server [[fastd_server|aufsetzen]] | * Einen fastd-Server [[fastd_server|aufsetzen]] | ||
- | * Einen n2n-Server [[n2n_server|aufsetzen]] (alt) | ||
* Aufsetzen der [[statusseite_aufsetzen|Statusseite]]. | * Aufsetzen der [[statusseite_aufsetzen|Statusseite]]. | ||
* [[openvpn_gateway|Verbindung]] per OpenVPN ins Ausland | * [[openvpn_gateway|Verbindung]] per OpenVPN ins Ausland | ||
- | * [[splash_einrichten|Splash-Seite]] mit nodogsplash aufsetzen (alt) | ||
* Batman-adv [[batman_installieren|installieren]] | * Batman-adv [[batman_installieren|installieren]] | ||
+ | * [[splash_einrichten|Splash-Seite]] mit nodogsplash aufsetzen (optional) | ||
+ | * [[ic-vpn|Intercity-VPN]] einrichten | ||
+ | * [[autoupdater-setup|Autoupdater]] einrichten | ||
- | Anstatt einer N2N-Supernode kann der Server batürlich auch als edge am Freifunknetz teilnehmen | ||
- | und als Gateway funktionieren. Ebenso kann eine Server einfach nur eine Supernode, ohne Gateway, betreiben. | ||
+ | **Aufsetzen des Watchdog-Scriptes** | ||
- | **Installation von N2N** | + | Das Watchdog-Script testet den OpenVPN Anschluss on Internet verfügbar ist und |
+ | gibt das im Freifunk-Netz bekannt. | ||
- | apt-get install subversion | + | Das Script |
- | apt-get install libssl-dev | + | |
- | svn co https:// | + | |
- | cd n2n_v2 | + | |
- | make && make install | + | |
- | + | ||
- | **Installation von OpenVPN** | + | |
- | + | ||
- | apt-get install openvpn | + | |
- | + | ||
- | **Installation von BATMAN-adv** | + | |
- | + | ||
- | apt-get install build-essential | + | |
- | apt-get install linux-headers-$(uname -r) | + | |
- | + | ||
- | VERSION=2013.0.0 | + | |
- | + | ||
- | wget http:// | + | |
- | tar -xzf batctl-$VERSION.tar.gz | + | |
- | cd batctl-$VERSION/ | + | |
- | make && make install | + | |
- | + | ||
- | cd .. | + | |
- | + | ||
- | wget http:// | + | |
- | tar -xzf batman-adv-$VERSION.tar.gz | + | |
- | cd batman-adv-$VERSION/ | + | |
- | make && make install | + | |
- | + | ||
- | **Installation von Nodogsplash** | + | |
- | + | ||
- | Eine Splashseite ist nicht nötig; kann aber sinnvoll sein um Dauerbenutzer auszubremsen solange | + | |
- | kein traffic-shaping verwendet wird. | + | |
- | Nodogsplash funktioniert z.Z. nicht als 64bit Programm. Daher müssen wir es als 32bit kompilieren: | + | |
- | + | ||
- | apt-get install gcc-multilib | + | |
- | + | ||
- | git clone https:// | + | |
- | cd nodogsplash | + | |
- | CFLAGS=" | + | |
- | make | + | |
- | make install | + | |
- | + | ||
- | Wenn nodogsplash beim Start libhttpd.so.0 nicht findet muss noch " | + | |
- | + | ||
- | **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 / | + | |
- | + | ||
- | server.document-root = "/ | + | |
- | + | ||
- | server.port = 80 | + | |
- | server.bind = " | + | |
- | + | ||
- | server.username = " | + | |
- | server.groupname = " | + | |
- | mimetype.assign = ( | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | ) | + | |
- | + | ||
- | index-file.names = ( " | + | |
- | + | ||
- | 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 / | + | |
- | + | ||
- | # | + | |
- | + | ||
- | dst=" | + | |
- | src="/ | + | |
- | + | ||
- | #write stdout to file | + | |
- | exec >" | + | |
- | + | ||
- | convert() { | + | |
- | echo $1 | awk '{ | + | |
- | split(" | + | |
- | c=1; x=$1 | + | |
- | while (x>=1024 && c<8) {x/=1024; c++} | + | |
- | xf=(c==1)?" | + | |
- | printf(xf" | + | |
- | }' | + | |
- | } | + | |
- | + | ||
- | handle() { | + | |
- | local ifname=" | + | |
- | ifconfig " | + | |
- | + | ||
- | get() { cat "/ | + | |
- | + | ||
- | tx_bytes=`get tx_bytes` | + | |
- | rx_bytes=`get rx_bytes` | + | |
- | + | ||
- | avg_time=5 | + | |
- | sleep $avg_time | + | |
- | tx_speed=$(((`get tx_bytes`-$tx_bytes)/ | + | |
- | rx_speed=$(((`get rx_bytes`-$rx_bytes)/ | + | |
- | + | ||
- | # | + | |
- | + | ||
- | echo '< | + | |
- | echo " | + | |
- | echo " | + | |
- | echo '</ | + | |
- | } | + | |
- | + | ||
- | echo '< | + | |
- | echo '< | + | |
- | echo '< | + | |
- | echo '< | + | |
- | echo '</ | + | |
- | echo '< | + | |
- | + | ||
- | echo '< | + | |
- | echo "< | + | |
- | + | ||
- | echo '< | + | |
- | echo '< | + | |
- | echo '< | + | |
- | echo '< | + | |
- | echo '< | + | |
- | echo '</ | + | |
- | echo '< | + | |
- | echo '< | + | |
- | echo '< | + | |
- | echo '< | + | |
- | echo '< | + | |
- | echo '< | + | |
- | echo '</ | + | |
- | echo '</ | + | |
- | + | ||
- | handle " | + | |
- | handle " | + | |
- | + | ||
- | + | ||
- | u=`uptime` | + | |
- | load=" | + | |
- | u=" | + | |
- | uptime=" | + | |
- | hdd=`df -h | grep '/ | + | |
- | + | ||
- | echo '< | + | |
- | echo " | + | |
- | echo " | + | |
- | echo '</ | + | |
- | + | ||
- | echo '</ | + | |
- | echo '</ | + | |
- | + | ||
- | #move to final destiantion | + | |
- | mv " | + | |
- | + | ||
- | exit 0 | + | |
- | + | ||
- | Das obige Script | + | |
- | Dafür wird ein Eintrag in die / | + | |
- | + | ||
- | < | + | |
- | + | ||
- | Das gewählte Inhaltsverzeichnis muss noch erstellt werden: | + | |
- | + | ||
- | mkdir / | + | |
- | + | ||
- | Bevor lighttpd gestartet wird wird dafür noch eine Nutzer und eine Gruppe angelegt: | + | |
- | + | ||
- | groupadd www | + | |
- | useradd -g www -d / | + | |
- | + | ||
- | chown -R www:www / | + | |
- | chmod -R 775 / | + | |
- | + | ||
- | Nun kann der Webserver gestartet werden. | + | |
- | + | ||
- | / | + | |
- | + | ||
- | *vnstat* | + | |
- | + | ||
- | apt-get install php5-cgi | + | |
- | apt-get install vnstat | + | |
- | vnstat -u -i n2n_bat | + | |
- | vnstat -u -i tun0 | + | |
- | + | ||
- | In der / | + | |
- | Interface " | + | |
- | Interface ' | + | |
- | + | ||
- | In / | + | |
- | server.modules = (" | + | |
- | fastcgi.server = ( " | + | |
- | " | + | |
- | " | + | |
- | ))) | + | |
- | + | ||
- | und | + | |
- | index-file.names = ( " | + | |
- | + | ||
- | wird durch | + | |
- | + | ||
- | index-file.names = ( " | + | |
- | + | ||
- | ersetzt | + | |
- | + | ||
- | Nun muss nur noch das php-frontend (http:// | + | |
- | Alle Interfaces müssen als array aufgeführt sein: | + | |
- | $iface_list = array(' | + | |
- | + | ||
- | und für Jedes Interface wird noch ein Titel vergeben | + | |
- | $iface_title[' | + | |
- | $iface_title[' | + | |
- | $iface_title[' | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | **Konfiguration von N2N/ | + | |
- | + | ||
- | Da diese Node als Server und Gateway laufen soll muss eine supernode-Instanz und eine edge-Instanz gestartet werden. | + | |
- | + | ||
- | Es wird noch tunctl und brctl benötigt: | + | |
apt-get install uml-utilities | apt-get install uml-utilities | ||
Zeile 261: | Zeile 30: | ||
date | date | ||
| | ||
- | n2n_port=60211 | ||
mesh_mac=`cat / | mesh_mac=`cat / | ||
| | ||
Zeile 306: | Zeile 74: | ||
} | } | ||
| | ||
- | if is_running "supernode"; then | + | if is_running "fastd"; then |
- | echo " | + | echo " |
else | else | ||
- | echo "(I) Start N2N supernode." | + | echo "(I) Start Fastd supernode." |
- | | + | |
fi | fi | ||
- | | ||
- | if is_running " | ||
- | echo "(I) N2N edge is running." | ||
- | else | ||
- | echo "(I) Start N2N edge." | ||
- | edge -d n2n_bat -a 0.0.0.0 -c ffb1 -l localhost:" | ||
- | fi | ||
- | |||
| | ||
if batctl o &> /dev/null; then | if batctl o &> /dev/null; then | ||
Zeile 329: | Zeile 89: | ||
| | ||
echo "(I) Detach all interfaces from batman-adv." | echo "(I) Detach all interfaces from batman-adv." | ||
- | batctl if del n2n_bat | + | batctl if del fastd_bat |
batctl if del dummy_bat &> /dev/null | batctl if del dummy_bat &> /dev/null | ||
| | ||
Zeile 337: | Zeile 97: | ||
ifconfig dummy_bat hw ether " | ifconfig dummy_bat hw ether " | ||
batctl if add dummy_bat || error " | batctl if add dummy_bat || error " | ||
- | batctl if add n2n_bat | + | batctl if add fastd_bat |
ifconfig bat0 up | ifconfig bat0 up | ||
| | ||
Zeile 352: | Zeile 112: | ||
brctl addif br-mesh bat0 | brctl addif br-mesh bat0 | ||
echo "(I) Set IP ' | echo "(I) Set IP ' | ||
- | ifconfig br-mesh " | + | ifconfig br-mesh " |
fi | fi | ||
| | ||
is_running " | is_running " | ||
| | ||
- | vpn_interface=" | + | vpn_interface=" |
ping_servers() | ping_servers() | ||
{ | { | ||
Zeile 388: | Zeile 148: | ||
if ifconfig " | if ifconfig " | ||
echo "(I) Internet access on ' | echo "(I) Internet access on ' | ||
- | batctl gw_mode server | + | batctl gw_mode server |
else | else | ||
echo "(I) No Internet access on ' | echo "(I) No Internet access on ' | ||
Zeile 405: | Zeile 165: | ||
chmod a+x freifunk_watchdog | chmod a+x freifunk_watchdog | ||
- | **Konfiguration von nodogsplash** | + | Ein Eintrag in /etc/hosts sorgt dafür das der Name "node" |
- | + | die jeder Router hat. Damit läßt sich der Router, mit dem man verbunden | |
- | Für die Konfigurationsdatei | + | |
- | + | ||
- | # | + | |
- | # Nodogsplash Configuration File | + | |
- | # | + | |
- | # For the config file documentation along with examples look at | + | |
- | # the default configuration file of the nodogsplash package: | + | |
- | # https:// | + | |
- | # | + | |
- | # For the general documentation look here: | + | |
- | # http:// | + | |
- | + | ||
- | GatewayInterface bat0 | + | |
- | + | ||
- | FirewallRuleSet preauthenticated-users { | + | |
- | FirewallRule allow tcp port 53 | + | |
- | FirewallRule allow udp port 53 | + | |
- | } | + | |
- | + | ||
- | EmptyRuleSetPolicy authenticated-users passthrough | + | |
- | EmptyRuleSetPolicy users-to-router passthrough | + | |
- | EmptyRuleSetPolicy trusted-users allow | + | |
- | EmptyRuleSetPolicy trusted-users-to-router passthrough | + | |
- | + | ||
- | MaxClients 80 | + | |
- | ClientIdleTimeout 10 | + | |
- | ClientForceTimeout 240 | + | |
- | + | ||
- | Der Inhalt von / | + | |
- | + | ||
- | **Konfiguration von OpenVPN** | + | |
- | + | ||
- | Zuerst sorgen wir dafür das OpenVPN beim Booten nicht automatisch startet: | + | |
- | + | ||
- | update-rc.d -f openvpn remove | + | |
- | + | ||
- | Die Konfiguration für OpenVPN kommt vom VPN-Anbieter in Form einer komprimierten | + | |
- | Datei die nach / | + | |
- | + | ||
- | unzip 1234.zip | + | |
- | cp -f 1234/* / | + | |
- | rm -rf 1234 | + | |
- | + | ||
- | In der Konfigurationsdatei / | + | |
- | müssen die beiden Zeilen die mit "up" | + | |
- | Zusätzlich werden | + | |
- | + | ||
- | echo "route-noexec" | + | |
- | echo " | + | |
- | + | ||
- | Damit wird OpenVPN so eingestellt das die routing-Tabelle main (ip route show table main) | + | |
- | nicht verändert wird und stattdessen ein Script (update-route) aufgerufen wird das die Einträge | + | |
- | vom DHCP Server in einen eigene Tabelle " | + | |
- | + | ||
- | Das Script / | + | |
- | + | ||
- | # | + | |
- | #Script called by OpenVPN with network/ | + | |
- | + | ||
- | vpn_interface=" | + | |
- | vpn_gateway=" | + | |
- | mesh_interface=" | + | |
- | + | ||
- | exec >/ | + | |
- | date | + | |
- | + | ||
- | echo "(I) vpn_interface: | + | |
- | echo "(I) vpn_gateway: | + | |
- | echo "(I) mesh_interface: | + | |
- | + | ||
- | #setup table if it does not exist yet | + | |
- | ip route show table vpn &> /dev/null || echo 100 vpn >> / | + | |
- | + | ||
- | #cleanup previous table | + | |
- | ip rule del table vpn &> /dev/null | + | |
- | while ip route del default table vpn &> /dev/null; do true; done | + | |
- | + | ||
- | #set new gateway in openvon network | + | |
- | ip route add default via " | + | |
- | ip rule add dev " | + | |
- | ip route flush cache | + | |
- | + | ||
- | #enable packet forwarding to function s a router | + | |
- | echo 1 > / | + | |
- | iptables --append FORWARD --in-interface " | + | |
- | #Enable MASQUERADE to function as a NAT router | + | |
- | iptables --table nat --append POSTROUTING --out-interface " | + | |
- | + | ||
- | + | ||
- | Die Datei muss noch ausführbar gemacht werden: | + | |
- | + | ||
- | chmod a+x / | + | |
- | + | ||
- | Zugriff auf dem Server per ssh aus dem Freifunknetz (über bat0) ist weiterhin möglich. | + | |
- | Um den Zugriff zu verhindern bitte " | + | |
- | + | ||
- | **VPN-Test / Durchsatz vom VServer über den VPN-Endpunkt** | + | |
- | + | ||
- | abends | + | |
- | root@ffbi-gw1: | + | |
- | ------------------------------------------------------------ | + | |
- | Client connecting to < | + | |
- | TCP window size: 16.0 KByte (default) | + | |
- | ------------------------------------------------------------ | + | |
- | [ 3] local 10.8.0.190 port 42312 connected with < | + | |
- | [ ID] Interval | + | |
- | [ 3] 0.0-10.1 sec 12.6 MBytes | + | |
- | root@ffbi-gw1: | + | |
- | ------------------------------------------------------------ | + | |
- | Client connecting to < | + | |
- | TCP window size: 16.0 KByte (default) | + | |
- | ------------------------------------------------------------ | + | |
- | [ 3] local 10.8.0.190 port 42313 connected with < | + | |
- | [ ID] Interval | + | |
- | [ 3] 0.0-10.0 sec 19.2 MBytes | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | morgens, 10:15 | + | |
- | | + | |
- | ------------------------------------------------------------ | + | |
- | Client connecting to < | + | |
- | TCP window size: 16.0 KByte (default) | + | |
- | ------------------------------------------------------------ | + | |
- | [ 3] local 10.8.0.190 port 42314 connected with < | + | |
- | [ ID] Interval | + | |
- | [ 3] 0.0-10.0 sec 18.5 MBytes | + | |
- | root@ffbi-gw1:~# iperf -c < | + | |
- | ------------------------------------------------------------ | + | |
- | Client connecting to < | + | |
- | TCP window size: 16.0 KByte (default) | + | |
- | ------------------------------------------------------------ | + | |
- | [ 3] local 10.8.0.190 port 42315 connected with <****> port 5001 | + | |
- | [ ID] Interval | + | |
- | [ 3] 0.0-10.1 sec 20.8 MBytes | + | |
- | root@ffbi-gw1: | + | |
- | ------------------------------------------------------------ | + | |
- | Client connecting to < | + | |
- | TCP window size: 16.0 KByte (default) | + | |
- | ------------------------------------------------------------ | + | |
- | [ 3] local 10.8.0.190 port 42316 connected with < | + | |
- | [ ID] Interval | + | |
- | [ 3] 0.0-10.1 sec 23.8 MBytes | + | |
- | root@ffbi-gw1: | + | |
- | ------------------------------------------------------------ | + | |
- | Client connecting to < | + | |
- | TCP window size: 16.0 KByte (default) | + | |
- | ------------------------------------------------------------ | + | |
- | [ 3] local 10.8.0.190 port 42317 connected with < | + | |
- | [ ID] Interval | + | |
- | [ 3] 0.0-10.0 sec 16.4 MBytes | + |