Wiki - Freifunk Pinneberg

Freies WLAN im Kreis Pinneberg

Benutzer-Werkzeuge

Webseiten-Werkzeuge


gateway_installation_debian_12

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
gateway_installation_debian_12 [01.03.2024 20:06] – [Statistiken] kevingateway_installation_debian_12 [03.03.2024 18:22] (aktuell) – [DHCP] kevin
Zeile 4: Zeile 4:
 Diese Anleitung soll zeigen wie ein Gateway unter Debian 12 installiert wird. Die Anleitung basiert auf der [[gateway_installation|alten Anleitung zur Installation unter Debian 9]]. Der Teufel liegt allerdings oft im Detail, und über die Debian Versionen haben sich manche Details geändert. Diese Anleitung soll zeigen wie ein Gateway unter Debian 12 installiert wird. Die Anleitung basiert auf der [[gateway_installation|alten Anleitung zur Installation unter Debian 9]]. Der Teufel liegt allerdings oft im Detail, und über die Debian Versionen haben sich manche Details geändert.
  
 +<WRAP center round todo 100%>
 <color #ed1c24>**!!! WORK IN PROGRESS !!!**</color> <color #ed1c24>**!!! WORK IN PROGRESS !!!**</color>
 +</WRAP>
  
 Die anleitung geht davon aus das wir bereits mit root rechten unterwegs sind. Die anleitung geht davon aus das wir bereits mit root rechten unterwegs sind.
Zeile 14: Zeile 16:
 Zusätzlich brauchen wir noch einen http Server. Falls nur gateway betrieb gewünscht ist, und sonst nichts übers web gemacht wird, genügt lighttpd. ''apt-get install lighttpd'' Zusätzlich brauchen wir noch einen http Server. Falls nur gateway betrieb gewünscht ist, und sonst nichts übers web gemacht wird, genügt lighttpd. ''apt-get install lighttpd''
 Wenn noch andere Webtools genutzt werden sollen, empfiehlt sich Apache2 ''apt-get install apache2'' Wenn noch andere Webtools genutzt werden sollen, empfiehlt sich Apache2 ''apt-get install apache2''
 +
 +<WRAP center round info 100%>
 +In dieser Anleitung wird öfters auf das Netzwerk Interface ''enp0s1'' verwiesen. Je nach Server kann die genaue Bezeichnung jedoch variieren. Prüfe vorab mit ''ip a'' wie das Interface bei dir heißt, und passe die Konfigurationen entsprechend an.
 +</WRAP>
 +
  
 ===== NTP ===== ===== NTP =====
  
 [[ntp|Zeitservice]] (NTP) auf spezielle Schnittstellen beschränken [[ntp|Zeitservice]] (NTP) auf spezielle Schnittstellen beschränken
 +Bearbeite die Datei ''/etc/ntp.conf'' und füge folgende zeilen hinzu.
 <file conf /etc/ntp.conf> <file conf /etc/ntp.conf>
 interface listen lo interface listen lo
Zeile 148: Zeile 156:
 <file conf /etc/incron.d/fastd_peers> <file conf /etc/incron.d/fastd_peers>
 /etc/fastd/ffpi/peers IN_CREATE pkill -HUP fastd /etc/fastd/ffpi/peers IN_CREATE pkill -HUP fastd
 +</file>
 +
 +In der Standard Konfigurationen muss man fastd sagen welche Konfiguration geladen werden soll, wir ändern es so das einfach alle Konfigurationen geladen werden.
 +
 +In der Datei ''/etc/default/fastd'' ändern wir ''AUTOSTART="none"'' zu ''AUTOSTART="all"''
 +<file bash /etc/default/fastd>
 +# This is the configuration file for /etc/init.d/fastd
 +
 +#
 +# This configuration file is DEPRECATED! Please set autostart to "none" in
 +# this file and use the instanced systemd unit fastd@.service
 +#
 +
 +#
 +# Start only these VPNs automatically via init script.
 +# Allowed values are "all", "none" or space separated list of
 +# names of the VPNs. If empty, "all" is assumed.
 +#
 +AUTOSTART="all"
 </file> </file>
  
 Nun können wir den fastd service noch automatisch beim booten starten lassen. Nun können wir den fastd service noch automatisch beim booten starten lassen.
 <code> <code>
-systemctl enable fastd@ffpi+systemctl enable fastd
 </code> </code>
  
Zeile 199: Zeile 226:
  
 ===== Netzwerkkonfiguration ===== ===== 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.
 +
 +''enp0s1'' muss gegebenefalls durch das korrekte physische interface ausgetauscht werden. Mittels ''ip a'' kann man sich alle verfügbaren Interfaces anzeigen lassen.
 +
 +<file conf /etc/network/interfaces>
 +auto lo enp0s1
 +iface lo inet loopback
 +iface enp0s1 inet static
 + address 91.143.81.176
 + netmask 255.255.255.0
 + broadcast 91.143.81.255
 + gateway 91.143.81.1
 +iface enp0s1 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 1000mbit/1000mbit
 + 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
 +</file>
 +
 +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.
 +
 +Alle eingehenden Pakete auf dem Interface br-ffpi mit dem Wert 0x1 markieren.
 +<code>
 +iptables -t mangle -A PREROUTING -i br-ffpi -j MARK --set-xmark 0x1/0xffffffff
 +cd /etc/iptables
 +iptables-save > rules.v4
 +</code>
 +TODO Wofür ist die markierung?
 +
 +
 +<file conf /etc/sysctl.conf>
 +[...]
 +# 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.enp0s1.autoconf = 0
 +net.ipv6.conf.all.accept_ra = 0
 +net.ipv6.conf.default.accept_ra = 0
 +net.ipv6.conf.enp0s1.accept_ra = 0
 +</file>
 +
 +Neuladen mit ''sysctl -p''
 +
 +<file bash /etc/rc.local>
 +/sbin/ip route add unreachable default table freifunk
 +/sbin/ip rule add from all fwmark 0x1 table freifunk
 +exit 0
 +</file>
 +
 +===== Exit-VPN (OpenVPN) =====
 +Über das Exit-VPN wird der Traffic der Clients ins Internet ausgeleitet.
 +Dafür wird zumeist [[openvpn|OpenVPN]] genutzt. In diesem Beispiel wird als VPN Provider Mullvad verwendet.
 +
 +Falls noch nicht geschehen installieren wird OpenVPN aus den Paketquellen
 +<code>apt-get install openvpn</code>
 +
 +==== Konfiguration ====
 +
 +  * Der zu verwendende Exit wird in ''/etc/default/openvpn'' festgelegt
 +  * Der dort eingetragene Name kennzeichnet die Konfigurationsdatei unter ''etc/openvpn'', für die zu verwendende Datei wird das Suffix ''.conf'' angehängt
 +  * Jedes ExitVPN wird in einem eigenen Unterverzeichnis verwaltet, unter ''/etc/openvpn'' befinden sich nur Links zu den jew. Konfiguraionsdateien
 +  * Das Land und der Server für das ExitVPN sind von Bedeutung, können jedoch nicht automatisch ermittelt werden. Die passende Stelle für die Erfassung dieser Daten ist die Konfigurtionsdatei für den jeweiligen OpenVPN-Tunnel.
 +    * In der ersten Zeile der Konfigurationsdatei wird das verwendete Land eingetragen. Das ist dann für Scripte auswertbar, z.B. für Alfred. In der zweiten Zeile wird der Name des Servers angegeben.
 +
 +Wir erstellen eine config für mullvad
 +<WRAP center round important 100%>
 +**Wichtiger Hinweis:** 
 +Immer sicherstellen, daß in der Konfiguration die Option ''**route-noexec**''
 +eingestellt ist. Damit wird insbesondere keine Default-Route über das Exit-VPN
 +gesetzt. Vergißt man die Einstellung und startet die VPN-Verbindung, so schließt
 +man sich vom Server aus. Dann hilft meistens nur noch Booten in den Rettungsmodus.
 +</WRAP>
 +
 +<file conf /etc/openvpn/mullvad/mullvad_nl.conf>
 +## ExitCountry = NL
 +## ExitServer = NL4
 +client
 +dev-type tun
 +dev mullvad
 +proto udp
 +remote no.mullvad.net 1197
 +cipher AES-256-CBC
 +resolv-retry infinite
 +nobind
 +persist-key
 +persist-tun
 +#comp-lzo
 +verb 3
 +remote-cert-tls server
 +ping-restart 60
 +sndbuf 524288
 +rcvbuf 524288
 +fast-io
 +script-security 2
 +route-noexec
 +up /etc/openvpn/exitvpn-up
 +down /etc/openvpn/exitvpn-down
 +ping 10
 +ca /etc/openvpn/mullvad/mullvad_ca.crt
 +auth-user-pass /etc/openvpn/mullvad/mullvad_userpass.txt
 +tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA
 +</file>
 +
 +In der Konfiguration wird auf 4 Dateien verwiesen.
 +  * /etc/openvpn/exitvpn-up
 +  * /etc/openvpn/exitvpn-down
 +  * /etc/openvpn/mullvad/mullvad_ca.crt
 +  * /etc/openvpn/mullvad/mullvad_userpass.txt
 +
 +Die mullvad_ca und mullvad_userpass werden von mullvad bereit gestellt, und sind für jeden vpn zugang individuell.
 +
 +Das exitvpn-up script sieht wie folgt aus.
 +<file bash /etc/openvpn/exitvpn-up>
 +#!/bin/bash
 +
 +# Freifunk Community Pinneberg
 +# Automatisierung Exit-VPN
 +
 +ip route replace 0.0.0.0/1 via $4 table freifunk
 +ip route replace 128.0.0.0/1 via $4 table freifunk
 +
 +# Prüfe, ob der Parameter angegeben sind. $1 ist der Provider.
 +# Falls nicht, versuche den Provider aus der Konfiguration zu ermitteln
 +if [ $# -eq 0 ]; then
 +    VPNCONF=$(grep -e "^AUTOSTART=" /etc/default/openvpn)
 +    PROVIDER=$(sed -e 's/^"//' -e 's/"$//' <<< ${VPNCONF#*=})
 +else
 +    PROVIDER=$1
 +fi
 +         
 +# Masquerading Regel überprüfen und ggf. korrigieren
 +FWRULE=$(iptables --line-numbers -t nat -vnL | grep MASQUERADE | head  -n 1 | awk '{$1=$1};1')
 +NATIF=$(echo "$FWRULE" | cut -d' ' -f 8)
 +RULENO=$(echo "$FWRULE" | cut -d' ' -f 1)
 +
 +if [ "$NATIF" != "$PROVIDER" ]; then
 +    logger -t  exitvpn[$$] "change firewall interface from '$NATIF' to '$PROVIDER' (rule #$RULENO)"
 +    iptables -t nat -D POSTROUTING $RULENO
 +    iptables -t nat -A POSTROUTING -o $PROVIDER -j MASQUERADE
 +fi
 +
 +exit 0
 +</file>
 +und das exitvpn-down script
 +<file bash /etc/openvpn/exitvpn-down>
 +#!/bin/bash
 +
 +# Prüfe, ob Parameter angegeben sind. $1 ist der Provider.
 +# Falls nicht, versuche den Provider aus der Konfiguration zu ermitteln
 +if [ $# -eq 0 ]; then
 +    VPNCONF=$(grep -e "^AUTOSTART=" /etc/default/openvpn)
 +    PROVIDER=$(sed -e 's/^"//' -e 's/"$//' <<< ${VPNCONF#*=})
 +else
 +    PROVIDER=$1
 +fi
 +
 +# Masquerading Regel entfernen
 +FWRULE=$(iptables --line-numbers -t nat -vnL | grep MASQUERADE | head  -n 1 | awk '{$1=$1};1')
 +NATIF=$(echo "$FWRULE" | cut -d' ' -f 8)
 +RULENO=$(echo "$FWRULE" | cut -d' ' -f 1)
 +
 +if [ "$NATIF" == "$PROVIDER" ]; then
 +    # TODO logger benutzen
 +    logger -t  exitvpn[$$] "removing firewall interface '$NATIF' (rule #$RULENO)"
 +    iptables -t nat -D POSTROUTING $RULENO
 +fi
 +
 +exit 0
 +
 +</file>
 +===== Erster Start =====
 +Nun fastd starten
 +<code>systemctl start fastd</code>
 +und die MAC-Adresse auslesen.   
 +<code>cat /sys/class/net/mesh-vpn/address</code>
 +
 +Sollte das auslesen fehlschlagen ist dies ein zeichen das fastd nicht die ffpi config geladen hat. Als workaround kann man expliziet mit der Config starten.
 +<code>systemctl start fastd@ffpi</code>
 +
 +Sollte es weiterhin fehlschlagen kann man zu debug zwecken fastd auch im vordergrund manuell starten
 +<code>fastd --config /etc/fastd/ffpi/fastd.conf --log-level debug</code>
 +
 +Die MAC-Adresse des mesh-vpn-Interfaces kopieren und in die fastd.conf-Datei einbauen.
 +===== DHCP =====
 +
 +Wir verwenden den ISC DHCP Server.
 +
 +  apt-get install isc-dhcp-server
 +  mkdir -p /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:fastd /etc/dhcp/static/*.conf
 +
 +Beispielkonfiguration für gate04, auf anderen Gateways muss die Konfiguration entsprechend angepasst werden, insbesondere auch die Standardroute und die zu verwendenden DNS-Server.
 +Infos zu den IP Adressen bieten die Wiki Seite [[netzwerk|netzwerk]]. 
 +
 +<file conf /etc/dhcp/dhcpd.conf>
 +
 +#
 +# 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";
 +</file>
 +
 +DHCP auf das Bridge-Interface beschränken
 +
 +<file conf /etc/default/isc-dhcp-server>
 +[...]
 +INTERFACES-v4="br-ffpi"
 +</file>
 +
 +Und wir möchte noch das der DHCP bei änderungen der Konfiguration automatisch neu startet
 +<file conf /etc/incron.d/dhcpd>
 +/etc/dhcp/static IN_CREATE,IN_NO_LOOP /etc/init.d/isc-dhcp-server restart
 +</file>
 +<code>chmod +x /etc/incron.d/dhcpd</code>
 +
 +===== DNS =====
 +TODO
 ===== Protokollierung ===== ===== Protokollierung =====
 ===== Statistiken ===== ===== Statistiken =====
gateway_installation_debian_12.1709319964.txt.gz · Zuletzt geändert: 01.03.2024 20:06 von kevin