Infrastruktur

From Freifunk Braunschweig
Jump to: navigation, search

Netzwerkplan

Das hier stimmt nicht mehr so ganzt aber als starke vereinfachung kann es erst mal so bleiben. Das folgende Bild zeigt einen vereinfachten Netwerkplan das braunschweiger Setups. Dabei werden sowohl die Rechner/Router also auch das Routing auch auf freifunk-bs.de gezeitgt.
In Worten:
Die Freifunkrouter bauen einen fastd-Tunnel zu freifunk-bs.de auf. Durch diesen Tunnel werden alle Pakete der am Freifunkrouter angemeldeten Clients geleitet die nicht an Clients im gleichen Adhoc-Netz adressiert sind. freifunk-bs.de kann Pakete von eine Client zu einem anderen Client weiterleiten der nicht im gleichen Adhoc-Netz ist. Außerdem stellt freifunk-bs.de über einen openvpn-Tunnel eine Verbindung in das alte Internet zur Verfügung. Dazu werden alle Pakete aus den Netz 10.38.0.0/16 die an dem Interface br-ffbs ankommen mit 0x01 makiert. Pakete mit der Makierung 0x01 werden von eine ip rule in die Routing-Tabelle freifunk geschoben. Dort werden sie von der Default-Route (0.0.0.0) in den Openvpn-Tunnel von IPredator weitergeleitet.
Auf den Rückweg werden die Pakete von tun0 das NAT wieder auch die ursprünglichen Adressen geändert und dann durch den default-Routing Table auch br-ffbs weitergeleitet. Simple network plan.jpg
Die dia Quelldatei gibt es hier simple_network_plan.dia bitte bei Änderungen anpassen.

Gateway aufsetzen

Sources hinzufügen: folgendes zu /etc/apt/sources.list

deb http://repo.universe-factory.net/debian/ sid main
deb http://apt.rfc2324.org/debian/ wheezy main

und dann noch die keys

# gpg --keyserver pgpkeys.mit.edu --recv-key 16EF3F64CB201D9C C1CEB2640F96BF26
# gpg -a --export 16EF3F64CB201D9C | apt-key add -
# gpg -a --export C1CEB2640F96BF26 | apt-key add -


Pakete installieren

aptitude install bridge-utils batctl=2013.4.0-1 openvpn fastd radvd isc-dhcp-server dnsmasq git batman-adv-dkms alfred

alfred

/etc/default/alfred

#
# /etc/default/alfred
#

#
# This is a POSIX shell fragment
#

# Additional command line options
DAEMON_OPTS="-m"

# Interface for A.L.F.R.E.D. to listen on. Has to be specified.
INTERFACE=br-ffbs

# Specify the batman-adv interface configured on the system (default: bat0).
# Use 'none' to disable the batman-adv based best server selection.
BATMANIF=bat0

disable rp_filter

/etc/sysctl.d/10-network-security.conf

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

batman adv instalieren

dkms remove batman-adv/2013.4.0 --all
dkms --force install batman-adv/2013.4.0

batman-adv bei booten laden: dazu folgendes in /etv/modules schreiben

batman-adv

Netzwerk interfaces

in /etc/network/interfaces folgendes hinzufügen

auto br-ffbs        
iface br-ffbs inet6 static
 bridge-ports none
 address  2001:bf7:380::<gw id>
 netmask 64 
 iface br-ffbs inet static
 address 10.38.0.<gw id>
 netmask 255.255.0.0  

allow-hotplug bat0
iface bat0 inet6 manual

pre-up modprobe batman-adv
pre-up batctl if add fastd_bat
 up ip link set $IFACE up
 post-up brctl addif br-ffbs $IFACE
 post-up batctl it 10000
 post-up batctl gw_mode server
 post-up batctl vis_mode server
 post-up /sbin/ip rule add iif br-ffbs table freifunk
 post-up ip route flush table freifunk
 post-up ip route add unreachable default table freifunk
 post-up /etc/init.d/dnsmasq stop || true
 pre-down iptables -t mangle -F
 #pre-down /sbin/ip rule del iif br-ffbs table freifunk
 pre-down brctl delif br-ffbs $IFACE || true
 down ip link set $IFACE down

fastd

$ mkdir /etc/fastd/vpn
$ mkdir /etc/fastd/vpn/peers/

fastd --generate-key der hier generierte key muss jetzt in die config (/etc/fastd/vpn/fastd.conf) eingetragen werden. den public key merken

bind 0.0.0.0:10000; 
interface "fastd_bat";
user "fastd";
mode tap;
method "salsa2012+gmac";
method "xsalsa20-poly1305";
mtu 1426;
#hier den secret key eintragen 
secret "<secret key>";
log level verbose;
log to "/var/log/fastd.log" level verbose;
#folgende Zeile sorgt dafuer das jeder Peer akzeptiet wird
#on verify "true";
# public key der clients aus dem Verzeichniss ./peers/ laden
include peers from "peers"; 
# wenn fastd_bat up geht wird es zu batman hinzugefügt
on up "
  ip link set up fastd_bat
  batctl if add fastd_bat
";

openvpn

man braucht einen Anbieter, der liefert dann auch eine config. In diese müssen die folgenden Zeilen hinzugefügt werden.

script-security 3 system
down /etc/openvpn/route_and_dnsmasq_remove.sh
route-noexec
route-up /etc/openvpn/route_and_dnsmasq_setup.sh

Desweiteren müssen die folgenden Dateien in /etc/openvpn angelegt werden

route_and_dnsmasq_remove.sh

#!/bin/bash
/etc/init.d/dnsmasq stop
ip route flush table freifunk
ip route add unreachable default table freifunk

route_and_dnsmasq_setup.sh

#!/bin/bash
iptables -t nat -F
iptables -t nat -j SNAT -s 10.38.0.0/16 --to-source $ifconfig_local -o tun0 -A POSTROUTING
ip route flush table freifunk
ip route add default via $route_vpn_gateway dev tun0 table freifunk
/etc/init.d/dnsmasq start


dann noch ausführbar machen:

# chmod +x /etc/openvpn/route_and_dnsmasq_setup.sh
# chmod +x /etc/openvpn/route_and_dnsmasq_remove.sh

DNSmasq

/etc/dnsmasq.d/rules

server=85.214.20.141@tun0 # FoeBud
server=194.150.168.168@tun0 # dns.as250.net
server=213.73.91.35@tun0 # dnscache.berlin.ccc.de

/etc/dnsmasq.d/general

interface=br-ffbs
no-dhcp-interface=br-ffbs
no-dhcp-interface=lo
no-dhcp-interface=eth0 

log-facility=/var/log/dnsmasq.log

domain-needed
#bogus-priv ffbs reverse does not work with this enabled 
no-resolv
no-hosts

addn-hosts=/etc/hosts.ffbs

cache-size=4096



Routing

Da das meiste in dem routeup script von openvpn passiert muss hier nicht mehr viel gemacht werden.

IP Forwarding

IPv4 & IPv6 forwarding aktivieren. Dazu folgende Zeilen in der sysctl.conf einkommentieren

$ vim /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
                                                                                         
# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
net.ipv6.conf.all.forwarding = 1


Freifunk Routing-Table anlegen

diese Zeile in /etc/iproute2/rt_tables kopieren. Sorgt dafür, dass der table "freifunk" vor den anderen/default genuzt wird.

201     freifunk

DHCP

Folgendes in die entsprechende Datein kopieren

/etc/dhcp/dhcpd.conf

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't 
# have support for DDNS.)
ddns-update-style none;


# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

option domain-name ".ffbs";

#fastf_bat network definition
subnet 10.38.0.0 netmask 255.255.0.0 {
 authoritative;
 # hier noch die richtige Range einstellen
 range 10.38.<gw number*2>.1 10.38.<(gw number*2)+1>.254;
 default-lease-time 600;
 max-lease-time 3600;
 option domain-name-servers 10.38.0.1, 10.38.0.2, 10.38.0.<gw nummer>;
 option subnet-mask 255.255.0.0;
 option routers 10.38.0.<gw nummer>;  
}

include "/etc/dhcp/static.conf";


/etc/dhcp/static.conf

host gw1 {
 hardware ethernet 0e:ab:b4:92:74:ce;
 fixed-address 10.38.0.1;
 option host-name "gw1";
}

host gw2 {
 hardware ethernet de:99:25:12:ca:6c;
 fixed-address 10.38.0.2;
 option host-name "gw2";
}

/etc/default/isc-dhcp-server

INTERFACES="br-ffbs"

radvd

/etc/radvd.conf

interface br-ffbs
{
 AdvSendAdvert on;

 MaxRtrAdvInterval 200;


 prefix 2001:bf7:38<gw id>::/48 {
 };

 RDNSS 2001:bf7:380::<gw id> {
 };
};

IP Adressen vergabe

siehe IP-Block-zuweisung

Joining - Layer3 Alfred-Tunnel

Joining ist ein Tool, das Alfred-Daten über UDP versendet. Es wurde entwickelt um Alfred und Batman-adv auf lange Sicht aus dem Infrastukturnetz zu verbannen.

Auf dem Webserver(fredo) läuft es als systemd service namens "joining" /etc/systemd/system/joining.service. Es ersetzt hier auch die beiden Tools alfred-json und batvis, diese haben aber einen identisch formatierten Output.

Auf den Gateway gibt es einen cronjob für den user Root der die Daten periodisch an den Webserver sendent.