Verbunden mit Wireguard, wie testen, weiter mit Babel?

Christian Dresel fff at chrisi01.de
Mi Jul 31 23:18:27 CEST 2019


Hallo Richard

ich nehme mir deine Mail jetzt mal an.

On 29.07.19 22:43, Richard Lippmann wrote:
> Ich glaube, dass ich jetzt mit Wireguard von meinem Debian-Server zu
> Christians Dresels Server 81.95.4.186:31349 verbunden bin.

genau genommen ist es ein Server von F3 Netze e.V. ich verwalte ihn nur
(größtenteils)

> 
> Wireguard einrichten war so:
> 
> * IP-Adresse "beantragen" in https://wiki.freifunk-franken.de/w/Portal:Netz
> 
> * Mein Netz ist 10.50.144.0/24

passt

> 
> +++
> cd /etc/wireguard
> vi wg0.conf
> 
> ++++++
> ++++++
> 
> ip link add dev wg0 type wireguard
> ip address add dev wg0 10.50.144.1/24
> 
> +++
> 
> Um zu überprüfen ob ich wirklich verbunden bin mache ich hier auf meinem
> Linuxserver:
> 
> +++
> root at fffgaby1:/etc/wireguard# wg show
> interface: wg0
>   public key: olXoNcQ5....xY=
>   private key: (hidden)
>   listening port: 55845
> 
> peer: 7V+frE....1ARs=
>   endpoint: 81.95.4.186:31349
>   allowed ips: 0.0.0.0/0
>   latest handshake: 1 minute, 21 seconds ago
>   transfer: 644 B received, 3.92 KiB sent
>   persistent keepalive: every 21 seconds
> +++
> 

sieht bis hierher sehr gut aus.

> Und sehe dass der transfer-Wert langsam steigt. Pingen geht aber
> nirgendswo hin. Ich habe mir mal eine IP-Adresse rausgesucht die es
> geben müsste:
> 
> https://wiki.freifunk-franken.de/w/Portal:Netz#10.50.144.0.2F21_.28Oberasbach_Bahnhof_Nord.29_Stand_07.2F2019
> 
> 
> +++
> ping 10.50.40.10
> +++
> 
> aber da kommt nichts zurück.
> 
> Also dann testen mit
> 
> +++
> traceroute 10.50.40.10
> 
> traceroute to 10.50.40.10 (10.50.40.10), 30 hops max, 60 byte packets
>  1  gw.buchabfrage.de (10.17.1.254)  0.688 ms  0.801 ms  1.175 ms
>  2  217.5.98.18 (217.5.98.18)  22.030 ms  22.014 ms  22.002 ms^C
> +++
> 
> Falscher Weg! 10.17.1.254 ist meine Fritzbox. Ich muss vielleicht ein
> Routing auf meinem Linux-Server setzen
> 
> +++
> route add -net 10.50.40.0/24 dev wg0
> root at fffgaby1:/etc/wireguard# traceroute 10.50.40.10
> traceroute to 10.50.40.10 (10.50.40.10), 30 hops max, 60 byte packets
>  1  * * *
>  2  * * *
>  3  * * *
> +++
> 
> Auch in Irrweg. Vielleicht kommen die Ping-Pakete aber einfach nicht zu
> mir zurück weil noch keiner weiß dass ist (10.50.144.1) existiere.

genau, du bist hier in einen großen Irrweg gelandet hast dein Problem
aber selbst sehr gut erkannt :)

> 
> Brauche ich jetzt als nächsten Schritt das Programm "babel" um mit
> Routen etwas zu machen? Ich habe gefunden:
> https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen/Babel

exakt. Auf den Wireguardtunnel habe ich dir bereits Babel von meiner
Seite drauf gelegt. Das heißt ich puste die schon regelmäßig alle
(Freifunk)routen rüber die ich kenne. Du musst nun die Gegenseite
spielen und mit den Routen natürlich auch was anfangen und mir erzählen
wer du eigentlich bist (nämlich 10.50.144/24) das muss ich ja wissen
damit ich weiß wohin ich deine Pakete zustellen soll. Das alles macht
Babel für uns.

Ich kann dir jetzt nur meinen Weg aufzeigen, es gibt durchaus auch
andere Möglichkeiten (z.b. Network Namespaces, schon lange wollte ich es
mir angucken aber bisher kam ich nicht dazu). Um das Freifunknetz von
deinem priv. Netz über das der Tunnel ja aufgebaut wird zu trennen,
nutzen wir mehrere Routingtabellen. Prinzipiell musst du auch dies hier
erstmal alles durchführen:

https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen#OS_Settings

und zwar von dort alles von "IP-Forwarding" bis einschließlich "Routing
Tabelle für Freifunk".

Babel erklärst du, das es seine Routen in die neu angelegte table fff
(#10) legen soll. Das ist in deinen oberen Link schon gut beschrieben,
nämlich in der Babel config:

export-table 10
import-table 10

Damit deine 10.50.1444.0/24 auch im Babel announced wird, muss in dieser
Tabelle auch eine Route drinnen sein mit proto static. Irgendwo willst
du ja Clients anschließen (z.b. auf einen extra VLAN o.ä.) und dort soll
dann diese Route hinzeigen (zum testen sollte auch erstmal lo gehen,
wenn du erstmal keine Clients anschließen willst und es nur auf der
Maschine selbst testen willst). Dies können wir also mit einen aufwasch
erschlagen indem wir in Clientroute mit proto static in die table fff
hinzufügen:

ip route replace 10.50.144.0/24 dev $IFACE proto static table fff

wobei du $IFACE durch das Interface ersetzen solltest, wo später deine
Clients dran hängen (z.b. irgendein VLAN o.ä.).

Ob es geklappt hat, kannst du mit einen

ip route show table fff

abfragen. Sobald Babel läuft sollten da auch alle routen von mir mit
proto babel drinnen liegen (ist dann wirklich ne ganze Menge und nicht
zu übersehen ;)).

Über die ip rules lässt sich nun regeln für welche Adressen in welche
Tabelle geguckt werden. Da wir im Freifunknetz das gesamte 10.0.0.0/8
verwenden, gucken wir einfach sowohl ein- als auch ausgehend für die
10.0.0.0/8 in die table fff. Dies lässt sich mit einen "einfachen":

ip rule add from 10.0.0.0/8 lookup fff
ip rule add from all to 10.0.0.0/8 lookup fff

regeln. Achtung: Falls du Privat auch ein 10/8 Netz verwendest, sperrst
du dich damit u.U. von deiner Maschine aus, wenn dem so ist wird das
ganze bisschen trickreicher. Man müsste dann mit Prioritäten dafür
sorgen, das für dein priv. Netz zuerst in die main geguckt wird und für
das restliche 10/8 in fff.

Ebenso sollte man noch von allen Interfaces wo nur Freifunk drüber läuft
auch in die table fff gucken. Dies lässt sich folgendermaßen regeln:

ip rule add iif $IFACE table fff

auch hier gilt wieder, $IFACE ersetzen durch das Interface.
Sinnvollerweise macht man das mit allen Babelinterfaces (in unseren Fall
dein wireguard) sowie allen Clientinterfaces. Somit werden ALLE Pakete,
egal welcher Absender oder Empfänger der von einem Freifunkinterface
kommt über die table fff geregelt und kommt niemals mit deinem priv.
Netz in Berührung.

Grundsätzlich ist es hilfreich sich mit Routing und ip zu beschäftigen
da dort alles wichtige enthalten ist. Mir ist da gerade keine gute
Anleitung bekannt, im Zweifel hilft die man Page ;) Aber vllt. kennt ja
jemand was gutes und kann es mal aufzeigen.

Für weitere Fragen einfach weiter fragen, wir sind ja dafür da zu lernen
und ich glaube meine Erklärung könnte dich gerade bisschen erschlagen
haben, notfalls wirklich nochmal nachhaken und vllt. kann es auch jemand
anders nochmal von einen anderen Standpunkt aus erklären.

Ich wünsche dir auf jeden Fall viel Erfolg und nicht aufgeben, du
schaffst das schon ;)

Gruß

Christian


> 
> 
> Gruß,
> Richard


Mehr Informationen über die Mailingliste franken