Trafficaufteilung auf Gateway

Christian Dresel fff at chrisi01.de
Mi Jan 6 13:39:38 CET 2016


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hi

schon lange hab ich überlegt, wie ich den Internettraffic auf einen
Gateway aufteilen kann (ihr wisst ja ich und Routingtabellen...). Ich
glaub ich hab nun eine Lösung, möchte diese mal vorstellen und zur
Diskussion anregen sowie Verbesserungen hören.

In meinen Fall möchte ich jetzt die nbgland Hood auf meinem Gateway zu
 meinem Pi das in einem RZ steht umleiten und mit 100Mbit unmetered
angebunden ist, im Olsr Netz hängt und ein direkter Tunnel zu meinem
GW besteht (leider als exit auch nur Mullvad hat). Das PI macht kein
Batman sondern hat nur nen Olsr Link. Ich bediene noch Fürth&Ansbach
mit meinem gateway und das soll normal direkt zum VPN weiterhin raus.

Auf meinem Gateway:
zuerst hab ich eine neue Routingtabelle angelegt:
vi /etc/iproute2/rt_tables
12	nbgland

diese füllen wir mit einem default nach fffpicd1:
ip route add default via 10.50.252.251 dev fff-pi-cd1 table nbgland

Nun müssen wir alle Pakete die von 10.50.88.0/21 mit iptables
maskieren und noch sagen das er für die maskierte Pakete in die table
nbgland gucken soll (dort steht ja als default Gateway das PI). Das
ganze hab ich so gelöst:
iptables -A PREROUTING -t mangle -s 10.50.88.0/21 ! -d 10.0.0.0/8 -j
MARK --set-mark 3
ip rule add fwmark 3 table nbgland

Wichtig ist, das wir mit ! -d 10.0.0.0/8 den ganzen Freifunkinternen
Traffic ausschließen (den Hop kann man sich sparen ;) Danke an Tim für
die Idee ich wusste nicht so recht wie ich -d IPs ausschließen soll
aber mit ! geht das wunderbar :))

Ein Problem besteht nun noch, wenn mein fff-pi-cd1 mal aus welchen
Grund auch immer down sein sollte, hängen die Clients in der Luft und
kommen nicht mehr ins Internet. Olsr baut ja diesen Fall nicht um da
ich die Pakete manuell einfange.

Daher hab ich mir Toms Script (
https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen#OpenVPN_St
art.2FStop_Automatik
) bedient, vereinfacht und auf meine Verhältnisse angepasst:

- ---
#!/bin/bash
ping1 () {
    ping -c 3 -i 5 8.8.8.8 -I fff-pi-cd1
    ping1_ExitCode=$?
    echo "$(date): Exit Status: ${ping1_ExitCode}"
}


while true
do
    ping1
    # check if ping successful
    if ([[ ${ping1_ExitCode} -eq 0 ]]); then
        sleep 10;
                echo "Ping success";
    else
                echo "Ping fault";
                iptables -D PREROUTING -t mangle -s 10.50.88.0/21 ! -d
10.0.0.0/8 -j MARK --set-mark 3
    fi
done
- ---
vereinfacht gesagt, wenn durch den Tunnel kein Ping mehr nach 8.8.8.8
geht, schmeiß die Markierung der Pakete raus und da sie dann nicht
mehr markiert sind, werden sie wieder ganz normal behandelt.

dies läuft in einer screen Session in einer Endlosschleife. Ein
erneuter wiederaufbau findet aktuell nicht statt, dies müsste ich dann
manuell auslösen.

Am Exit (in meinem Fall also auf dem RZ PI) muss soweit nichts gemacht
werden außer dafür gesorgt werden das ein Internetzugang besteht und
eben ein Tunnel da ist ;)

Im moment macht mein Gateway 4-5Mbit Traffic (Fürth&Ansbach) auf den
VPN Tunnel und das PI 11-15Mbit (nbgland). Der Mullvad scheint heute
allgemein leider ziemlich lahm zu sein :(

Man könnte das ganze auch weiter spinnen, über Iptables z.b. einzelne
Ports maskieren und diese in eine weitere Tabelle umleiten und so z.b.
torrent Traffic auf irgendeinen Urlahmen sowieso vollgemüllten Server
schieben oder was weiß ich was. Mit Iptables ist da ja viel möglich.

mfg

Christian

- -- 
Kontaktmöglichkeiten ChristianD (Christian Dresel):
Jabber: christian at jabber.community
E-Mail: fff at chrisi01.de
Facebook: https://www.facebook.com/christian.chili
Handy/Whatsapp & Festnetz: auf Nachfrage
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAEBCAAGBQJWjQsKAAoJEOID5jPgWNLiY/AP/Rg2ERXi/UcD9ZL8Yp6t93mn
h9BoJDg9FOF6w8s+YW9wr5L6s6nVYR/a/0RQ6YWWDWjjlGJnXCAlYOtaKq1oE44e
oEKjmTVqUSyFoehWgFbIhX9fclCu5AlvPjHjbF3UG4Fn3f7WGyZbofwWSCv5W16E
Y77pYBvG5KOBJkrU9EY2VWRFLQdCf4li0Ox+QIllV5QhPik1wPu7bjCWJmEZ+DBx
WRJjRZLOvGpyBn75U84bl/CFLtRaJ5B4DiaIWCKiXC/jpBrcCHV4D3sR9cr7MaaP
gdPnZJGqi5yJHXbsiXtB117O+AdqgXO9uAW3lI3gFNYsnWU6DNwFtw0+/+UKbgET
DhsH10/FCuw07yWQjya0x2KH8gc+h0+V4/0jhwp7rsZmEax2GtYqTXUh69uM/slB
Y/mfBVRSpZe5mU3KMgsHDXoV2cWMoXzBz6FF9hPtp9ix20CK7+B0Aq5tWaLh91xP
QvSOgvVDYfnnDkH7BmJYAdU1SwNxY5D9fEJq/vVvU1zKj5PMgN6Ikr7ijCKhUdKA
0bNG7wVNWfhpWp1UcerXn8+5YfkD8grPXdXdfo+sbeQf4fPI1s12DVZ+fpEMA5/C
6EjgRwiYSX3ErjCdoOmY5aNFrizPmr1WAsqbMAtTsW/5AB5UTFTZPJj/240BEeci
sbD0nx7zr/9Nb7O/B5ct
=L4/u
-----END PGP SIGNATURE-----



Mehr Informationen über die Mailingliste franken-dev