technik:gateways:gateway-einrichten-segment

Dies ist eine alte Version des Dokuments!


Doku von Freifunk Mainz/Wiesbaden/Umgebung

Kurzanleitung für Ubuntu 14.04

/etc/iproute2/rt_tables

 70	stuttgart
 42	icvpn
 50	othergw

/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
 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";

/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

/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
 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";
         };
     };
 };
 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;
         };
     };
 };

/etc/rc,local einfuegen

 /usr/local/bin/update-ff &

/usr/local/bin/update-ff

 #!/bin/sh
 wwwpfad="/var/www/html"
 vpns="vpn03"
 #       Endlosschleife
 while : ; do
   ## ffs Peers aktualisieren
   cd /etc/fastd/peers
   back=$( git pull )
   echo "fastd-peers: $back"
   /usr/local/bin/update_peers.py --repo /etc/fastd/peers
   ## ffsbb aktualisieren
   cd /root/tinc-ffsbb/
   back=$( git pull )
   echo "tinc-ffsbb: $back"
   tincd -n ffsbb -k HUP
   # Status veroeffentlichen
   for i in $vpns; do
     status.pl /var/run/fastd-$i.status | jq . | grep -v "\"address\": " >$wwwpfad/data/fastd-status-$i.json
   done
   echo "*** fertig ***"
   sleep 120
 done
  • 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

 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

  • technik/gateways/gateway-einrichten-segment.1502118567.txt.gz
  • Zuletzt geändert: vor 6 Jahren
  • (Externe Bearbeitung)