Dies ist eine alte Version des Dokuments!
Doku von Freifunk Mainz/Wiesbaden/Umgebung
Kurzanleitung für Ubuntu 14.04
Freifunk Repo zufügen und benötigte Pakete installieren
aptitude install software-properties-common add-apt-repository ppa:freifunk-mwu/freifunk-ppa echo "deb http://repo.universe-factory.net/debian/ sid main" > /etc/apt/sources.list.d/freifunk.list apt-key adv --keyserver keyserver.ubuntu.com --recv 16EF3F64CB201D9C aptitude update aptitude remove bind9 # Bugfix Ubuntu openntpd weil ntp Speicherfehler bringt echo "/etc/openntpd/ntpd.conf r," > /etc/apparmor.d/local/usr.sbin.ntp service apparmor reload aptitude install conntrack dnsmasq isc-dhcp-relay build-essential bridge-utils git batctl fastd batman-adv-dkms batadv-vis openvpn radvd tinc vnstat vnstati openntpd bird
Vorbereitung für Ubuntu 16.04
apt install dnsmasq build-essential bridge-utils git batctl fastd alfred openvpn tinc vnstat isc-dhcp-relay
Test ob modprobe batman-adv eine Fehler ergibt, dann gibt es Probleme mit dem Kernel.
Routing aktivieren
/etc/sysctl.conf
net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 net.netfilter.nf_conntrack_max = 500000
sysctl -p /etc/sysctl.conf
Policyrouting vorbereiten
/etc/iproute2/rt_tables
70 stuttgart 42 icvpn 50 othergw
Interfaces einrichten (IPs anpassen!!!)
/etc/network/interfaces
auto br05 iface br05 inet static hwaddress 02:00:0a:39:05:07 address 10.191.0.17 netmask 255.255.192.0 pre-up /sbin/brctl addbr $IFACE up /sbin/ip address add fd21:b4dc:4b05::a38:57/64 dev $IFACE post-down /sbin/brctl delbr $IFACE # be sure all incoming traffic is handled by the appropriate rt_table post-up /sbin/ip rule add iif $IFACE table stuttgart priority 7000 pre-down /sbin/ip rule del iif $IFACE table stuttgart priority 7000 # default route is unreachable post-up /sbin/ip route add unreachable default table stuttgart post-down /sbin/ip route del unreachable default table stuttgart # ULA route for rt_table stuttgart post-up /sbin/ip -6 route add fd21:b4dc:4b05::/64 proto static dev $IFACE table stuttgart post-down /sbin/ip -6 route del fd21:b4dc:4b05::/64 proto static dev $IFACE table stuttgart allow-hotplug vpn05 iface vpn05 inet6 manual hwaddress 02:00:0a:38:05:07 pre-up /sbin/modprobe batman-adv post-up /usr/sbin/batctl -m bat05 if add $IFACE post-up /sbin/ip link set dev bat05 up allow-hotplug bat05 iface bat05 inet6 manual pre-up /sbin/modprobe batman-adv post-up /sbin/brctl addif br05 $IFACE post-up /usr/sbin/batctl -m $IFACE it 10000 post-up /usr/sbin/batctl -m $IFACE gw server 96mbit/96mbit pre-down /sbin/brctl delif br05 $IFACE || true
VPN/Fastd einrichten (IPs anpassen!!!)
mkdir /etc/fastd/vpn05 git clone https://github.com/freifunk-stuttgart/peers-ffs /etc/fastd/peers ln -s /etc/fastd/peers/vpn05/peers /etc/fastd/vpn05/peers
/etc/fastd/vpn05/fastd.conf
# error|warn|info|verbose|debug|debug2 log level info; hide ip addresses yes; hide mac addresses yes; interface "vpn05"; method "salsa2012+umac"; # new method (faster) method "salsa2012+gmac"; # Bind von v4 and v6 interfaces bind 1.2.3.4:10045; bind [2001:1111:2222:3333::1]:10045; include "secret.conf"; mtu 1406; # 1492 - IPv4/IPv6 Header - fastd Header... include peers from "peers"; status socket "/var/run/fastd-vpn05.status";
Key generieren, alternativ vorhandenen nehmen
fastd --generate-key > /etc/fastd/vpn05/gateway.key echo -n "secret" >/etc/fastd/vpn05/secret.conf cat /etc/fastd/vpn05/gateway.key | head -1 | awk '{print " \""$2"\";"}' >>/etc/fastd/vpn05/secret.conf cat /etc/fastd/vpn05/secret.conf
Ergebis sollte eine Zeile sein die so aussieht:
secret "1234567890123456789012345678901234567890123456789012345678901234";
dnsmasq konfigurieren
/etc/dnsmasq.d/allgemein
interface=br05 interface=bat05 interface=vpn05 bind-interfaces log-facility=/var/log/dnsmasq.log
/etc/dnsmasq.d/dhcp (IPs anpassen!!!)
dhcp-authoritative #log-dhcp domain=freifunk-stuttgart.de dhcp-range=set:ffs05,10.191.48.21,10.191.55.253,255.255.192.0,5m dhcp-option=tag:ffs05,3,10.191.48.1 dhcp-option=tag:ffs05,option:dns-server,10.191.48.1,10.191.56.1 dhcp-option=tag:ffs05,option:ntp-server,10.191.48.1 dhcp-range=set:ffs05v6,::,constructor:br05,slaac,ra-only,5m dhcp-option=tag:ffs05v6,option6:dns-server,fd21:b4dc:4b05::a38:57 enable-ra ra-param=br05,low,60,0
/etc/dnsmasq.d/dns
no-resolv no-hosts cache-size=4096 #log-queries # .ffs/ffstg.de Weiterleitung server=/ffs/172.21.2.60 server=/ffstg.de/51.254.139.175 # Forward DNS requests via wan-vpn server=85.214.20.141 #@tun0 # FoeBud server=213.73.91.35 #@tun0 # dnscache.berlin.ccc.de server=141.1.1.1 #@tun0 # server=8.8.8.8 #@tun0 # Google server=8.8.4.4 #@tun0 # Google
Openvpn Berlin (anderer Anbieter wie CyberGhost)
/etc/openvpn/freifunk.conf
# Datei von Berlin (xxxxxxx-udp.ovpn) rein kopieren oder umbenennen # folgende Zeilen am Anfang hinzufügen route-noexec script-security 2 up "openvpn-up" down "openvpn-down"
/etc/openvpn/openvpn-up
#!/bin/sh ip rule add from $ifconfig_local table stuttgart priority 9970 # Routen kopieren von Tabelle main ip route show table main | grep -v ^default | while read ROUTE ; do ip route add table stuttgart $ROUTE ; done # default route in table stuttgart ip route add 0.0.0.0/1 via $route_vpn_gateway dev $dev table stuttgart ip route add 128.0.0.0/1 via $route_vpn_gateway dev $dev table stuttgart # NAT aktivieren (2 Moeglichkeiten), wird benötigt wenn NICHT Berlin #iptables -t nat -A POSTROUTING -o $dev -j MASQUERADE #iptables -t nat -A POSTROUTING -o $dev -j SNAT --to-source $ifconfig_local #sysctl -w net.netfilter.nf_conntrack_max=500000 exit 0
/etc/openvpn/openvpn-down
#!/bin/sh ip rule del from $ifconfig_local table stuttgart priority 9970 # NAT deaktivieren, wird benötigt wenn NICHT Berlin #iptables -t nat -D POSTROUTING -o $dev -j MASQUERADE #iptables -t nat -D POSTROUTING -o $dev -j SNAT --to-source $ifconfig_local exit 0
chmod +x /etc/openvpn/openvpn-*
reboot
Funktionstest kann beginnen
Bird konfigurieren
Router id 10.191.255.17; # eigene IP im tincbb # Filter definieren filter ffs_filter { krt_metric = 100; if net ~ [ 172.21.0.0/16+ ] then accept; if net ~ [ 10.190.0.0/15+ ] then accept; else reject; } protocol kernel { learn; # Learn all alien routes from the kernel persist no; scan time 20; # Scan kernel routing table every 20 seconds import filter ffs_filter; kernel table 70; # fuer table stuttgart export filter ffs_filter; # Propagate routes with low metric into kernel table device routes; } # This pseudo-protocol watches all interface up/down events. protocol device { scan time 10; # Scan interfaces every 10 seconds } protocol ospf ffsBackbone { preference 100; # prio zahl rfc1583compat no; # Metrik gem. OSPFv2, RFC 2328 stub router no; # Box macht ggf. auch Transit-Traffic tick 1; # Topologie-Berechnungen nur alle 1s ecmp no; # Kein Equal-Cost-Multipath, um Problemen mit unterschiedlichen # Uplinks aus dem Weg zu gehen import filter ffs_filter; export filter ffs_filter; area 0.0.0.0 { # Backbone-Area external{ 0.0.0.0/0; }; interface "ffsbb" { # Run OSPF over VPN cost 100; hello 10; poll 20; retransmit 5; priority 10; wait 40; type bcast; authentication cryptographic; password "xxxyyyzzz"; }; }; };
Bird6 konfigurieren
router id 10.191.255.17; # z.B. 10.191.255.10 # Filter definieren filter ffs_filter { krt_metric = 100; if net ~ [ fd21:b4dc:4b00::/56+ ] then accept; else reject; } protocol kernel { learn; # Learn all alien routes from the kernel persist no; scan time 20; # Scan kernel routing table every 20 seconds import filter ffs_filter; kernel table 70; # fuer table stuttgart export filter ffs_filter; # Propagate routes with low metric into kernel table device routes; } # This pseudo-protocol watches all interface up/down events. protocol device { scan time 10; # Scan interfaces every 10 seconds } protocol ospf ffsBackbone { preference 100; # prio zahl rfc1583compat no; # Metrik gem. OSPFv2, RFC 2328 stub router no; # Box macht ggf. auch Transit-Traffic tick 1; # Topologie-Berechnungen nur alle 1s ecmp no; # Kein Equal-Cost-Multipath, um Problemen mit unterschiedlichen # Uplinks aus dem Weg zu gehen import filter ffs_filter; export filter ffs_filter; area 0.0.0.0 { # Backbone-Area external{ ::/0; }; interface "ffsbb" { # Run OSPF over VPN cost 100; hello 10; poll 20; retransmit 5; priority 10; wait 40; type bcast; }; }; };
Freifunk Aktualisierungen
/etc/crontab
_ */3 * * * * root update-freifunk
/usr/local/bin/update-freifunk
#!/bin/sh # Peers aktualisieren cd /etc/fastd/peers git pull -q # fastd Config reload killall -SIGHUP fastd # VPN Status connections.py >/var/www/html/fastd.html
Tinc VPN Layer 2 einrichten
- Es wird ein Tinc Netz 10.191.255.0/24 erstellt auf jedem GW und den DHCP Servern, evtl. auch noch auf Servern die Dienste innerhalb Freifunk anbieten
- 3 DHCP Server erhalten die IPs 10.191.255.251/24, 10.191.255.252/24, 10.191.255.253/24, diese werden bei den GWs als Relay Server eingetragen
- die Gateways nutzen erhalten eine IP in 10-191.255.x/24.
- Jeder GW macht in Tinc 3 VPN Connects zu den 3 DHCP Servern, diese fungieren als Zentralen des VPN Netzes.
- IPv6 entsprechend einrichten
- Das wars!
/etc/default/tinc einfügen (damit etwas mehr im Logfile/syslog steht)
echo 'EXTRA="-d 2"' >> /etc/default/tinc
mkdir -p /etc/tinc/ffsbb/hosts
/etc/tinc/ffsbb/tinc.conf erstellen
Name = gw07n99 ConnectTo = dhcp01 ConnectTo = dhcp02 ConnectTo = dhcp03 Mode = switch Port = 6551 #GraphDumpFile = /tmp/ffs.gv
/etc/tinc/ffsbb/tinc-up erstellen
#!/bin/sh ip addr add 10.191.255.99/24 broadcast 10.191.255.255 dev $INTERFACE ip link set $INTERFACE up ip rule add iif $INTERFACE table stuttgart priority 7000 ip route add 10.191.255.0/24 proto kernel scope link src 10.191.255.99 dev $INTERFACE table stuttgart ip addr add fd21:b4dc:4b00::a38:9900/64 dev $INTERFACE
chmod +x /etc/tinc/ffsbb/tinc-up
tincd -n ffsbb -K
2 x Return drücken
/etc/tinc/ffsbb/hosts/gw07n99 am Anfang hinzufügen:
address = gw07n99.freifunk-stuttgart.de port = 6551
echo ffsbb >> /etc/tinc/nets.boot
service tinc restart
/etc/tinc/ffsbb/hosts/gw07n99 ins Git kopieren: https://github.com/freifunk-stuttgart/tinc-ffsbb
Tinc VPN Layer 2 einrichten Teil2, hosts Dateien aus Git holen
git clone https://github.com/freifunk-stuttgart/tinc-ffsbb /root/tinc-ffsbb
Alte hosts umbenennen als Backup
mv /etc/tinc/ffsbb/hosts /etc/tinc/ffsbb/hosts.1
Git Dateien verwenden
ln -s /root/tinc-ffsbb/hosts /etc/tinc/ffsbb/hosts
service tinc restart
Gateway sicher vom Netz nehmen
Wenn ein Gateway aus dem Netz raus soll, bitte wiefolgt vorgehen, damit es keine Ausfälle bei den Nodes und Clients gibt
- batctl gw off
- 1 Minute warten
- DHCP Server deaktivieren, bei Dnsmasq die Datei /etc/dnsmasq.d/dhcp entfernen und dnsmasq neu starten
- 10 Minuten warten, damit die Clients eine IP vom Alternativ-DHCP Server bekommen
- fastd beenden
gw setup howto