====== Gateway Installationsanleitung ====== Ausgangspunkt ist eine [[Debian]] Minimalinstallation von Debian GNU/Linux Stretch 9.11. aptitude install isc-dhcp-server radvd bridge-utils iptables-persistent \ libcap2-bin haveged ntp incron sudo vnstat vnstati bind9 lsb-release \ sysstat iotop lighttpd rsync [[ntp|Zeitservice]] (NTP) auf spezielle Schnittstellen beschränken interface listen lo interface listen eth0 interface listen br-ffpi [[Routing]] [...] 42 freifunk Daten für die Karte (Meshviewer) bereitstellen (alfred-announced) mkdir /etc/alfred { "node": { "node_id": "gate03", "hostname": "Thesdorfer Tor", "location": { "longitude": "11.612279", "latitude": "50.949691" }, "owner": { "contact": "Havelock" }, "system": { "site_code": "ffpi", "role": "gate" } }, "statistics": { "node_id": "gate03" } } ===== Mesh-VPN mit fastd ===== Fastd kann aus den Paketen von Debian installiert werden. apt-get install fastd Das Programm fastd kann auch leicht [[fastd|aus den Quellen erstellt]] werden. ==== Konfigurationsschritte ==== adduser --system --group --uid 300 --shell /bin/sh --disabled-password \ --gecos 'Fast and Secure Tunneling Daemon'\ --no-create-home --home /etc/fastd fastd # Schlüssel für die Übertragung der Peers mkdir /etc/fastd mkdir /etc/fastd/.ssh chmod 700 /etc/fastd/.ssh touch /etc/fastd/.ssh/authorized_keys chmod 600 /etc/fastd/.ssh/authorized_keys # Verzeichnisstruktur mkdir -p /etc/fastd/ffpi/peers mkdir /etc/fastd/ffpi/backbone # Eigner einstellen chown -R fastd. /etc/fastd fastd --generate-key > /etc/fastd/keys chmod 600 /etc/fastd/keys cd /etc/fastd/ffpi Die auskommentierte Zeile im up-Script kann erst nach dem 2. Start benutzt werden. Beim Starten wird eine MAC-Adresse für das Mesh-VPN Interface automatisch erzeugt, die dann in das Script übernommen werden muß. log level warn; log to syslog level info; interface "mesh-vpn"; method "salsa2012+umac"; method "salsa2012+gmac"; bind 0.0.0.0:10000; include "secret.conf"; secure handshakes yes; mtu 1426; user "fastd"; group "fastd"; hide ip addresses yes; hide mac addresses yes; include peers from "backbone"; include peers from "peers"; peer limit 200; status socket "/var/run/fastd/ffpi.sock"; on up " # ip link set dev $INTERFACE address ip link set up dev $INTERFACE /usr/local/sbin/batctl if add $INTERFACE "; Den oben erzeugten privaten Schlüssel aus ''/etc/fastd/keys'' übernehmen: secret ""; Neue Peers automatisch aktivieren /etc/fastd/ffpi/peers IN_CREATE pkill -HUP fastd Abschließend fastd für den automatischen Start bei Systemstart eintragen. Am einfachsten mit ''sysv-rc-conf''. ===== Batman ===== Die folgenden Software-Pakete sind nicht im Debian-Standard veraltet und ggf. fehlerhaft enthalten, wir kompilieren sie deshalb von Hand: * [[alfred]] * batman-vis (im Alfred-Paket enthalten) Homepage von Batman: https://www.open-mesh.org/projects/open-mesh/wiki aptitude install build-essential pkg-config linux-headers-$(uname -r) ==== Batman-adv erstellen (optional) ==== Makefile anpassen, damit das DebugFS zur Verfügung steht. Benötigt z.B. für ''fastd-status'': export CONFIG_BATMAN_ADV_DEBUGFS=y cd /usr/local/src wget http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2017.1.tar.gz tar xzf batman-adv-2017.1.tar.gz cd batman-adv-2017.1/ make make install batctl erstellen cd /usr/local/src aptitude install libnl-3-dev libnl-genl-3-dev wget http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2017.1.tar.gz tar xzf batctl-2017.1.tar.gz cd batctl-2017.1 make make install Das Kernel-Modul muß anschließend geladen werden modprobe batman-adv Zum automatischen Starten dann in /etc/modules eintragen [...] batman-adv Überprüfen ob alles soweit geklappt hat: $ batctl -v batctl 2017.1 [batman-adv: 2017.1] ===== Netzwerkkonfiguration ===== Die folgende Datei muß mit den jew. eigenen Adressen konfiguriert werden. Dieses Beispiel ist von gate03 abgeleitet. Solange batadv-vis und alfred noch nicht konfiguriert sind, sollten die beiden betreffenden Zeilen auskommentiert werden. auto lo eth0 iface lo inet loopback iface eth0 inet static address 91.143.81.176 netmask 255.255.255.0 broadcast 91.143.81.255 gateway 91.143.81.1 iface eth0 inet6 static address 2a02:0180:1:1::5b8f:51b0 netmask 64 gateway 2a02:0180:1:1::1 # Freifunk Pinneberg Bridge-Interface (IPv4 und IPv6) # - bridge_ports none sorgt dafür, daß die Brücke auch ohne Interface erstellt wird auto br-ffpi iface br-ffpi inet6 static bridge-ports none address fde8:21c6:9d82::0c01 netmask 64 iface br-ffpi inet static address 10.137.12.1 netmask 255.255.0.0 # BATMAN Interface allow-hotplug bat0 iface bat0 inet6 manual pre-up modprobe batman-adv pre-up batctl if add mesh-vpn up ip link set $IFACE up post-up brctl addif br-ffpi $IFACE post-up batctl it 10000 post-up batctl gw_mode server 100mbit/100mbit post-up /sbin/ip rule add from all fwmark 0x1 table 42 post-up start-stop-daemon -b --start --exec /usr/local/sbin/batadv-vis -- -i $IFACE -s post-up start-stop-daemon -b --start --exec /usr/local/sbin/alfred -- -i br-ffpi -b $IFACE pre-down /sbin/ip rule del from all fwmark 0x1 table 42 pre-down brctl delif br-ffpi $IFACE || true down ip link set $IFACE down Firewall initialisieren. Die NAT-Regel für das Exit-VPN wird von den Pinneberger up- und down-Scripten aus der OpenVPN-Konfiguration gesteuert und ist deshalb an dieser Stelle entfallen. iptables -t mangle -A PREROUTING -i br-ffpi -j MARK --set-xmark 0x1/0xffffffff cd /etc/iptables iptables-save > rules.v4 [...] # Freifunk specific settings net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0 net.bridge.bridge-nf-call-arptables = 0 net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.all.autoconf = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.eth0.autoconf = 0 net.ipv6.conf.all.accept_ra = 0 net.ipv6.conf.default.accept_ra = 0 net.ipv6.conf.eth0.accept_ra = 0 Neuladen mit ''sysctl -p'' /sbin/ip route add unreachable default table freifunk /sbin/ip rule add from all fwmark 0x1 table freifunk exit 0 ===== Erster Start ===== /etc/init.d/fastd start cat /sys/class/net/mesh-vpn/address Die MAC-Adresse des mesh-vpn-Interfaces kopieren und in die fastd.conf-Datei einbauen. ===== DHCP - IPv4-Adressen für Clients ===== Wir verwenden den ISC DHCP Server. aptitude install isc-dhcp-server mkdir /etc/dhcp/static chgrp fastd /etc/dhcp/static chmod g+w /etc/dhcp/static touch /etc/dhcp/static/static.conf touch /etc/dhcp/static/blacklist.conf chown fastd. /etc/dhcp/static/*.conf Beispielkonfiguration für ''gate04'', auf anderen Gateways muß die Konfiguration entsprechend angepaßt werden, insbesondere auch die Standardroute und die zu verwendenden DNS-Server. # # Configuration file for ISC dhcpd for Debian # server-name "gate04"; ddns-update-style none; default-lease-time 300; max-lease-time 600; log-facility local7; subnet 10.137.0.0 netmask 255.255.0.0 { authoritative; option domain-name "ffpi"; pool { range 10.137.13.10 10.137.13.254; option routers 10.137.13.1; } pool { range 10.137.10.10 10.137.10.254; deny all clients; } pool { range 10.137.12.10 10.137.12.254; deny all clients; } pool { range 10.137.14.10 10.137.14.254; deny all clients; } option domain-name-servers 10.137.13.1, 10.137.10.1, 10.137.12.1; option ntp-servers 10.137.13.1, 10.137.10.1, 10.137.14.1; } include "/etc/dhcp/static/static.conf"; DHCP auf das Bridge-Interface beschränken [...] INTERFACES="br-ffpi" DHCP Server neu starten nach Änderung der statischen Konfiguration /etc/dhcp/static IN_CREATE,IN_NO_LOOP /etc/init.d/isc-dhcp-server restart ==== Protokollierung ==== Um die detaillierte Protokollierung im Produktivbetrieb auszustellen ist local7.* durch local7.warn zu ersetzen, sowie die Ausgabe im „Catch-All“-Logfile messages zu unterdrücken. *.*;auth,authpriv,local7.none -/var/log/syslog local7.warn -/var/log/dhcpd.log mail,news,local7.none -/var/log/messages /var/log/dhcpd.log { weekly rotate 12 compress delaycompress notifempty missingok } ==== IPv6 Adressen ==== interface br-ffpi { AdvSendAdvert on; IgnoreIfMissing on; MaxRtrAdvInterval 900; AdvLinkMTU 1350; prefix fde8:21c6:9d82::/64 { AdvValidLifetime 864000; AdvPreferredLifetime 172800; }; RDNSS fde8:21c6:9d82::0c01 fde8:21c6:9d82::0d01 fde8:21c6:9d82::0a01 { FlushRDNSS off; }; }; ===== Benutzereinrichung ===== Die Administratoren werden als lokale Benutzer eingerichtet, mit sudo-Berechtigung. Der Zugriff auf das System erfolgt immer mit einem Schlüssel, der Zugang mit Kennwort ist nicht vorgesehen. In ''/etc/adduser.conf'' sollte eingestellt werden: ''DIR_MODE=0750'' Vorbereitung für den Ablageort der SSH-Schlüssel der Administratoren in deren neu zu erstellenden Home-Verzeichnissen: mkdir /etc/skel/.ssh chmod 700 /etc/skel/.ssh touch /etc/skel/.ssh/authorized_keys chmod 600 /etc/skel/.ssh/authorized_keys Die Administratoren sollen sich mit Schlüsseln an ihren Account anmelden. Kommandos können dann mit ''sudo'' ausgeführt werden. Für Sudo wird allerdings ein Kennwort benötigt, was sich jeder Admin selbst vergeben soll. Die folgende Befehlskette legt einen Benutzer an, als neues Kennwort wird ein Standardkennwort vergeben, welches gleich auf abgelaufen eingestellt wird. Nach erfolgreicher Verbindung mit SSH erscheint dann sofort der Dialog zur Kennwortänderung. adduser usermod -aG sudo passwd -e Öffentlichen Schlüssel des Administrators hinterlegen joe -nobackups /home//.ssh/authorized_keys ===== Sonstiges ===== Falls das DebugFS nicht gemountet ist, kann es manuell eingebunden werden: mount -t debugfs none /sys/kernel/debug permanent dass über ''/etc/fstab'': debugfs /sys/kernel/debug debugfs defaults 0 0 ==== Alfred ==== Spezielle Gatewaydaten für [[Alfred]] bereitstellen. Das Programm ''alfred-announce.py'' muß zuvor natürlich auf dem Gateway eingespielt werden. Voraussetzung: apt-get install python-daemon ethtool SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin */2 * * * * root /usr/local/bin/alfred-announce.py ==== Mail ==== Damit Mails versendet werden können Postfix installieren apt-get install postfix Bei der Installation erst einmal keine Konfiguration auswählen, anschließend so konfigurieren daß die Mail über ''gate04'' versendet wird. Gate04 ist der zentrale Mailserver in ffpi. [...] myhostname = gate03.ffpi mydestination = gate03.pinneberg.freifunk.net, gate03.ffpi, localhost.ffpi, localhost relayhost = gate04.ffpi inet_interfaces = loopback-only # /etc/aliases mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root usenet: root news: root webmaster: root www: root ftp: root abuse: root noc: root security: root root: hostmaster@pinneberg.freifunk.net Abschließend dann noch newaliases ==== Statistiken ==== Öffentliche [[statistik|Statistiken]] werden mit ''vnstat'' zusammengestellt. Damit sie direkt vom Gateway abgerufen werden können, wird der kleine Webserver ''lighttpd'' installiert. Dieser stellt die Statistikseite dann per HTTP zur Verfügung.