Gateway mit Linux Network Namespaces

Aus Freifunk Franken
Version vom 2. September 2019, 19:18 Uhr von Lemmi (Diskussion | Beiträge) (Erste Skizze)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu:Navigation, Suche

In dieser Anleitung sollen alle nötigen Schritte gezeigt werden, um auf einer nahezu beliebigen Linux Maschine ein Freifunk Gateway in einem separatem Network Namespace zu betreiben. Inspiriert ist die Konstruktion durch diese Anleitung zu Routing mit Wireguard.

Motivation

Überblick
Namespaces bieten eine elegante Alternative um auf (vorhandenen) Systemen zusätzlich Freifunk zu integrieren ohne zu schwer ins Hostsystem einzugreifen. Gleichzeitig ist diese Lösung schlanker als eine VM, oder sogar Container, wobei diese Anleitung auch gut als Blaupause für einen Docker-, oder LXC-Container benutzt werden kann. Wer schon einen Linuxrouter betreibt und jetzt zusätzlich ein Freifunknetz zum Beispiel über ein separates VLAN bereit stellen möchte, braucht so keine extra Hardware, hat aber aber trotzdem eine saubere Trennung zwischen seinen Netzen.
Keine aufwendiges Policy Routing nötig
Die aktuelle Firmware und andere Anleitungen benutzen Policy Routing, um Routingloops usw. aufzulösen. Die Rules sind kompliziert und müssen separate für IPv4 und IPv6 erstellt werden. Mit Networknamespaces ist dies nicht mehr nötig.

Namespaces

Den meisten sollten Container ein Begriff sein. Mit Containern kann man Prozesse vom Hostsystem isolieren, ohne gleich eine Virtuelle Maschine starten zu müssen. Der Linux Kernel stellt dazu Namespaces bereit, mit denen einzelne Teile des Systems separat vom Hostsystem isoliert werden können. Man kann Beispielsweise die Sicht auf das Dateisystem, Prozesse, Benutzer und eben Netzwerk separat einschränken. Nimmt man alles richtig zusammen, kann man mit diesen Namespaces Container bauen.

Die Liste aller Namespaces findet ihr in der man 7 namespaces man-page.

In dieser Anleitung benutzen wir aber nur den Network Namespace und später den UTS Namespace. Wir behalten also mehr oder weniger die Umgebung bei (Dateisysteme, Prozesse...) und isolieren nur Netzwerk und den UTS Namespace.

Die wichtigsten Programme um mit diesen Namespaces umzugehen sind:

Network Namespaces

Aus der man 8 ip-netns man-page:

A network namespace is logically another copy of the network stack, with its own routes, firewall rules, and network devices.

Wir werden einen Networknamespace erstellen, indem sämtlicher Freifunkverkehr verwaltet wird - komplett getrennt vom Hostsystem.

TODO

  • Network Namespace
  • UTS Namespace
  • wireguard
  • babeld
  • dnsmasq
  • monitoring
  • firewall