Gateway mit Nixos aufsetzen

Aus Freifunk München
Wechseln zu: Navigation, Suche

Aktuell (Stand: Juli 2016) wird NixOS eingesetzt, um automatisiert Gateways aufsetzen zu können. Diese Dokumentation entstammt dem Gateway-Workshop vom 03.07.2016. Die Angaben sind (sicher) nicht vollständig. Aus den Angaben, die sich in den Dateien modules/default.nix, modules/gateway.nix und hosts/isartor.nix im infra git finden, sollte sich die gesamte Konfiguration für ein Freifunk München Gateway ablesen lassen (bis auf die Credentials zur Konfiguration des VPN Providers), wenn man nicht mit NixOS arbeiten wollen sollte.

Benamung der aktuellen Gateways[Bearbeiten]

Gateways werden nach Münchner Stadttoren benannt

  • Isartor (bisher das einzige)
  • ...

Status NixOS Repository im Freifunk München Github[Bearbeiten]

Gateways können einfach deployed werden - infra Repo auf dem Freifunk München Github entspricht dem aktuellen Gateway Zustand im Produktivbetrieb.

Ziel des Gateway-Workshops und dieses Wiki-Eintrags[Bearbeiten]

Ein Freifunk München Gateway from scratch mit NixOS zu installieren.

Vorgehen[Bearbeiten]

Plain NixOS installieren[Bearbeiten]

Siehe Plain_NixOS_installation fuer eine Step-by-Step Anleitung mit Screencast.

Freifunk Gateway auf Plain NixOS einrichten[Bearbeiten]

5. Per ssh auf das Gateway gehen (Dafür war der SSH key unter 4. abgelegt worden ;) )

6. Programmpakete ergänzen und NixOS Konfig editieren

   # nano /etc/nixos/configuration.nix # z.B. wget git vim ...  ergänzen

Update der NixOS Konfiguration mit

   # nixos-rebuild switch

Um mehr über die Konfiguration des NixOS Environments (vorhandene Packages, etc.) siehe manual https://nixos.org/nixos/manual/


7. Jetzt das infra (=Infrastruktur) Repo klonen

  • entweder direkt auf das künftige Gateway holen (weiter mit Variante 8a) - z. B. ins ~root Verzeichnis
  • oder auf Laptop (build-host) klonen - wenn man von dort deployen will (weiter mit Variante 8b).

Das infra repo liegt im Github von Freifunk München:

   # git clone https://github.com/freifunkMUC/infra.git

8. infra repo ist so gebaut, dass man entweder

a) ein Test-Gateway spontan in einem QEMU starten kann oder

b) per ssh ein Gateway auf ein nixops deployen kann (siehe weiter unten über NixOps)

Testgateway direkt konfigurieren - Variante 8a)[Bearbeiten]

[Aktueller Hinweis; Stand Juli 2016] Hinweis: infra braucht den NixOS unstable channel

   # nix-channel --remove nixos
   # nix-channel --add https://nixos.org/channels/nixos-unstable nixos
   # nix-channel --update

[/Aktueller Hinweis]

9. Test-Gateway konfigurieren und starten

   # nix-build
   # result/bin/run-testgw-vm
  • Einloggen in testgw-vm mit "root" und kein Passwort.
  • Konfiguration ist anzupassen in folgenden Dateien:
   modules/default.nix
   modules/smartos-kvm.nix  <<--- Für deployment wenn NixOS auf SmartOS deployed wird
   modules/gateway.nix      <<--- Hier ist die Magic drin - Generische Gateway Konfig von fpletz generisch definiert
   hosts/[yourgateway].nix  <<--- Spezifische eigene Gateway-Konfiguration inkl. Hardware Angaben, z. B. zur Festplatten UUID
  • gateway.nix: Abschnitt "options" auf eigene Bedürfnisse anpassen
   externalInterface        <<--- WAN / Verbindungen der fastd Schnittstelle hierüber
   ip4Interfaces            <<--- Liste an interfaces, die v4 Nutzdaten nach außen routen können - für die Firewall Freigabe 
   ip6Interface             <<--- Wo soll Ipv6 rausgehen
   segments                 <<--- Konfig ziemlich selbsterklärend - siehe auch die produktive gateway Konfig isartor.nix; auf isartor sind derzeit alle 3 Segmente: ffmuc, welcome, umland
  • [yourgateway].nix - Beispielhaft für eine spezifische Gateway-Konfiguration sei auf isartor.nix hingewiesen. Hier findet man eine Segmentspezifikation für Verbindungen mit backbone und fastd, z.B. sind fünf fastd pro Segment eingerichtet:
   backbone - Internetgateway Connections
   mesh0 - mtu 1426 - Port 10000 nach außen sichtbar für fastd
   mesh1 - mtu 1426 - Port 10099 nur für intern
   mesh2 - mtu 1280 - Port 10001 nach außen sichtbar für fastd 
   mesh3 - mtu 1280 - Port 10098 nur für intern

Sinn der vier fastd: loadbalancing gerade und ungerade IP-Adressen der Clients (portBalancings Option). Der Abschnitt networking - wie default nixos

Deployment über NixOps - Variante 8b)[Bearbeiten]

NixOps: Tool (z. B. auf dem eigenen Laptop) zum Deployment von NixOS auf entfernte Server. Konfiguration von gateway.nix und isartor.nix analog obigen Schritt 9.

  • deploy.nix definiert das deployment
   targetEnv = "none";            # nur ssh umgebung bereitstellen
   targetHost = "192.168.142.23"; # ssh host
  • NixOps Befehle zum Deployment:
   # nixops create -d test deploy.nix
   # nixops info -d test
   # nixops deploy -d test                    <<--- Deployment aller definierter hosts in deploy.nix auf den Server "test"
   # nixops deploy -d test --include <host>   <<--- Deployment einer spezifischen Maschine "host", die in deploy.nix definiert ist, auf den Server "test"
   # nixops ssh -d test <host>                <<--- Zum Aufbau einer SSH-Verbindung auf einen host auf den Server "test"
   # nixops reboot -d test 

Auf Maschine selbst deployen (Voraussetzung: NixOS plain installiert)

   # nixos-rebuild switch -I nixos-config=hosts/isartor.nix

Für einen Test (Bei reboot automatischer Sprung in die vorherige Konfiguration)

   # nixos-rebuild test -I nixos-config=hosts/isartor.nix

Tipps und Tricks - Hilfreiche Tools fürs Monitoring[Bearbeiten]

  • jnettop -i [interface] -x [tcpdump filter] ---- um Verkehr anzuschauen
  • bmon --- interfaces direkt anschauen
  • atop, htop --- Prozesse und interfaces

Exkurs[Bearbeiten]