Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
infrastruktur:freifunkmuenster [2014/07/25 02:02] – [Gateway] fusselkater | infrastruktur:freifunkmuenster [2017/06/01 10:26] (aktuell) – deleted entire legacy page commander1024 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== FreiFunk Münster ====== | ||
- | Hier soll alles rund um das Thema Freifunk gesammelt werden bis es eine geeignetere Stelle gibt. | ||
- | ===== Organisation ===== | ||
- | Wir nutzen den IP Block des (ehemaligen) [[http:// | ||
- | |||
- | ==== IP-Bereich ==== | ||
- | IPv4: 10.43.0.0/ | ||
- | IPv6: fd68: | ||
- | |||
- | ==== Reservierter IP-Bereich ==== | ||
- | |||
- | Dieser Bereich ist für feste IPs, Infrastruktur, | ||
- | |||
- | IPv4: 10.43.0.0/ | ||
- | IPv6: fd68: | ||
- | |||
- | ==== IP-Bereich Gateway 1 (VOID-DEV) ==== | ||
- | |||
- | IPv4-Adresse: | ||
- | IPv6-Adresse: | ||
- | |||
- | IPv4: 10.43.8.0/ | ||
- | IPv6: fd68: | ||
- | |||
- | ==== IP Bereich Gateway 2 (Warpzone) ==== | ||
- | |||
- | IPv4-Adresse: | ||
- | IPv6-Adresse: | ||
- | |||
- | IPv4: 10.43.16.0/ | ||
- | IPv6: fd68: | ||
- | |||
- | ==== IP Bereich Gateway 3 (Fusselkater) ==== | ||
- | |||
- | IPv4-Adresse: | ||
- | IPv6-Adresse: | ||
- | |||
- | IPv4: 10.43.24.0/ | ||
- | IPv6: fd68: | ||
- | |||
- | |||
- | ===== Freifunk am Hawerkamp ===== | ||
- | Der Hawerkamp soll mit freien WLAN, am besten auf Basis von Freifunk ausgestattet werden. | ||
- | Es gibt eine Spende von 25 Cisco Access Points vom Typ AIR-AP-1131AG-E-K9 | ||
- | |||
- | ===== Hardware ===== | ||
- | | Hersteller | Modell | WLAN | ext.Antenne? | ||
- | | Cisco | AIR-AP-1131AG-E-K9 | a/b/g | nein | ja | nein | | ||
- | | TP-Link | WR841ND | b/g/n 2.4Ghz | ja | nein | [[http:// | ||
- | | Ubiquity | Nanostation M5 Loco | 5 GHz | nein | ja | nein | | ||
- | |||
- | |||
- | |||
- | |||
- | ===== Firmware ===== | ||
- | Die Firmware wird vermutlich auf [[https:// | ||
- | |||
- | |||
- | ===== To-Do ===== | ||
- | * Community bei Freifunk.net als Subdomain/ | ||
- | * [[http:// | ||
- | * Gateway VM auf Warpzone Server einrichten (server.warpzone.ms -p 2223) | ||
- | * Fastd | ||
- | * VPN (openvpn) | ||
- | * DNS/DHCP (dnsmasq) | ||
- | * DHCP (isc-dhcpd) | ||
- | * ravd (dhcp ipv6) | ||
- | * alfred (teil von batman / Userspace / [[https:// | ||
- | * alfred-json ( https:// | ||
- | * batman-adv (meshing) [Vorsicht: zu neue Kernel nutzen die neue batman version mit neuerem kompability level --> nicht kompatibel] | ||
- | * FFMap-Backend (Übersichtskarte [[https:// | ||
- | * FFMAP (Übersichtskarte [[https:// | ||
- | * Webserver nötig falls nicht auf bestehendem System | ||
- | * DOKU(!) | ||
- | * VPN: Bei Lübecker / Berlinern nach Modalitäten für VPN anfragen: Alternativ eigenen Zugang, mit kosten verbunden (testweise genutzt: [[http:// | ||
- | * Firmware - eigene VM als Zentrales Buildsystem(server.warpzone.ms: | ||
- | * Key zum signieren der Firmware: Zentral über Buildserver (alternativ: | ||
- | * Schlüsselverwaltung der Router - Anmeldung per Email (Später: Kontaktformular? | ||
- | * Verwaltung von DNSeinträgen für .ffms | ||
- | |||
- | ==== Gateway ==== | ||
- | Anleitung zum Gateway einrichten, Vorlage ist die Dokumentation des FreiFunk [[http:// | ||
- | |||
- | * Debian Jessie (Kernel: 3.10.x neuere Kernel Version hat neueres Batman Support level - nicht kompatibel) | ||
- | * ** Zusätzliche Paketquellen ** | ||
- | * deb http:// | ||
- | < | ||
- | gpg --keyserver pgpkeys.mit.edu --recv-key 16EF3F64CB201D9C | ||
- | gpg -a --export 16EF3F64CB201D9C | apt-key add - | ||
- | </ | ||
- | * Dann brauchen wir noch die Paketquellen aus unserem OBS | ||
- | < | ||
- | echo 'deb http:// | ||
- | </ | ||
- | < | ||
- | wget http:// | ||
- | apt-key add - < Release.key | ||
- | </ | ||
- | * Dann einmal apt-get update | ||
- | * **Notwendige Pakete:** | ||
- | * bridge-utils (Verwaltung der Netzwerkbrücken) | ||
- | * batctl (B.A.T.M.A.N. Verwaltungstools) | ||
- | * openvpn (VPN zu MULLVAD) | ||
- | * haveged (Entropie) | ||
- | * fastd (VPN zu den Nodes) | ||
- | * radvd (IPv6 Router Advertisements) | ||
- | * isc-dhcp-server (DHCP) | ||
- | * bind9 (DNS) | ||
- | * git | ||
- | * alfred-stable | ||
- | * batman-adv-dkms | ||
- | * ** batman-adv 2013.04 installieren ** | ||
- | Nachdem batman-adv-dkms installiert ist, schmeißt dkms einen Fehler, da in den aktuellen Kernel-Versionen eine neuere batman-adv Version ist, als über dkms gebaut wurde. Es ist nötig, die Installation des 2013.04er Modules zu erzwingen. Dazu macht man folgendes: | ||
- | < | ||
- | dkms remove batman-adv/ | ||
- | dkms --force install batman-adv/ | ||
- | </ | ||
- | Danach einmal rebooten. Nun sollte batman-adv Version 2013.4 geladen sein. Verifizieren kann man dies mit: | ||
- | < | ||
- | cat / | ||
- | </ | ||
- | |||
- | * ** IPv6 Forwarding aktivieren ** | ||
- | * Konfigurationsdatei ''/ | ||
- | < | ||
- | # IPv4 Forwarding | ||
- | net.ipv4.ip_forward=1 | ||
- | |||
- | # IPv6 Forwarding | ||
- | net.ipv6.conf.all.forwarding = 1 | ||
- | </ | ||
- | * Anschließend Reboot des Servers | ||
- | * **Batman Einrichten** | ||
- | * Bei der ''/ | ||
- | * Neustarten oder Modul händisch per '' | ||
- | * Überprüfen ob module geladen wurde: es existiert der pfad ''/ | ||
- | * **Netzwerk anpassen** | ||
- | * Eine Netzwerkbrücke als Schnittstelle zwischen dem Mesh auf der einen Seite und dem VPN nach XYZ als exist auf der anderen Seite dazu die ''/ | ||
- | * Erstellen eines Bridge Interfaces das eine IP im FF-IP Block hat< | ||
- | # Netwerkbrücke für Freifunk | ||
- | # - Hier läuft der Traffic von den einzelnen Routern und dem externen VPN zusammen | ||
- | # - Unter der hier konfigurierten IP ist der Server selber im Freifunk Netz erreichbar | ||
- | # - bridge_ports none sorgt dafür, dass die brücke auch ohne Interface erstellt wird | ||
- | |||
- | auto br0 | ||
- | |||
- | iface br0 inet static | ||
- | address 10.43.0.3 | ||
- | netmask 255.255.0.0 | ||
- | bridge_ports none | ||
- | |||
- | iface br0 inet6 static | ||
- | address fd68: | ||
- | netmask 48 | ||
- | </ | ||
- | * Batman Interface hinzufügen und an Bridge Interface binden < | ||
- | # Batman Interface | ||
- | # - Erstellt das virtuelle Inteface für das Batman-Modul und bindet dieses an die Netzwerkbrücke | ||
- | # - Die unten angelegte Routing-Tabelle wird später für das Routing innerhalb von Freifunk (Router/ | ||
- | |||
- | allow-hotplug bat0 | ||
- | |||
- | iface bat0 inet6 manual | ||
- | pre-up modprobe batman-adv | ||
- | post-up ip link set dev bat0 up | ||
- | post-up brctl addif br0 bat0 | ||
- | post-up batctl it 10000 | ||
- | post-up ip rule add from all fwmark 0x1 table 42 | ||
- | post-up start-stop-daemon -b --start --exec / | ||
- | post-up start-stop-daemon -b --start --exec / | ||
- | </ | ||
- | * Config anwenden indem das Netzwerk per '' | ||
- | * Table 42 die wir im Bridge Interface definiert haben muss noch mit Regeln gefüllt werden. | ||
- | * Sobald das Interface hoch kommt, starten wir alfred und batadv-vis | ||
- | * TODO: Konfiguration vom 2. Gateway übernehmen, | ||
- | * Dazu erzeugen wir die ''/ | ||
- | < | ||
- | :INPUT ACCEPT [0:0] | ||
- | :FORWARD ACCEPT [0:0] | ||
- | :OUTPUT ACCEPT [0:0] | ||
- | COMMIT | ||
- | # Regeln zum markieren eingehender Pakete | ||
- | *mangle | ||
- | :PREROUTING ACCEPT [0:0] | ||
- | :INPUT ACCEPT [0:0] | ||
- | :FORWARD ACCEPT [0:0] | ||
- | :OUTPUT ACCEPT [0:0] | ||
- | : | ||
- | -A PREROUTING -i br0 -j MARK --set-xmark 0x1/ | ||
- | -A OUTPUT -o eth0 -p udp --dport 53 -j MARK --set-xmark 0x1/ | ||
- | -A OUTPUT -o eth0 -p tcp --dport 53 -j MARK --set-xmark 0x1/ | ||
- | COMMIT | ||
- | </ | ||
- | * Nun wird alles von der bridge an den VPN Tunnel(der später eingerichtet wird) per nat weiter geleitetet dafür fügt man ebenfalls in der ''/ | ||
- | < | ||
- | *nat | ||
- | :PREROUTING ACCEPT [0:0] | ||
- | :INPUT ACCEPT [0:0] | ||
- | :OUTPUT ACCEPT [0:0] | ||
- | : | ||
- | -A POSTROUTING -o tun0 -j MASQUERADE | ||
- | COMMIT | ||
- | </ | ||
- | * Nun erzeugen wir ein Shell-Script, | ||
- | * Datei: / | ||
- | < | ||
- | #!/bin/sh | ||
- | / | ||
- | </ | ||
- | * Und machen sie ausführbar: | ||
- | < | ||
- | chmod +x / | ||
- | </ | ||
- | * Iptables laden mit iptables-restore < / | ||
- | * **VPN Einrichten** | ||
- | * Unser VPN geht aktuell nach Schweden (Anbieter: https:// | ||
- | * Die Konfigurationsdateien (ca.crt / crl.pem / mullvad.crt / mullvad.key / mullvad_linux.conf) werden nach ''/ | ||
- | route-noexec | ||
- | up / | ||
- | * tun in die / | ||
- | * Nun wird das im vorherigen Punkt erwähnte Skript mullvad_up.sh mit folgendem Inhalt angelegt: < | ||
- | ip route replace 0.0.0.0/1 via $5 table 42 | ||
- | ip route replace 128.0.0.0/1 via $5 table 42 | ||
- | exit 0</ | ||
- | * Openvpn wird per '' | ||
- | * **Fastd Einrichten** | ||
- | * Konfigurationsverzeichnis erstellen < | ||
- | * Schlüssel für den Server erzeugen. Der Schlüssel wird in diesem Schritt nur erzeugt und auf der Kommandozeile ausgegeben. Secret und Public müssen in die Fastd-Konfiguration des Servers bzw. in die Router-Firmware übernommen werden. < | ||
- | * Konfigurationsdatei ''/ | ||
- | bind 0.0.0.0: | ||
- | interface " | ||
- | user " | ||
- | mode tap; | ||
- | method " | ||
- | mtu 1426; # 1426 - ipv4 header - fastd header | ||
- | secret " | ||
- | |||
- | log to syslog level debug; | ||
- | #folgende Zeile sorgt dafuer das jeder Peer akzeptiet wird | ||
- | #on verify " | ||
- | |||
- | include peers from "/ | ||
- | include peers from "/ | ||
- | |||
- | on up " | ||
- | ip link set dev $INTERFACE address de: | ||
- | ip link set dev $INTERFACE up | ||
- | ifup bat0 | ||
- | batctl if add $INTERFACE | ||
- | batctl gw server | ||
- | "; | ||
- | |||
- | </ | ||
- | * Zum Testen kann fastd mit '' | ||
- | * Anschließend fastd mit '' | ||
- | * Die backbones werden included, um die Verbindung zwischen den Servern herzustellen | ||
- | * ** IPv6 Router Advertisements Einrichten ** | ||
- | * Jeder Gateway-Server erhält ein eigenes IPv6 Prefix für Router Anouncements | ||
- | * Achtung: radvd kann maximal /64 Netze vergeben | ||
- | * Der Eintrag RDNSS muss die IP-Adresse des Gateway enthalten | ||
- | * Konfigurationsdatei ''/ | ||
- | < | ||
- | interface br0 | ||
- | { | ||
- | AdvSendAdvert on; | ||
- | IgnoreIfMissing on; | ||
- | MaxRtrAdvInterval 50; | ||
- | |||
- | prefix fd68: | ||
- | { | ||
- | }; | ||
- | |||
- | RDNSS fd68: | ||
- | AdvRDNSSLifetime 100; | ||
- | }; | ||
- | |||
- | DNSSL ffms | ||
- | { | ||
- | AdvDNSSLLifetime 100; | ||
- | }; | ||
- | |||
- | }; | ||
- | </ | ||
- | * Start des Dienstes mit '' | ||
- | * ** DHCP Server Einrichten ** | ||
- | * Jeder Gateway-Server erhält einen Teil des IP Bereiches um Adressen zu vergeben | ||
- | * Die Optionen Router und Domain-Name-Servers enthalten jeweils die IP des Servers | ||
- | * Konfigurationsdatei ''/ | ||
- | < | ||
- | |||
- | default-lease-time 600; | ||
- | max-lease-time 3600; | ||
- | |||
- | authoritative; | ||
- | |||
- | log-facility local7; | ||
- | |||
- | subnet 10.43.0.0 netmask 255.255.0.0 { | ||
- | range 10.43.zz.1 10.43.zz.254; | ||
- | |||
- | option routers 10.43.0.x; | ||
- | option domain-name-servers 10.43.0.x; | ||
- | } | ||
- | |||
- | </ | ||
- | * Zudem wird der DHCP Server noch auf das Bridge-Interface festgelegt. Hierzu wird in der Datei ''/ | ||
- | < | ||
- | # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? | ||
- | # | ||
- | INTERFACES=" | ||
- | </ | ||
- | * Test des DHCP Servers mit '' | ||
- | * Anschließend DHCP Server starten mit '' | ||
- | === dhcpdv6 === | ||
- | * Damit auch via dhcpdv6 Adressen verteilt werden (Was vorallem für Windows-Hosts wichtig ist, da diese den RDNSS-Parameter von radvd nicht kennen, werden folgende Dateien eingerichtet: | ||
- | / | ||
- | < | ||
- | #!/bin/sh | ||
- | # | ||
- | # | ||
- | |||
- | ### BEGIN INIT INFO | ||
- | # Provides: | ||
- | # Required-Start: | ||
- | # Required-Stop: | ||
- | # Should-Start: | ||
- | # Should-Stop: | ||
- | # Default-Start: | ||
- | # Default-Stop: | ||
- | # Short-Description: | ||
- | # Description: | ||
- | ### END INIT INFO | ||
- | |||
- | PATH=/ | ||
- | |||
- | test -f / | ||
- | |||
- | DHCPD_DEFAULT=" | ||
- | |||
- | # It is not safe to start if we don't have a default configuration... | ||
- | if [ ! -f " | ||
- | echo " | ||
- | if [ " | ||
- | echo "Run ' | ||
- | fi | ||
- | exit 0 | ||
- | fi | ||
- | |||
- | . / | ||
- | |||
- | # Read init script configuration | ||
- | [ -f " | ||
- | |||
- | NAME=dhcpd | ||
- | DESC=" | ||
- | # fallback to default config file | ||
- | DHCPD_CONF=${DHCPD_CONF: | ||
- | # try to read pid file name from config file, with fallback to / | ||
- | if [ -z " | ||
- | DHCPD_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*" | ||
- | fi | ||
- | DHCPD_PID=" | ||
- | |||
- | test_config() | ||
- | { | ||
- | if ! / | ||
- | echo "dhcpd self-test failed. Please fix $DHCPD_CONF." | ||
- | echo "The error was: " | ||
- | / | ||
- | exit 1 | ||
- | fi | ||
- | } | ||
- | |||
- | # single arg is -v for messages, -q for none | ||
- | check_status() | ||
- | { | ||
- | if [ ! -r " | ||
- | test " | ||
- | return 3 | ||
- | fi | ||
- | if read pid < " | ||
- | test " | ||
- | return 0 | ||
- | else | ||
- | test " | ||
- | return 1 | ||
- | fi | ||
- | } | ||
- | |||
- | case " | ||
- | start) | ||
- | test_config | ||
- | log_daemon_msg " | ||
- | start-stop-daemon --start --quiet --pidfile " | ||
- | --exec / | ||
- | -6 -q $OPTIONS -cf " | ||
- | sleep 2 | ||
- | |||
- | if check_status -q; then | ||
- | log_end_msg 0 | ||
- | else | ||
- | log_failure_msg "check syslog for diagnostics." | ||
- | log_end_msg 1 | ||
- | exit 1 | ||
- | fi | ||
- | ;; | ||
- | stop) | ||
- | log_daemon_msg " | ||
- | start-stop-daemon --stop --quiet --pidfile " | ||
- | log_end_msg $? | ||
- | rm -f " | ||
- | ;; | ||
- | restart | force-reload) | ||
- | test_config | ||
- | $0 stop | ||
- | sleep 2 | ||
- | $0 start | ||
- | if [ " | ||
- | exit 1 | ||
- | fi | ||
- | ;; | ||
- | status) | ||
- | echo -n " | ||
- | check_status -v | ||
- | exit " | ||
- | ;; | ||
- | *) | ||
- | echo " | ||
- | exit 1 | ||
- | esac | ||
- | |||
- | exit 0 | ||
- | </ | ||
- | * Danach chmod +x / | ||
- | * Und update-rc.d isc-dhcp6-server defaults | ||
- | / | ||
- | < | ||
- | # Defaults for isc-dhcp-server initscript | ||
- | # sourced by / | ||
- | # installed at / | ||
- | |||
- | # | ||
- | # This is a POSIX shell fragment | ||
- | # | ||
- | |||
- | # Path to dhcpd' | ||
- | # | ||
- | |||
- | # Path to dhcpd' | ||
- | # | ||
- | |||
- | # Additional options to start dhcpd with. | ||
- | # | ||
- | # | ||
- | |||
- | # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? | ||
- | # | ||
- | INTERFACES=" | ||
- | </ | ||
- | * Danach touch / | ||
- | / | ||
- | < | ||
- | default-lease-time 600; | ||
- | max-lease-time 3600; | ||
- | |||
- | authoritative; | ||
- | |||
- | log-facility local7; | ||
- | |||
- | subnet6 fd68: | ||
- | range6 fd68: | ||
- | option dhcp6.name-servers fd68: | ||
- | option dhcp6.domain-search " | ||
- | } | ||
- | </ | ||
- | * Nun service isc-dhcp6-server start | ||
- | |||
- | === bind Einrichten === | ||
- | * Konfigurationsdatei ''/ | ||
- | < | ||
- | options { | ||
- | directory "/ | ||
- | |||
- | // If there is a firewall between you and nameservers you want | ||
- | // to talk to, you may need to fix the firewall to allow multiple | ||
- | // ports to talk. See http:// | ||
- | |||
- | // If your ISP provided one or more IP addresses for stable | ||
- | // nameservers, | ||
- | // Uncomment the following block, and insert the addresses replacing | ||
- | // the all-0' | ||
- | |||
- | // forwarders { | ||
- | // 0.0.0.0; | ||
- | // }; | ||
- | |||
- | // | ||
- | // If BIND logs error messages about the root key being expired, | ||
- | // you will need to update your keys. See https:// | ||
- | // | ||
- | dnssec-validation auto; | ||
- | | ||
- | recursion yes; | ||
- | allow-recursion { localnets; localhost; }; | ||
- | |||
- | auth-nxdomain no; # conform to RFC1035 | ||
- | listen-on-v6 { any; }; | ||
- | }; | ||
- | |||
- | logging { | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | category " | ||
- | channel " | ||
- | file "/ | ||
- | print-time yes; | ||
- | print-category yes; | ||
- | }; | ||
- | }; | ||
- | </ | ||
- | |||
- | * Konfigurationsdatei ''/ | ||
- | < | ||
- | // | ||
- | // Do any local configuration here | ||
- | // | ||
- | |||
- | // Consider adding the 1918 zones here, if they are not used in your | ||
- | // organization | ||
- | include "/ | ||
- | |||
- | |||
- | zone " | ||
- | type master; | ||
- | file "/ | ||
- | }; | ||
- | </ | ||
- | |||
- | * Dienst starten mit '' | ||
- | * ** Konfigurations-Git clonen ** | ||
- | * '' | ||
- | * '' | ||
- | * ** Gateway-Script ** | ||
- | * Damit der Gateway seine Funktion aufnimmt und über batman als Gateway anerkannt wird (erst dann funktioniert Routing, DHCP, usw.) muss das Kommando '' | ||
- | * Hierfür sollte idealerweise ein Gateway-Überwachungsscript erstellt werden. | ||
- | ==== NanoStation Loco M5 ==== | ||
- | Die Original Firmware für die NanoStation Loco M5 findet sich bei [[http:// | ||
- | ==== API File ==== | ||
- | Das API File liegt im ''/ | ||
- | '' | ||
- | | ||
- | === Knotenanzahl Automatisch Updaten lassen === | ||
- | TODO: [[http:// | ||
- | === WAN-Mesh auf Knoten aktualisieren === | ||
- | Um Wan-Mesh auf einem Knoten zu verwenden müssen einmalig die folgenden UCI-Einträge über SSH gesetzt werden. | ||
- | Anschließend kann das WAN-Mesh über den Expoertenmodus (Schnittstelle) ein und aus geschaltet werden. | ||
- | < | ||
- | uci set network.mesh_wan=interface | ||
- | uci set network.mesh_wan.ifname=br-wan | ||
- | uci set network.mesh_wan.proto=batadv | ||
- | uci set network.mesh_wan.mesh=bat0 | ||
- | uci set network.mesh_wan.auto=1 | ||
- | uci commit | ||
- | </ |