Benutzer-Werkzeuge

Webseiten-Werkzeuge


freifunk:supernodes

Supernode, Variante A: mit Extra-VPN ins Internet

aufsetzen der Supernode spezifischen Teile.
(über debian beschriebene Tools hinausgehend)

Ansible Deployment

FIXME muss als Ansible Rolle erstellt werden

apt-get install  openvpn

Generisch:
$VPN-Anbieter-Config herunterladen, Konfigurationsdatein nach /etc/openvpn/ kopieren, gegebenenfalls die Zielserver in der Konfiguration anpassen.

Mullvad-Beispiel: Unterordner supernode_mullvad/, dorthin die Konfigurationsdateien entpacken.

Datei: etc/openvpn/supernode_mullvad.conf

# Notice to Mullvad customers:
# 
# Apart from openvpn, you also need to install the
# package "resolvconf", available via apt, e.g.
#
# For those of you behind very restrictive firewalls,
# you can use our tunnels on tcp port 443, as well as
# on udp port 53.
client
 
dev tun
 
proto udp
#proto udp
#proto tcp
 
#remote openvpn.mullvad.net 1300
#cipher AES-256-CBC
 
#remote openvpn.mullvad.net 443
#cipher BF-CBC
 
#remote openvpn.mullvad.net 53
#cipher BF-CBC
 
#remote se.mullvad.net 1300 # Servers in Sweden
#cipher AES-256-CBC
 
remote nl.mullvad.net 1300 # Servers in the Netherlands
cipher AES-256-CBC
 
#remote de.mullvad.net 1300 # Servers in Germany
#cipher AES-256-CBC
 
#remote us.mullvad.net 1300 # Servers in the USA
#cipher AES-256-CBC
 
#remote openvpn.mullvad.net 1194
#remote openvpn.mullvad.net 443
#remote openvpn.mullvad.net 53
#remote se.mullvad.net # Servers in Sweden
#remote nl.mullvad.net # Servers in the Netherlands
#remote de.mullvad.net # Servers in Germany
#remote us.mullvad.net # Servers in the USA
 
# Tunnel IPv6 traffic as well as IPv4
tun-ipv6
 
# Keep trying indefinitely to resolve the
# host name of the OpenVPN server.  Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite
 
# Most clients don't need to bind to
# a specific local port number.
nobind
 
# Try to preserve some state across restarts.
persist-key
persist-tun
 
# Enable compression on the VPN link.
comp-lzo
 
# Set log file verbosity.
verb 3
 
remote-cert-tls server
 
ping-restart 60
 
# Allow calling of built-in executables and user-defined scripts.
script-security 2
 
route-noexec
# Parses DHCP options from openvpn to update resolv.conf
#up /etc/openvpn/update-resolv-conf
#down /etc/openvpn/update-resolv-conf
 
ping 10
 
up supernode_mullvad/mullvad-up
ca supernode_mullvad/ca.crt
cert supernode_mullvad/mullvad.crt
key supernode_mullvad/mullvad.key
 
crl-verify supernode_mullvad/crl.pem
 
# Limit range of possible TLS cipher-suites
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-SEED-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA

Datei supernode_mullvad/mullvad-up

#!/bin/bash
 
# Info-Logging ins Syslog
/usr/bin/logger "OPENVPN VPN Gateway up-Skript" 
# das setzt die default-Routen für UNSERE SPEZIAL-ROUTENTABELLE 42 (!)
# wichtig, ist hier vermutlich "nur" um route_vpn_gateway-Änderungen zu übernehmen
/sbin/ip route replace default via ${route_vpn_gateway} dev ${dev} table 42
exit 0

Wichtig: Permissions richtig setzen:

chmod 600 mullvad.key
chmod +x mullvad-up

.. + weitere? FIXME

» Unbedingt testen, ob das OpenVPN automatisch hochkommt! «

fastd Clients akzeptieren

FIXME besser Dokumentieren

Ansible fastd Rolle

Git pull Automatik

Regelmäßiges „git pull“ als Cronjob einrichten:
Unser Git-Pull-Skript Template basiert auf dem Skripts im Hamburg-Wiki)

Cronjob-Einstellungen siehe hier

TINC Supernode Backbone L2 Modus

Supernodes untereinander Verbinden.

apt-get install tinc
cd /etc/tinc
mkdir backbone
echo "backbone" >> nets.boot
cd backbone

tinc.conf, X einfügen

Name=snX
Address=snX.freiburg.freifunk.net
 
Device=/dev/net/tun
#Mode=router
Mode=switch
#Cypher=aes-256-cbc
Cypher=aes-256-gcm
#Compression=9
 
ConnectTo=sn1
ConnectTo=sn2
ConnectTo=sn3
ConnectTo=sn4
ConnectTo=sn5
ConnectTo=sn6
ConnectTo=sn7
ConnectTo=sn8
ConnectTo=sn9
ConnectTo=sn10
ConnectTo=sn11
ConnectTo=sn12

tinc-up <Mac>

#!/bin/sh
ip link set up dev $INTERFACE
#ip link set $INTERFACE address <insert mac here>
/usr/local/sbin/batctl if add $INTERFACE
chmod +x tinc-up
 
# generiere 4096 Bit RSA 
tincd -K4096
mv ../rsa_key.p* ./
git clone https://cccfr.de/git/protagonist/fffr-tinc-peers.git
ln -s fffr-tinc-peers hosts

Git Automatik

todo

Firewall

apt-get install iptables-persistent

Erstelle Iptables-Rules v4 für br-fffr Freifunk-Bridge-Interface und Uplink-VPN mit NAT auf tun0 via Routingtabelle 42, und mache sie dann persistent:

iptables -t mangle -A PREROUTING -i br-fffr -j MARK --set-xmark 0x1/0xffffffff
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
 
# save current total set of iptables rules
iptables-save > /etc/iptables/rules.v4

Die /etc/iptables/rules.v4 könnte so aussehen (nicht 1:1 übernehmen!)

| title rulesv4.conf
*filter
:INPUT ACCEPT [1931:292508]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1676:285301]
COMMIT
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i br-fffr -j MARK --set-xmark 0x1/0xffffffff
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT

Interfaces

FIXME Veraltete Interfaces …

Datei /etc/network/interfaces Beispiel:

auto lo
iface lo inet loopback
 
allow-hotplug eth0
<eth0 Konfiguration je nach Server>
 
# bridge
auto br-fffr
iface br-fffr inet static
        address <Supernode-IPv4 einfügen> # 10.60.0.1X
 
        # VORERST, WIRD SICH AENDERN!
        netmask 255.255.192.0
        bridge_ports none
        bridge_stp no
 
        # Spezial-Routingtabelle 42
        post-up /sbin/ip rule add iif br-fffr table 42
        pre-down /sbin/ip rule del iif br-fffr table 42
 
        # TODO v6 Routingtabelle
 
        # performance fix, bridge multicast hash table
        post-up echo 2048 > /sys/class/net/br-fffr/bridge/hash_max
 
iface br-fffr inet6 static
        address <Supernode-IPv6 einfügen>
        netmask 64
 
allow-hotplug bat0
iface bat0 inet6 manual
        pre-up /usr/local/sbin/batctl if add mesh-vpn
        up /sbin/ip link set $IFACE up
        post-up /sbin/brctl addif br-fffr $IFACE
 
        # batman interval
        post-up /usr/local/sbin/batctl it 10000
 
        # nur anschalten wenn Supernode, echte Durchsatz-Kapazitäten in Up/Down angeben
        # post-up /usr/local/sbin/batctl gw_mode server 54mbit/54mbit
 
        post-up /sbin/ip rule add from all fwmark 0x1 table 42
        pre-down /sbin/brctl delif br-fffr $IFACE || true
        down /sbin/ip link set $IFACE down
 
        # TODO alfred

Auf Supernode-VMs, die sich bei unss auf Herr, Knob und Master befinden gibt es ein spezielles Bridge-Interface eth1 zwischen den VMs. Das wird durch Backbone-Interface realisiert.

</code>

automatischer Gateway-Check

Geht der VPN-Uplink aus $Gründen kaputt, so soll der Server sich automatisch als Batman-Gateway abmelden, und umgekehrt. Auch soll der DHCP dann ausgemacht werden. Dafür ist ein Automatikskript z.B. nach Vorbild aus dem Hamburger Git notwendig.

Neue Version: https://cccfr.de/git/protagonist/fffr-scripts/raw/master/cron-supernode/check_gateway

Wichtig ist

  • VPN-Tunnel-Interfacename
  • Testziel
  • dhcp-Serverdienst-Name

Wir empfehlen einen Pingtest gegen z.B. 192.5.5.241 (ns.isc.org) statt gegen Google (8.8.8.8) ..

minütlicher Cron beim Skript in /usr/local/bin/check_gateway:

* * * * *   /usr/local/bin/check_gateway > /dev/null 2>&1

DNSMASQ als DHCP Server

Die Alternativ-Software, isc-dhcp, hat nach unserer Erfahrung beim Betrieb mit vielen Knoten und wenig RAM Probleme. Wir verwenden DNSMASQ aktuell nur für DHCP, nicht für DNS.
Konfiguration: dnsmasq.conf

DNS Server: bind

Wir verwenden hierfür bind9 (alternativ wäre dnsmasq möglich)

Konfiguration hauptsächlich hier.

Lokal-„fffr“-Zone-Informationen aus dem Git holen

in /etc/bind:

mkdir zones
cd zones
git clone https://cccfr.de/git/mar/fffr-dns.git

/etc/bind/named.conf.local

neuste Informationen per Cronjob bekommen:
autoupdate_bind_fffr_zone.sh herunterladen, ausführbar machen und als regelmäßigen Cron eintragen.

sysctl & Tweaks

Siehe sysctl-Ansible Rolle: /etc/sysctl.conf

Änderungen übernehmen: Server-Neustart oder

sysctl -p

Monitoring

Gehört nicht auf den Supernode. Konfiguration: siehe monitoring_server Ansible-Rolle.

freifunk/supernodes.txt · Zuletzt geändert: 2016/09/26 23:46 von viisauksena