L2TP und Tunneldigger

Veraltet!
Die neuere Node-Firmware > 20181202 unterstützt keinen Tunneldigger mehr!
__TOC__
Seit der Firmware 20161008-beta ist der Tunneldigger für l2tp Tunnel zum Gateway mit dabei.
Hier die Anleitung, wie man den Tunnelbroker auf einem Gateway installiert und konfiguriert.
Vorteile: 
Weniger CPU Last auf den Gateway Servern und den Routern.
Mehr Durchsatz durch die Tunnel.
Nachteile:
Auf kleinen Gateways (Vserver, 1 Kern) kommt es bei vielen Tunnel >100 zu Problemen. Die CPU Last steigt überproportional zur Tunnelzahl. Besonders ein Anstieg von si - software interrupts ist zu beobachten und es kommt zur Kernelpanic.
=Am Router=
Eine Firmware ab 20161008-beta oder neuer flashen.
Es wird die Datei vpn.txt auf dem GW geprüft, wenn mit Inhalt l2tp vorhanden, dann l2tp sonst fastd.
 
Am Router muss nichts konfiguriert werden!
=Am Gateway (KeyXchangev2!!)=
So, jetzt brauchen wir noch Gateways mit dem Broker. Nebenbei braucht der Gateway auch noch ein Webserver, die Clients fragen ob ein Gateway l2tp anbietet oder nicht.
==Vorbereitungen:==
Nötige Pakete holen:
 apt-get install iproute bridge-utils libnetfilter-conntrack-dev libnfnetlink-dev libffi-dev python-dev libevent-dev ebtables python-virtualenv
 apache2
Module
In /etc/modules die Module eintragen:
 l2tp_core
 l2tp_eth
 l2tp_netlink
Mit modprobe "name des Moduls" kann man dann alle Module laden. Beim nächsten reboot geht das dann automatisch.
 modprobe l2tp_core
 modprobe l2tp_eth
 modprobe l2tp_netlink
==Installation:==
Eine Installationsanleitung findet man hier:
 https://tunneldigger.readthedocs.io/en/latest/server.html
Es gibt auch eine angepasste Version des Brokers für die fff-Gateways.
Hierfür die Anleitung:
 mkdir /srv/tunneldigger
 cd /srv/tunneldigger 
 virtualenv env_tunneldigger 
 git clone https://github.com/rohammer/tunneldigger.git
 source env_tunneldigger/bin/activate 
 cd /srv/tunneldigger/tunneldigger/broker 
 python setup.py install
==Konfiguration:==
Im Brokerverzeichnis findet ihr eine Beispielkonfigdatei: l2tp_broker.cfg.example. Wir brauchen für jede Hood eine Konfigdatei.
Diese Datei kopieren wir für jede Hood einmal nach /etc/tunneldigger/
 mkdir /etc/tunneldigger
 cp /srv/tunneldigger/tunneldigger/broker/l2tp_broker.cfg.example /etc/tunneldigger/hood.cfg
In die Konfigdatei die Parameter der Hood eintragen. Die Datei ist selbsterklärend.
==Start einrichten==
Wir legen für jede Hood eine systemd unit Datei an:
Z.B. /etc/systemd/system/td-broker-hood.service
 [Unit]
 Description=tunneldigger tunnelling network daemon using l2tpv3
 After=network.target auditd.service
 
 [Service]
 Type=simple
 WorkingDirectory=/srv/tunneldigger/tunneldigger
 ExecStart=/srv/tunneldigger/env_tunneldigger/bin/python -m tunneldigger_broker.main /etc/tunneldigger/hood.cfg
 
 KillMode=process
 Restart=on-failure
 
 [Install]
 WantedBy=multi-user.target
==Unit aktivieren==
 systemctl enable td-broker-hood.service
==Broker starten==
 systemctl start td-broker-hood.service
Der Broker startet beim nächsen Booten automatisch.
==Den Routern mitteilen, dass wir l2tp anbieten==
Erst aktivieren, wenn für alle Hoods des Gateways die Konfiguration gemacht wurde!!
Im DocumentRoot des Webservers die Datei vpn.txt mit Inhalt l2tp anlegen
 echo l2tp > vpn.txt
Danach verbinden sich die Router via l2tp.
==Kontrolle==
- über systemctl status td-broker-xxx.service kann man den Status erfragen.
- mit ip link sieht man für jeden Router ein l2tpXXXX Device mit der entsprechenden Bridge als master.
- mit ip l2tp show tunnel sieht man die einzelnen Tunnel
- mit ip l2tp show session die entsprechenden Devices
- der Broker sollte auch die entsprechenden SNAT und DNAT Einträge gemacht haben: iptables -L -t nat
- das Log mit journalctl -u td-broker-HOOD.service
==Broker für eine Hood wieder los werden==
Beispielhood: hawaii 
Service stoppen: (Tipp: Tab-Taste)
 systemctl stop td-broker-hawaii.service 
Service ausschalten:
 systemctl disable td-broker-hawaii.service 
Wenn man die ganze Konfiguration weg haben will, geht es weiter.
Unit löschen:
 rm /etc/systemd/system/td-broker-hawaii.service
systemd davon in Kenntnis setzen:
 systemctl daemon-reload
Konfigdateien löschen:
 rm /etc/hawaii.cfg