Routingspaß im DN42

Seit einer Woche vertiefe ich meine Routingkenntnisse im »DN42« …

Äh, was, DN42?

dn42 is a big dynamic VPN, which employs Internet technologies (BGP, whois database, DNS, etc). Participants connect to each other using network tunnels (GRE, OpenVPN, Tinc, IPsec) and exchange routes thanks to the Border Gateway Protocol. Network addresses are assigned in the 172.22.0.0/15 and 172.20.0.0/16 range and private AS numbers are used (see registry).

A number of services are provided on the network: see internal (only available from within dn42). Also, dn42 is interconnected with other networks, such as ChaosVPN or some Freifunk networks.

Still have questions? We have a FAQ.

Screenshot

Verbindungsvisualisierung

Kurz: DN42 ist ein »Darknet«, ein »Internet neben dem Internet«, in dem man sich seine Meriten bzgl. Routing durch Try & Error verdienen kann, ohne gleich das Internet lahm zu legen.
Statt tatsächlichen Verbindungen, z. B. über Dark Fiber, nutzt man in DN42 Tunnel, beliebt sind OpenVPN und GRE-over-IPsec.
Ich habe zu dem Zweck meine beiden Raspberry Pis in Graz & Amsterdam aktiviert, sowie auf meinem VPN-Server in Gütersloh »bird« installiert. Um mehr »Spielmasse« zu haben, habe ich in den USA und Frankreich VMs/Server gebucht, sowie auf meinem Server in Nürnberg eine weitere VM hochgefahren.

Kurzum: im DN42 bin ich jetzt quasi ein multi-nationaler ISP mit Peerings in US (Atlanta), FR (Roubaix, Paris), DE (Gütersloh, Nürnberg), NL (Amsterdam), AT (Graz) ;)

wusel@ponder:~$ traceroute io.nixnodes.dn42
traceroute to io.nixnodes.dn42 (172.22.177.3), 30 hops max, 60 byte packets
 1  gw-b.uu.dn42 (172.20.41.145)  0.848 ms  0.943 ms  1.354 ms
 2  gw-alice-b.vpn.uu.org (192.251.226.173)  31.603 ms  33.436 ms  34.675 ms
 3  hulk-routing.mhm.dn42 (172.23.67.43)  43.379 ms  43.770 ms  45.470 ms
 4  gige-le0-edge1.core.nixnodes.dn42 (172.22.177.201)  65.760 ms  68.908 ms  69.478 ms
 5  gige-le0-vce0.nixnodes.dn42 (172.22.177.202)  70.755 ms  72.509 ms  72.828 ms
 6  nixnodes.dn42 (172.22.177.3)  75.733 ms  76.067 ms  81.382 ms

Simuliert man einen Linkausfall (und wartet einen Moment – ca. 240 Sekunden –, bis sich die fehlende Route im Netz verteilt hat), nehmen die Daten einen anderen Weg; da die Kenntnisse in DN42 variieren, nicht zwingend den besten (von Berlin über Gütersloh und Frankfurt nach San Franciso ist sicherlich eine schicke Strecke für die IP-Pakete, aber auch mit einer gewissen Latenz verbunden):

wusel@ponder:~$ traceroute io.nixnodes.dn42
traceroute to io.nixnodes.dn42 (172.22.177.3), 30 hops max, 60 byte packets
 1  gw-b.uu.dn42 (172.20.41.145)  0.939 ms  1.626 ms  1.772 ms
 2  gw-alice-b.vpn.uu.org (192.251.226.173)  38.734 ms  38.921 ms  39.421 ms
 3  core1.fra.flo.dn42 (172.20.2.1)  45.250 ms  47.497 ms  48.838 ms
 4  core.sf.flo.dn42 (172.20.2.49)  212.654 ms  216.073 ms  216.874 ms
 5  gige-edge-us-1.core.nixnodes.dn42 (172.23.4.131)  294.366 ms  294.639 ms  296.092 ms
 6  172.23.3.1 (172.23.3.1)  237.755 ms  239.757 ms  243.656 ms
 7  gige-le0-vce0.nixnodes.dn42 (172.22.177.202)  247.146 ms  217.969 ms  226.232 ms
 8  nixnodes.dn42 (172.22.177.3)  226.747 ms  226.337 ms  225.643 ms

Multinationales Routing »richtig« hinzubekommen, steht auch bei mir als nächstes auf dem »Lehrplan« … denn aus NL & AT ist der Weg über ein deutsches/europäisches Peering i. d. R. sinnvoller, das kann das Routingprotokoll aber leider schlecht riechen:

Hop   NL     AT     Berlin  
1 us1-nl1.dn42.uu.org 95.118 ms us1-at1.dn42.uu.org 113.300 ms gw-b.uu.dn42 0.992 ms
2 us-atl2.tombii.dn42 95.576 ms us-atl2.tombii.dn42 113.790 ms gw-alice-b.vpn.uu.org 35.237 ms
3 172.22.102.35 116.528 ms 172.22.102.35 134.133 ms hulk-routing.mhm.dn42 45.462 ms
4 gige-edge-us-1.core.nixnodes.dn42 123.047 ms gige-edge-us-1.core.nixnodes.dn42 141.178 ms gige-le0-edge1.core.nixnodes.dn42 70.133 ms
5 gige-le0-edge1.core.nixnodes.dn42 135.716 ms gige-le0-edge1.core.nixnodes.dn42 152.600 ms gige-le0-vce0.nixnodes.dn42 74.627 ms
6 gige-le0-vce0.nixnodes.dn42 137.726 ms gige-le0-vce0.nixnodes.dn42 152.392 ms nixnodes.dn42 86.110 ms
7 nixnodes.dn42 138.392 ms nixnodes.dn42 159.354 ms

Ja, das ist offensichtlich tricky, den bevor ein neues Peering in Frankreich und den USA hinzu kam, sah der Weg aus Holland noch so aus:

root@rpi-nl:~# traceroute io.nixnodes.dn42
traceroute to io.nixnodes.dn42 (172.22.177.3), 30 hops max, 60 byte packets
 1  de1-nl1.dn42.uu.org (193.26.120.212)  13.586 ms  13.426 ms  13.248 ms
 2  hulk-routing.mhm.dn42 (172.23.67.43)  25.237 ms  24.793 ms  24.886 ms
 3  gige-le0-edge1.core.nixnodes.dn42 (172.22.177.201)  44.792 ms  44.406 ms  44.773 ms
 4  gige-le0-vce0.nixnodes.dn42 (172.22.177.202)  46.307 ms  45.853 ms  46.015 ms
 5  nixnodes.dn42 (172.22.177.3)  45.055 ms  44.670 ms  46.314 ms
Netzwerkzeichnung

(Über­hol­te) Skiz­ze des zu­künf­tigen FFGT-Netz­werks

Nun ist das nur zum Teil Spiel & Spaß; für Freifunk Gütersloh haben wir uns vorgenommen, ein mehrstufiges Setup mit Routing-Knoten, die auch den IPv4- und IPv6-Übergang ins Internet regeln, aufzubauen, was nach außen BGP spricht, nach innen OSPF (denn bei BGP hat man durchaus mal 3-4 Minuten Wartezeit, bis sich Routen ändern; bei OSPF geht das binnen Sekunden).

Um also mit BGP (und ggf. OSPF) sinnvoll experimentieren zu können, brauche ich ein eigenes Netz von »Standorten« und Peers, damit ich überprüfen kann, ob der Link von A nach B über C auch nach den Änderungen noch funktioniert; da kommt dann DN42 ins Spiel.

Das Schöne ist, daß hier alle nur mit Wasser kochen, (fast) alle das auch wissen und DN42 als Spielwiese sehen, und so kommen dann auch mal solche Chats zustande ;)

<wusel> Hmm, do we have a routing issue?
<xxxx> We might
<wusel> traceroute to 172.23.xxx.5 (172.23.xxx.5), 30 hops max, 60 byte packets
<wusel>  3  nl1-de1.dn42.uu.org (193.26.120.213)  59.577 ms  59.616 ms  60.484 ms
<wusel>  4  172.23.215.226 (172.23.215.226)  64.937 ms  65.382 ms  67.090 ms
<wusel>  5  * * *
<wusel> And from US:
<wusel> traceroute to 172.23.xxx.5 (172.23.xxx.5), 30 hops max, 60 byte packets
<wusel>  1  172.23.215.224 (172.23.215.224)  22.037 ms  22.035 ms  22.040 ms
<wusel>  2  * * *
<xxxx> It must be my internal routing
<xxxx> grah
<wusel> Sorry ;)
<xxxx> I'll live. ;)
<wusel> I'm rather sure that I do announce my networks, I use a /28 per site, and announce the /25 per site as well. I think ...
<xxxx> I will take a look at it tomorrow