Sehr sehr kurz gehaltene - unfertige - Anleitung für einen Gateway unter Debian; Details bitte aus der Gentoo-Anleitung entnehmen.

<>

Unterschiede zwischen Gentoo und Debian (!!! WICHTIG !!!)

Folgende Befehle und Verzeichnisse die in der Gentoo-Anleitung verwendet werden sollten unter Debian nicht genutzt werden.Die Befehle und Pfade für Debian sind in dieser Anleitung angegeben.Befehle (in Klammern die gegenstücke für Debian):

emerge (apt-get)
rc-update (update-rc.d)
rc-service (service)

Verzeichnisse:

/etc/config.d/ (/etc/default/)
/etc/portage/
/etc/local.d/
/etc/layman/
/etc/rc.conf

Statt

/etc/init.d/DAEMON start

wird in Debian die Dienste mit

sudo service DAEMON start

gestartet, gestoppt oder neugestartet.Zudem sollte in dieser Anleitung in /etc/init.d/ nichts verändert werden! Die manuell installierten Dienste unter /usr/local/ werden über die verschiedenen Configs, und damit in richtiger Reihenfolge, gestartet.

Der Cron sollte unter Debian weder gestoppt noch neugestartet werden. Die Configs unter /etc/cron.d/ werden automatisch aktualisiert.

Noch einmal ganz wichtig: Wenn Verzeichnisse oder Dateien unter Debian nicht existieren bitte erst hier nachschauen ob diese unter Debian notwendig sind.


Voraussetzungen

Beispiel von GW2 unter Debian Jessie (8.2) auf einen KVM-VServer. Ich gehe hier nur im groben auf die wichtigsten Unterschiede zur Gentoo-Anleitung ein da vieles identisch ist.

su -c apt-get install sudo
su -c usermod -aG staff,adm,sudo BENUTZERNAME

sudo apt-get install build-essential

Es wird davon ausgegangen dass sudo verwendet wird und so viel wie möglich unter seinem normalen Benutzeraccount erledigt wird. Software die nicht über den Paket-Manager (apt-get) installiert wird sollte unter /usr/local/ erstellt und installiert werden.

Uner Debian gibts layman nicht, stattdessen kann man zur Dokumentation der Konfigurationsdateien etckeeper verwenden.Der abgleichen mit Github fehlt hier aus Sicherheitsgründen wird aber noch nachgereicht.

Grundkonfiguration

Hostname

echo "gw2" | sudo tee /etc/hostname

/etc/hosts wie in der Gentoo-Anleitung

Routing

/etc/iproute2/rt_tables wie in der Gentoo-Anleitung

Kernelparameter

An den Kernelparameter wird nichts verändert!/etc/sysctl.conf wie in der Gentoo-Anleitung

SysFS

entfällt (wird in der /etc/network/interfaces erledigt)

Netzwerk

Externe Anbindung

Die Grundkonfiguration (meist eth0) sollte aus der Installation schon passen.Siehe Netzwerkverbindungen

Bridge

Siehe Netzwerkverbindungen

GRETAP-Tunnel

Siehe Netzwerkverbindungen

Netzwerkverbindungen

sudo apt-get install bridge-utils

In dieser Datei sind "Externe Anbindung", "Bridge", "GRETAP-Tunnel" und B.A.T.M.A.N. zusammengefasst.Diese Lösung ist alles andere als hübsch und auf jeden Fall nicht perfekt aber sie funktioniert.

Das DAD (Duplicate Address Detection) musste ich für das ggrzBR-Interface deaktivieren da dies zu Probleme führte.

Mit dem ggrzBAT-Interface wird auch der Fastd gestartet und gestoppt.In der Config von Fastd wird das ggrzVPN-Interface an ggrzBAT gebunden.

/etc/network/interfaces

# hier darf eth0 nicht fehlen !

###############################
# Tunnel
###############################
# ggrzTUN1: gw1 <-> gw2
# ggrzTUN2: gw1 <-> gw3
# ggrzTUN3: gw2 <-> gw3

auto ggrzTUN1
iface ggrzTUN1 inet manual
        pre-up /bin/ip link add $IFACE type gretap remote 148.251.158.22 local 193.28.153.11 key 1
        pre-up /bin/ip link set address de:ad:be:ef:02:03 dev $IFACE
        post-up ip link set $IFACE up
        post-down /bin/ip link del $IFACE
auto ggrzTUN3
iface ggrzTUN3 inet manual
        pre-up /bin/ip link add $IFACE type gretap remote 5.196.74.176 local 193.28.153.11 key 3
        pre-up /bin/ip link set address de:ad:be:ef:02:05 dev $IFACE
        post-down /bin/ip link del $IFACE
        post-up /bin/ip link set $IFACE up

###############################
# Bridge
###############################
allow-hotplug ggrzDummy
auto ggrzDummy
iface ggrzDummy inet manual
        #bridge_ports ggrzBR
        pre-up /bin/ip tuntap add $IFACE mode tap user root
        post-up /bin/ip link set address de:ad:be:ef:02:00 dev $IFACE
        post-up ip link set $IFACE up
        post-down /bin/ip link del $IFACE

auto ggrzBR
iface ggrzBR inet6 static
        dad-attempts 0
        address fdb5:078b:64cc::12
        netmask 64
        bridge-stp no
        bridge-fd 0
        bridge-hello 10
        bridge-ports ggrzDummy
        #pre-up /sbin/brctl addif $IFACE ggrzDummy
        post-up /bin/ip rule add iif $IFACE table ggrz priority 1810 || true
        post-up /bin/ip route add unreachable default table ggrz || true
        post-up /bin/ip -6 rule add iif $IFACE table ggrz priority 1810 || true
        post-up /bin/ip -6 route add fe80::/64 proto static dev $IFACE table ggrz || true
        post-up /bin/ip -6 route add fdb5:078b:64cc::/64 proto static dev $IFACE table ggrz || true
        #post-up /bin/ip -6 addr add fdb5:078b:64cc::12/64 dev ggrzBR
        pre-down /bin/ip -6 route del fe80::/64 proto static dev $IFACE table ggrz || true
        pre-down /bin/ip -6 route del fdb5:078b:64cc::/64 proto static dev $IFACE table ggrz || true
        pre-down /bin/ip rule del iif $IFACE table ggrz priority 1810 || true
        pre-down /bin/ip route del unreachable default table ggrz || true
        pre-down /bin/ip -6 rule del iif $IFACE table ggrz priority 1810 || true

iface ggrzBR inet static
        address 10.181.0.12
        netmask 255.255.192.0
        broadcast 10.181.63.255

###############################
# Mesh-Interfaces
###############################
auto ggrzBAT
iface ggrzBAT inet manual
        pre-up /usr/local/sbin/batctl -m $IFACE if add ggrzTUN1
        pre-up /usr/local/sbin/batctl -m $IFACE if add ggrzTUN3
        pre-up /usr/local/sbin/batctl -m $IFACE gw server 96mbit/96mbit
        pre-up /usr/local/sbin/batctl -m $IFACE it 10000
        pre-up echo 60 > /sys/class/net/$IFACE/mesh/hop_penalty
        pre-up /sbin/brctl addif ggrzBR $IFACE
        pre-up /bin/ip link set address de:ad:be:ef:02:02 dev $IFACE
        post-up ip link set $IFACE up
        post-up start-stop-daemon -b --start --exec /usr/local/bin/fastd -- --config /etc/fastd/ggrz/fastd.conf;
        pre-down start-stop-daemon --stop --exec /usr/local/bin/fastd;

        post-down /sbin/brctl delif ggrzBR $IFACE
        post-down /usr/local/sbin/batctl -m $IFACE if del ggrzTUN1
        post-down /usr/local/sbin/batctl -m $IFACE if del ggrzTUN3

Ganz wichtig ist dass die MAC-Adressen korrekt angepasst werden!

B.A.T.M.A.N.

B.A.T.M.A.N.

sudo apt-get install linux-headers-$(uname --kernel-release) build-essential
cd /usr/local/src/

#wget http://downloads.open-mesh.org/batman/releases/batman-adv-2015.1/batman-adv-2015.1.tar.gz
wget https://downloads.open-mesh.org/batman/releases/batman-adv-2016.5/batman-adv-2016.5.tar.gz
tar -xzf batman-adv-201*
cd batman-adv-201*
make
sudo make install

sudo cp /lib/modules/$(uname --kernel-release)/kernel/net/batman-adv/batman-adv.ko /root/batman-adv.ko.old
sudo cp net/batman-adv/batman-adv.ko /lib/modules/$(uname --kernel-release)/kernel/net/batman-adv/batman-adv.ko

Jetzt sollte der Befehl /sbin/modinfo batman-advfolgendes ausgeben:

filename:       /lib/modules/3.16.0-4-amd64/updates/net/batman-adv/batman-adv.ko
version:        2015.1
description:    B.A.T.M.A.N. advanced
author:         Marek Lindner , Simon Wunderlich 
license:        GPL
srcversion:     4D64E98D15541F2EB62A9F0
depends:        libcrc32c,crc16
vermagic:       3.16.0-4-amd64 SMP mod_unload modversions

Da das Kernelmodul selbst gebaut wurde muss es bei einem neuen Kernel auch neu gebaut werden!

batctl

sudo apt-get install pkg-config libnl-3-200 libnl-3-dev libnl-genl-3-dev
#wget http://downloads.open-mesh.org/batman/releases/batman-adv-2015.1/batctl-2015.1.tar.gz
wget https://downloads.open-mesh.org/batman/releases/batman-adv-2016.5/batctl-2016.5.tar.gz
tar -xzf batctl-201*
cd batctl-201*
make
sudo make install

FastD

sudo apt-get install cmake bison pkg-config libsodium-dev libcap-dev doxygen libjson-c-dev
cd /usr/local/src

#wget http://git.universe-factory.net/libuecc/snapshot/libuecc-5.tar
#wget --no-check-certificate https://projects.universe-factory.net/attachments/download/81/fastd-17.tar.xz
wget https://projects.universe-factory.net/attachments/download/85/libuecc-7.tar.xz
wget https://projects.universe-factory.net/attachments/download/86/fastd-18.tar.xz

tar -xf fastd-*
tar -xf libuecc-*

cd libuecc-*
cmake .
make
sudo make install
ln -s /usr/local/src/libuecc-7/src/libuecc.so /lib/libuecc.so
ln -s /usr/local/src/libuecc-7/src/libuecc.so.0 /lib/libuecc.so.0
{{{

cd /usr/local/src cd fastd-* cmake . make sudo make install

sudo mkdir -p /etc/fastd/ggrz }}}

fastd-Schlüssel analog Gentoo erstellen

/etc/fastd/ggrz/fastd.conf

log to syslog level verbose;

hide ip addresses yes;
hide mac addresses yes;

interface "ggrzVPN";

method "aes128-gcm";
method "salsa2012+umac";
method "null+salsa2012+umac";

bind 193.28.153.11:10181;
bind [2a02:ff80:1003:2::2]:10181;

mode tap;

include "secret.conf";
mtu 1406; # 1492 - IPv4/IPv6 Header - fastd Header...

include peers from "peers";

status socket "/var/run/fastd-gera-greiz.status";

on up "
    /bin/ip link set address de:ad:be:ef:02:01 dev $INTERFACE up
    /bin/ip link set dev ggrzBAT up
    /usr/local/sbin/batctl -m ggrzBAT if add $INTERFACE
    /sbin/start-stop-daemon -b --start --exec /usr/local/sbin/batadv-vis -- -si ggrzBAT
    /sbin/start-stop-daemon -b --start --exec /usr/local/sbin/alfred -- -i ggrzBR -b ggrzBAT
";

on down "
    /sbin/start-stop-daemon --stop --exec /usr/local/sbin/alfred
    /sbin/start-stop-daemon --stop --exec /usr/local/sbin/batadv-vis
    /bin/ip link set dev ggrzBAT down
    /usr/local/sbin/batctl -m ggrzBAT if del $INTERFACE
    /bin/ip link set dev $INTERFACE down
";

# Accept all keys
on verify "true";

# or with blacklist
#on verify "/etc/fastd/ggrz/fastd-blacklist.sh $PEER_KEY"

Die Blacklist ist noch nicht integriert aber zur Vollständigkeit hier dennoch angegeben:

/etc/fastd/ggrz/fastd-blacklist.sh

#!/bin/bash
PEER_KEY=$1

if /bin/grep -Fq $PEER_KEY /etc/fastd/ggrz/fastd-blacklist.json; then
        exit 1
else
        exit 0
fi

/etc/cron.d/update-fastd-blacklist

# Global variables
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# Update blacklist every 15 minutes.
*/15 * * * * root wget http://irgendwo.de/fastd-blacklist.json -O /etc/fastd/ggrz/fastd-blacklist.json > /dev/null

Exit-VPN

sudo apt-get install openvpn

Config und Scripte einfach in /etc/openvpn kopieren.Die VPN-Config um folgende zwei Zeilen für die Scripte erweitern:

up /etc/openvpn/openvpn.-up.sh
down /etc/openvpn/openvpn.-down.sh

Noch das Interface anpassen:

dev exitVPN

IC-VPN

sudo apt-get install tinc bird bird6

Die Konfigurationsdateien sind mit der Gentoo-Anleitung identisch.

Firewall

Layer 3

sudo apt-get install iptables-persistent

Die Regeln genauso wie in der Gentoo-Anleitung einfügen aber zum Abspeichern folgendes eingeben:

sudo iptables-save | sudo tee /etc/iptables/rules.v4
sudo ip6tables-save | sudo tee /etc/iptables/rules.v6

Layer 2

sudo apt-get install ebtables bridge-utils

Regeln wie in der Gentoo-Anleitung einfügen und wie folgt abspeichern:

sudo EBTABLES_ATOMIC_FILE=/root/ebtables-atomic ebtables -t nat --atomic-save
sudo EBTABLES_ATOMIC_FILE=/root/ebtables-atomic ebtables -t nat --atomic-commit

In der Datei /etc/default/ebtables folgendes ändern damit die Regeln beim Systemstart wieder hergestellt werden:

EBTABLES_LOAD_ON_START="yes"

Dienste

NTP

sudo apt-get install ntp

Da die Host-Uhr des V-Server falsch lief habe ich NTP angepasst damit die Uhr von NTP gestellt wird.Ansonsten kann die Konfiguration aus der Gentoo-Anleitung 1:1 übernommen werden.

/etc/ntp.conf

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst



# listen at localhost and mesh only
#interface ignore wildcard
#interface listen 127.0.0.1
#interface listen ::1
#interface listen 10.181.0.12
#interface listen fdb5:78b:64cc::12

# only use local time, synced with kvm host time
#tos orphan 1

# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

Unter KVM muss die Uhrzeit-Quelle erst angepasst werden damit NTP die Uhrzeit auch verändern kann.

/etc/rc.local

echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource

tsc ohne NTP auf einen V-Server zu verwenden ist keine gute Idee da diese sehr schnell nach dem Mond läuft.

Diese Lösung ist nicht 100% sauber aber mir hats genügt.

Hinweis: NTP bindet sich automatisch an neue Interfaces.

dnsmasq

/etc/resolv.conf

search ffggrz
nameserver 127.0.0.1
nameserver 8.8.8.8

Die hier gezeigte dnsmasq.conf und damit auch das Update-Script ist noch nicht entgültig geklärt, daher sollte diese aus der Gentoo-Anleitung verwendet werden!

/etc/dnsmasq.conf

### Allgemeines

#ignores README.md from Github-README
#conf-dir=/etc/dnsmasq.d,.md
#or use only with with .conf extension
conf-dir=/etc/dnsmasq.d,*.conf

bogus-priv
no-resolv
no-poll
expand-hosts
domain-needed
cache-size=4096
strict-order
interface=ggrzBR
bind-interfaces

### DNS

# DNS Server
server=193.28.153.254
server=213.73.91.35
server=8.8.8.8
server=8.8.4.4

local=/ffggrz/
domain=ffggrz

### DHCP / RA

dhcp-authoritative
#log-dhcp

dhcp-range=10.181.3.1,10.181.4.254,3m
dhcp-option=option:router,10.181.0.12
dhcp-option=option:dns-server,10.181.0.12,10.181.0.11,10.181.0.13,8.8.8.8
dhcp-option=option:ntp-server,10.181.0.12
dhcp-option=option:domain-search,ffggrz
### MTU 1280
##dhcp-option-force=26,1280

dhcp-range=set:v6,::,constructor:ggrzBR,slaac,ra-only,3m
dhcp-option=tag:v6,option6:dns-server,[fdb5:78b:64cc::12],[fdb5:78b:64cc::11],[fdb5:78b:64cc::13],[2001:4860:4860::8888]
dhcp-option=tag:v6,option6:ntp-server,[fdb5:78b:64cc::12],[fdb5:78b:64cc::11],[fdb5:78b:64cc::13]
dhcp-option=tag:v6,option6:domain-search,ffggrz

#enable-ra
#ra-param=ggrzBAT,low,0,0
#ra-param=ggrzBR,high,60,1200

/etc/cron.d/update-dnsmasq-hostfile

# Global variables
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# Update hostsfile every 15 minutes.
*/15 * * * * root /usr/local/bin/update-dnsmasq-hostsfile > /dev/null

/usr/local/bin/update-dnsmasq-hostsfile

#!/bin/bash

# dnsmasq configuration directory
#HOSTSFILE_DIR=/etc/dnsmasq_hostsfile.d/
#CONF_DIR=/etc/dnsmasq_hostsfile.d/
CONF_DIR=/etc/dnsmasq.d/

function getCurrentVersion() {
# Get hash from latest revision
git log --format=format:%H -1
}

cd $CONF_DIR

# Get current version hash
GIT_REVISION=$(getCurrentVersion)

# Automagically commit local changes
# This preserves local changes
git commit -m "CRON: auto commit"

# Pull latest changes from upstream
git fetch
git merge origin/master -m "Auto Merge"

# Get new version hash
GIT_NEW_REVISION=$(getCurrentVersion)

echo "old: $GIT_REVISION"
echo "new: $GIT_NEW_REVISION"

if [ $GIT_REVISION != $GIT_NEW_REVISION ]
then
  # Reload updated configuration
  echo "Reload dnsmasq configuration."
  cat $CONF_DIR/ffggrz-static.conf | sed -r 's/^dhcp-host=([A-Fa-f0-9:]*),([^,]*),([0-9]*)\\.([0-9]*)\\.([0-9]*)\\.([0-9]*).*/ptr-record=\\6.\\5.\\4.\\3.in-addr.arpa,\\2/' | grep  '^ptr-record' > $CONF_DIR/ptr_records_from_static

  service dnsmasq force-reload
fi

Im Github sollte es zwei Konfigurationsdateien geben, eine für die DNS-Auflösung (A, MX, NS, AAA, CNAME, TXT, ...) und eine für statische DHCP IP-Vergabe.

Beispiel:

ffggrz-dns.conf

# Config fuer zusaetlich Domains

#test (Marcus)
address=/bla.ffggrz/10.181.0.101

#test (Eric)
address=/1.eric.ffggrz/10.181.0.120

ffggrz-static.conf

#Config fuer feste IPs und gleich passende Domain(IN-A)

#test (Marcus)
dhcp-host=68:9c:5e:9f:83:15,test_stadtmitte.ffggrz,10.181.0.102

#test (Eric)
dhcp-host=4C:34:88:29:54:A5,eric-1.ffggrz,10.181.0.120

Da dnsmasq die README.md aus dem Github einlesen würde muss im dnsmasq entweder alle *.md ausgeschlossen oder nur *.conf geladen werden.

Hinweis: dnsmasq bindet sich automatisch an neue Interfaces.

Hinweis: Verzeichnis /etc/dnsmasq.d muss nicht erstellt werden!

ALFRED

cd /usr/local/src/

wget http://downloads.open-mesh.org/batman/releases/batman-adv-2015.1/alfred-2015.1.tar.gz
tar -xzf alfred-2015.1.tar.gz
cd alfred-2015.1/

make CONFIG_ALFRED_GPSD=n
sudo make CONFIG_ALFRED_GPSD=n install

Hinweis: Alfred wird von FastD gestartet!

vnstat/vnstati

sudo apt-get install vnstat vnstati
sudo vnstat -u -i ggrzBR
sudo vnstat -u -i ggrzBAT
sudo vnstat -u -i exitVPN
sudo vnstat -u -i ggrzTUN1
sudo vnstat -u -i ggrzTUN3
sudo vnstat -u -i icVPN
sudo chown vnstat:vnstat /var/lib/vnstat/*
sudo service vnstat restart

/etc/cron.d/update-vnstat-webstats.sh

# Global variables
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

*/5 * * * * root /usr/local/bin/update-vnstat-webstats.sh

/usr/local/bin/update-vnstat-webstats.sh

#!/bin/sh

#IFACES=$(ls /var/lib/vnstat/)
IFACES="ggrzBAT exitVPN icVPN"

TARGET=/var/www/html/vnstat/

for iface in $IFACES; do
    /usr/bin/vnstati -i ${iface} -h -o ${TARGET}${iface}_hourly.png
    /usr/bin/vnstati -i ${iface} -d -o ${TARGET}${iface}_daily.png
    /usr/bin/vnstati -i ${iface} -m -o ${TARGET}${iface}_monthly.png
    /usr/bin/vnstati -i ${iface} -t -o ${TARGET}${iface}_top10.png
    /usr/bin/vnstati -i ${iface} -s -o ${TARGET}${iface}_summary.png
done

cat > ${TARGET}index.html <



  
  
  



EOT


for iface in $IFACES; do
    sed s/IFACE/${iface}/g >> ${TARGET}index.html <
    traffic summary
traffic per month
traffic per hour
traffic top10
traffic per day
EOT done echo "" >> ${TARGET}index.html

Frontend

Gibts nur einmal pro Freifunk-Community, daher hier komplett weggelassen.

Optional: munin

sudo apt-get install munin

Integration in Webserver muss selbst erledigt werden.Falls es schon einen munin-server gibt sollte hier der munin-node installiert werden.

Backup und Wartung

Backup

sudo tar -czf - /etc > ~/gw2_backup_$(date +"%Y%m%d_%H%M%S").tar.gz

Das Backup sollte sicher aufbewahrt werden da darin auch Private-Keys und Passwörter stehen!

Wartung

kT

Überprüfung der Einstellungen

brctl show

bridge name     bridge id               STP enabled     interfaces
ggrzBR          8000.deadbeef0200       no              ggrzBAT
                                                        ggrzDummy

batctl -m ggrzBAT gwl

      Gateway      (#/255)           Nexthop [outgoingIF]: advertised uplink bandwidth ... [B.A.T.M.A.N. adv 2015.1, MainIF/MAC: ggrzTUN1/de:ad:be:ef:02:03 (ggrzBAT)]
   de:ad:be:ef:01:01 (255) de:ad:be:ef:01:03 [  ggrzTUN1]: 96.0/96.0 MBit
   de:ad:be:ef:03:04 (255) de:ad:be:ef:03:05 [  ggrzTUN3]: 96.0/96.0 MBit

batctl -m ggrzBAT if

ggrzTUN3: active
ggrzTUN1: active
ggrzVPN: active

ifconfig

eth0      Link encap:Ethernet  HWaddr 52:54:00:28:14:c8
          inet addr:193.28.153.11  Bcast:193.28.153.255  Mask:255.255.255.0
          inet6 addr: 2a02:ff80:1003:2::2/64 Scope:Global
          inet6 addr: fe80::5054:ff:fe28:14c8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:80296635 errors:0 dropped:8033 overruns:0 frame:0
          TX packets:52538871 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:16191904959 (15.0 GiB)  TX bytes:15949713964 (14.8 GiB)

exitVPN   Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.114.0.115  P-t-P:10.114.0.115  Mask:255.255.0.0
          inet6 addr: fd39:cdef:9618:72::1071/112 Scope:Global
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:6024602 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3890046 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:7356020110 (6.8 GiB)  TX bytes:417733636 (398.3 MiB)

ggrzBAT   Link encap:Ethernet  HWaddr de:ad:be:ef:02:02
          inet6 addr: fe80::dcad:beff:feef:202/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8622637 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9438523 errors:0 dropped:31656 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:857382035 (817.6 MiB)  TX bytes:7883348224 (7.3 GiB)

ggrzBR    Link encap:Ethernet  HWaddr de:ad:be:ef:02:00
          inet addr:10.181.0.12  Bcast:10.181.63.255  Mask:255.255.192.0
          inet6 addr: fdb5:78b:64cc::12/64 Scope:Global
          inet6 addr: fe80::dcad:beff:feef:200/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8626127 errors:0 dropped:65 overruns:0 frame:0
          TX packets:9470171 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:736741551 (702.6 MiB)  TX bytes:7884891558 (7.3 GiB)

ggrzDummy Link encap:Ethernet  HWaddr de:ad:be:ef:02:00
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ggrzTUN1  Link encap:Ethernet  HWaddr de:ad:be:ef:02:03
          inet6 addr: fe80::dcad:beff:feef:203/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1458  Metric:1
          RX packets:12414385 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10328976 errors:7 dropped:0 overruns:0 carrier:7
          collisions:0 txqueuelen:1000
          RX bytes:1787847851 (1.6 GiB)  TX bytes:1392594024 (1.2 GiB)

ggrzTUN3  Link encap:Ethernet  HWaddr de:ad:be:ef:02:05
          inet6 addr: fe80::dcad:beff:feef:205/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1458  Metric:1
          RX packets:6878445 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7016310 errors:7 dropped:0 overruns:0 carrier:7
          collisions:0 txqueuelen:1000
          RX bytes:709346982 (676.4 MiB)  TX bytes:779500947 (743.3 MiB)

ggrzVPN   Link encap:Ethernet  HWaddr de:ad:be:ef:02:01
          inet6 addr: fe80::dcad:beff:feef:201/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1406  Metric:1
          RX packets:18217951 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19160527 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:2004329047 (1.8 GiB)  TX bytes:9241262907 (8.6 GiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:88636 errors:0 dropped:0 overruns:0 frame:0
          TX packets:88636 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:11916430 (11.3 MiB)  TX bytes:11916430 (11.3 MiB)

ip addr show

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:28:14:c8 brd ff:ff:ff:ff:ff:ff
    inet 193.28.153.11/24 brd 193.28.153.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2a02:ff80:1003:2::2/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe28:14c8/64 scope link
       valid_lft forever preferred_lft forever
3: gre0@NONE:  mtu 1476 qdisc noop state DOWN group default
    link/gre 0.0.0.0 brd 0.0.0.0
4: gretap0@NONE:  mtu 1462 qdisc noop state DOWN group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
5: ggrzTUN1@NONE:  mtu 1458 qdisc pfifo_fast master ggrzBAT state UNKNOWN group default qlen 1000
    link/ether de:ad:be:ef:02:03 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::dcad:beff:feef:203/64 scope link
       valid_lft forever preferred_lft forever
6: ggrzTUN3@NONE:  mtu 1458 qdisc pfifo_fast master ggrzBAT state UNKNOWN group default qlen 1000
    link/ether de:ad:be:ef:02:05 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::dcad:beff:feef:205/64 scope link
       valid_lft forever preferred_lft forever
7: ggrzDummy:  mtu 1500 qdisc pfifo_fast master ggrzBR state DOWN group default qlen 500
    link/ether de:ad:be:ef:02:00 brd ff:ff:ff:ff:ff:ff
8: ggrzBR:  mtu 1500 qdisc noqueue state UP group default
    link/ether de:ad:be:ef:02:00 brd ff:ff:ff:ff:ff:ff
    inet 10.181.0.12/18 brd 10.181.63.255 scope global ggrzBR
       valid_lft forever preferred_lft forever
    inet6 fdb5:78b:64cc::12/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::dcad:beff:feef:200/64 scope link
       valid_lft forever preferred_lft forever
9: ggrzBAT:  mtu 1500 qdisc noqueue master ggrzBR state UNKNOWN group default
    link/ether de:ad:be:ef:02:02 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::dcad:beff:feef:202/64 scope link
       valid_lft forever preferred_lft forever
10: ggrzVPN:  mtu 1406 qdisc pfifo_fast master ggrzBAT state UNKNOWN group default qlen 500
    link/ether de:ad:be:ef:02:01 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::dcad:beff:feef:201/64 scope link
       valid_lft forever preferred_lft forever
13: exitVPN:  mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.114.0.115/16 brd 10.114.255.255 scope global exitVPN
       valid_lft forever preferred_lft forever
    inet6 fd39:cdef:9618:72::1071/112 scope global
       valid_lft forever preferred_lft forever

ip route show

default via 193.28.153.1 dev eth0
10.114.0.0/16 dev exitVPN  proto kernel  scope link  src 10.114.0.115
10.181.0.0/18 dev ggrzBR  proto kernel  scope link  src 10.181.0.12
193.28.153.0/24 dev eth0  proto kernel  scope link  src 193.28.153.11

ip rule show

0:      from all lookup local
1810:   from all iif ggrzBR lookup ggrz
9181:   from 10.114.0.115 lookup ggrz
32766:  from all lookup main
32767:  from all lookup default

ip route show table ggrz

0.0.0.0/1 via 10.114.0.1 dev exitVPN
unreachable default
128.0.0.0/1 via 10.114.0.1 dev exitVPN

Nicht wundern, die Routing-Regeln werden nicht wie in iptables von oben nach unten abgearbeitet sondern in der Reihenfolge der Netzmaske!


Verschiedenes

Verbesserungen der Anleitung

  • Ausdruck- und Rechtschreibkontrolle xD
  • Kann Alfred über vor fastd gestartet werden? Dadurch könnte Alfred schon beim Systemstart gestartet werden
  • Aufteilung der /etc/network/interfaces zur besseren übersicht
  • Haben die up/down-Scripte des exitVPN einen richtigen Platz unter Debian? (wie unter Gentoo)
  • Anleitung ausbauen um die Abhängigkeit zur Gentoo-Anleitung zu lösen.

Überlegungen zum Betrieb

reine Überlegungen zum Gateway-Betrieb ohne Anspruch auf Richtigkeit

Überlegungen zu IPv6-Only Netzwerken mit Windows/Linux

In der Aktuellen Konfiguration und Version (dnsmasq 2.72) ist ausschließlich das A-Flag im RA (Router-Advertisement-Packet) gesetzt.Daher wird nur im RA (RDNSS Feature) die "DNS Search List" und "Recursive DNS Server" verschickt, dies würde ausreichen damit ein IPv6-Only Netzwerk funktionieren kann.Um aber NTP, SIP, Routen oder ähnliches noch zu setzen wird DHCPv6 benötigt (O-Flag).Da Windows RDNSS nicht unterstützt ist im Moment DHCPv6 für ein funktionierendes Netzwerk notwendig.Erst mit den M-Flag wird über DHCPv6, unabhängig von der Auto-Konfiguration, eine IPv6 vom DHCPv6 vergeben.

In meinen Tests konnten meine Freifunk-Knoten (Gluon 2015.1.2/2015.2), mein Android-Handy (Android 4.2.1), den Raspberry Pi und Banana Pi mit gesetzten A- und O-Flag alles korrekt einstellen.Leider war ich unter Windows 8.1 nicht erfolgreich, erst als das M-Flag gesetzt wurde und der dnsmasq per DHCPv6 - zusätzlich zur autokonfigurierten - eine IPv6 vergeben hat konnte Windows auch alle anderen Daten korrekt einstellen.

Im Parallelbetrieb mit IPv4 reicht die Auto-Konfiguration ohne DHCPv6 da DNS über IPv4 (mit AAAA-Records) aufgelöst wird.

RA = Router-Advertisement-Packet

M-Flag = Managed Address Configuration Flag: statefull, get IP from DHCPv6

O-Flag = Other Configuration Flag: get other data from DHCPv6

A-Flag = Autonomous address-Configuration Flag: stateless

https://weirdfellow.wordpress.com/2014/09/05/dhcpv6-and-ra-with-dnsmasq/

Überlegungen zu Fastd Gateway Auto-Balancing

kT

Überlegungen zur vergabe fester IPs mit dnsmasq für interne Dienste

Vorteile:

  • Zentrale Verwaltung
  • geringere Hürden für Anfänfger da nichts eingstellt werden mussNachteile:
  • kein DHCP-Server -> keine IP
  • manche Geräte unterstützen kein DHCPParallelbetrieb?

Ungelöste Probleme