Moin,
@Fungur, @Parad0x, @descilla und ich haben die Münsteraner Ansible-Konfiguration jetzt an einem Punkt, an dem sie eventuell auch für andere interessant wird.
Bisher war sie auf unseren eher komplexen Aufbau mit eigenem, kleinen Backbone ausgelegt, sodass die FFRL-Anbindung und die Endpunkte der Batman-Domänen auf verschiedenen Servern oder VMs lagen. Jetzt ist es auch möglich über eine IPV4 respektive eine VM oder einen Server ohne Virtualisierung eine FFRL-Anbindung und mehrere getrennte Layer-2 Domänen zu managen.
Dies soll also eine Minimalanleitung sein, die sich an kleine Communities richtet, die damit anfangen wollen, eigene Infrastruktur zu betreuen und bisher eher wenige Kenntnisse zur Linuxadministration gesammelt haben.
Ausgangssituation: Ein Server oder eine VM mit Debian 8, einer öffentlichen IPV4 und einer möglichst guten Internetanbindung. (100 Mbit/s werden erfahrungsgemäß schnell voll, besser Gigabit.)
Auf dem Rechner ist ein ssh-Zugang für root vorhanden, in /root/.ssh/authorized_keys ist ein entsprechendes Zertifikat hinterlegt, und python ist für ansible auch installiert.
Außerdem wird eine separate Linux-Kiste benötigt, um Ansible auszurollen. Dies kann z. B. ein Raspberry Pi sein, aber auch irgendwas angemietetes im Internet, sofern ihr Linux noch nicht als Desktopbetriebssystem nutzt. Dorthin verbindet ihr euch von Windows aus per Putty. Habt ihr schon eine Linuxinstallation auf dem Rechner, mit dem ihr arbeiten wollt, ist das nicht erforderlich.
-
Von wo auch immer ihr arbeitet, zunächst wird Ansible benötigt: http://docs.ansible.com/ansible/intro_installation.html#installing-the-control-machine
-
Zusätzlich zur Core-Installation von Ansible wird noch das Paket netaddr benötigt:
pip install netaddr
-
Dann unser Ansible-ffms-Repo klonen:
git clone https://github.com/FreiFunkMuenster/ansible-ffms
Ggfs. muss vorher git installiert werden, unter Debian und dessen Derivaten geht das mit
apt-get install git
-
Da wir die Skripte nicht von unserer Konfiguration trennen, müsste das Repo geforked und die hosts, host_vars/* und die group_vars/* geleert werden.
-
Nun müssen ein paar Konfigurationsdateien gesetzt werden, beginnend mit group_vars/all:
Hierbei ist die Einrückung entscheidend. Jede neue Ebene sollte um zwei bis drei Leerzeichen eingerückt sein, damit Ansible die Struktur korrekt erkennt.
domaenen:
"01":
name: Münster
community: Münster
ffv4_network: 10.43.8.0/21
ffv6_network: 2a03:2260:115:100::/64
map_scale: 0.9
firmware: domaene01/
"02":
name: Kreis Coesfeld
community: Kreis Coesfeld
ffv4_network: 10.43.16.0/21
ffv6_network: 2a03:2260:115:200::/64
map_scale: 1.1
firmware: domaene02/
routing_table: 42
batman:
downstream: 1024Mbit
upstream: 1024Mbit
dhcp_global:
mtu: 1280
lease_default: 240
lease_max: 1200
ff_network:
as_number: 65251
v4_network: 10.43.0.0/16
v6_network: 2a03:2260:115::/48
hostname_suffix: ".servers.freifunk-muensterland.de"
administratorenteam:
- "admin1"
- "admin2"
Hier müssen pro Domäne (es gehen beliebig viele) ein paar Parameter gesetzt werden, sowie das Administratorenteam festgelegt werden. Jeder Admin braucht einen gleichnamigen admin.pub im keyfiles-Ordner.
- Als nächstes wird mindestens ein Host benötigt, also eine Datei host_vars/host1 mit folgendem Inhalt anlegen:
vm_id: 2
server_id: 2
server_besitzer: "Name des Eigentümers"
server_ipv4_nat: 185.66.193.51/32
ffrl_tun:
- name: dus
gre_target: 185.66.193.0
v4_local: 100.64.0.209/31
v4_remote: 100.64.0.208/31
v6_local: 2a03:2260:0:6e::2/64
v6_remote: 2a03:2260:0:6e::1/64
- name: fra
gre_target: 185.66.194.0
v4_local: 100.64.0.207/31
v4_remote: 100.64.0.206/31
v6_local: 2a03:2260:0:6d::2/64
v6_remote: 2a03:2260:0:6d::1/64
domaenenliste:
"01":
dhcp_start: 10.43.96.26
dhcp_ende: 10.43.99.255
server_id: 2
"02":
dhcp_start: 10.43.104.26
dhcp_ende: 10.43.107.255
server_id: 2
Die vm_id muss für alle eure Server und VMs eindeutig sein. Die Server_ID muss pro Domäne eindeutig sein. Die Zahlen können identisch sein und müssen größer eins sein. Den Besitzer notieren wir, damit die Admins wissen, in wessen Namen sie gerade Blödsinn anstellen. Die NAT- und sämtliche Tunnel-IPs erhaltet ihr vom FFRL-Backbone-Team zusammen mit den restlichen Daten für eure Anbindung und müsst diese hier eintragen. Es können beliebig viele Tunnel eingetragen werden, tragt einfach alle ein, die ihr zugewiesen bekommen habt.
Anschließend müssen noch pro Domäne der DHCP-Bereich und die server_id innerhalb der Domäne gesetzt werden. Dies ist gleichzeitig die Freifunk-interne-IP-Adresse auf dem Batman-Interface. Die eins muss frei bleiben, da diese von den Knoten besetzt ist. Die Gateways beginnen mit der zwei am Ende.
- Anschließend muss noch die Datei hosts bearbeitet werden.
[gateways]
host1 ansible_ssh_host=[IPV4 eures Servers]
-
Wenn ihr collectd und bind (Rolle heißt gateways_bind) noch nicht nutzt, sollten die Zeilen in der gateways.yml zunächst auskommentiert werden, dies geht mit einem vorangestellten #.
-
Nun sollte die Konfiguration stehen und ihr könnt diese ausrollen:
ansible-playbook -i hosts gateways.yml --diff
-
Wenn alles geklappt hat, ist das Gateway nun einsatzbereit und ihr könnte euch eine L2TP-Firmware bauen, die sich mit dem Server verbindet. Wichtig ist es dabei, dass der Port 200XX ist wobei XX die Domänennummer ist. Über diese wird der von uns gepatchte Tunneldigger den Knoten der passenden Domäne zuordnen. Eine Vorlage findet sich z. B. unter Domäne 10 in unserem site-Repo. (Nicht die Domäne 6 benutzen, da diese noch Fastd nutzt, das ist nicht zu diesem System kompatibel.)
-
Wenn ihr auch einen eigenen Kartenserver möchtet, schaut euch die mapserver.yml an. Diese setzt auf einer separaten Maschine den Hoppglass auf und verbindet sich automatisch mit jeder von euch angelegten Domäne per GRETAP.
Da ein Server immer mal abstürzen kann, empfiehlt es sich einen zweiten zu konfigurieren. Ihr könnt dazu die host_vars/host1-Datei auf host_vars/host2 kopieren und die DHCP-Bereiche und die FFRL-Tunnel ändern. Den zweiten Host noch in die hosts-Datei eintragen und auf beide Maschinen Ansible ausrollen. Dann werden zwischen den Domänen automatisch GRETAP-Tunnel gebaut und die beiden Maschinen über iBGP vernetzt.
Diese Anleitung ist noch experimentell und höchst wahrscheinlich unvollständig. Ich deklariere sie als Wiki, jeder der Fehler findet, ist gebeten diese zu korrigieren. Wir haben nur ein historisch gewachsenes System. Was wirklich erforderlich ist, um ein minimales System aufzusetzen, wissen wir nicht genau. Wir wissen aber, dass die Konfiguration einzelner Hosts problemlos durchläuft, es könnte aber fehlende Abhängigkeiten mit dem Kartenserver (services) geben.
Wenn alles funktioniert, solltet ihr eure Konfiguration mit git commit committen und in ein eigenes Repo auf Github oder einem anderen Git-Hoster ablegen.
Viel Spaß beim Freifunken!
Grüße aus dem Münsterland
Matthias
Auf Wunsch den Titel angepasst. Natürlich kann man Gateways auch per Hand, mit Salt, mit Puppet oder sonstigen Werkzeugen zur Serverkonfiguration aufsetzen. Hier wird eine Methode mittels Ansible gezeigt.