Gateway mit Debian
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 <mareklindner@neomailbox.ch>, Simon Wunderlich <sw@simonwunderlich.de> 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.<vpn-name>-up.sh down /etc/openvpn/openvpn.<vpn-name>-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 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <titleu1 - Network Traffic</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="en" /> </head> <body style="white-space: nowrap"> EOT for iface in $IFACES; do sed s/IFACE/${iface}/g >> ${TARGET}index.html <EOT <div style="display:inline-block;vertical-align: top"> <img src="IFACE_summary.png" alt="traffic summary" /><br> <img src="IFACE_monthly.png" alt="traffic per month" /><br> <img src="IFACE_hourly.png" alt="traffic per hour" /><br> <img src="IFACE_top10.png" alt="traffic top10" /><br> <img src="IFACE_daily.png" alt="traffic per day" /> </div> EOT done echo "</body></html>" >> ${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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <NOARP> mtu 1476 qdisc noop state DOWN group default link/gre 0.0.0.0 brd 0.0.0.0 4: gretap0@NONE: <BROADCAST,MULTICAST> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <NO-CARRIER,BROADCAST,MULTICAST,UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> 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 #
- da batman-adv nur die Verbindung und Verbindungsqualität (TQ) zum nächsten Node kennt entstehen folgende Phänomene:
- Pakete werden über Gateways geschickt obwohl eine Funkverbindung möglich gewesen wäre
- unterschiedliche Bandbreiten werden gleich behandelt
- Bei starker Auslastung mit verschiedenen Routen entsteht ein "schwallartiger" Datenstrom da erst die Route gewechselt wird wenn Pakete (TQ) verloren gehen
- http://trier.freifunk.net/2015/10/21/layer-2-anycast-routing-mit-batman/
- Verteiltes DNS
- Verteiltes DHCP
- Montoring / Fallback / Watchdog
- munin
- monit
- fertige Python-Scripte aus anderen FF-Communitys