---

author: Lars Kruse
title: Netzwerk-Routing - ein fortgeschrittener Einstieg

---

Überblick
=========

Was ist Routing?
----------------

* heutiges Thema ist IP-basiertes Routing
* Ziel: wie findet ein Paket den Weg vom Start zum Ziel
 * Zusatzbonus: wie findet das Antwort-Paket seinen Rückweg

---

Visualisierung des Alltäglichen
-------------------------------

lokale IP-Adressen:

    root@erker:~# ifconfig
    lo      Link encap:Local Loopback  
            inet addr:127.0.0.1 Mask:255.0.0.0
            inet6 addr: ::1/128 Scope:Host
            ...
	
    wlan0   Link encap:Ethernet HWaddr 00:1c:bf:af:05:da
            inet addr:172.16.19.202 Bcast:172.16.19.255 Mask:255.255.255.0
            inet6 addr: fe80::21c:bfff:feaf:5da/64 Scope:Link
            ...

Routing:

    root@erker:~# route -n
    Kernel IP routing table
    Destination Gateway     Genmask       Flags Metric Ref Use Iface
    0.0.0.0     172.16.19.1 0.0.0.0       UG    0      0   0   wlan0
    172.16.19.0 0.0.0.0     255.255.255.0 U     9      0   0   wlan0

---

Neue Werkzeuge: iproute2 (seit ca. 1996)
----------------------------------------

    root@erker:~# ip addr
    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
    3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:1c:bf:af:05:da brd ff:ff:ff:ff:ff:ff
        inet 172.16.19.202/24 brd 172.16.19.255 scope global wlan0
           valid_lft forever preferred_lft forever
        inet6 fe80::21c:bfff:feaf:5da/64 scope link 
           valid_lft forever preferred_lft forever

    root@erker:~# ip route
    default via 172.16.19.1 dev wlan0 proto static 
    172.16.19.0/24 dev wlan0 proto kernel scope link src 172.16.19.202 metric 9 

---

Ins Uhrwerk geschaut ...
------------------------

lokale Ziele:

    root@erker:~# ip route get 172.16.19.23
    172.16.19.23 dev wlan0 src 172.16.19.202 

entfernte Ziele:

    root@erker:~# ip route get 1.1.1.1
    1.1.1.1 via 172.16.19.1 dev wlan0 src 172.16.19.202 

---

Wegführung
----------

* traditionell: traceroute
* modern und schick: mtr

traceroute-Ausgabe:

    root@erker:~# traceroute -n 8.8.8.8
    traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
     1  172.16.19.1  1.085 ms  1.101 ms  1.316 ms
     2  172.16.23.9  2.083 ms  1.071 ms  1.124 ms
     3  10.1.0.1  9.267 ms  9.255 ms  11.647 ms
     4  139.30.241.4  14.816 ms  14.941 ms  24.938 ms
     5  139.30.0.17  20.589 ms  22.277 ms  24.662 ms
    ...
    13  64.233.174.53  70.621 ms 216.239.48.53  23.692 ms  21.371 ms
    14  * * *
    15  8.8.8.8  23.502 ms  23.508 ms  29.182 ms

Die Erkennung der Zwischen-Hops erfolgt anhand von Anfragen mit steigendem TTL-Wert.

---

Mehr Interna + Policy Routing
=============================

* komplexe Paket-Lenkung mit mehr Freiheitsgraden:
 * basierend auf der Ziel-Adresse (gab es schon immer)
 * basierend auf der Quell-Adresse (**neu**)
 * basierend auf Markierungen durch die Firewall (**neu**)

---

Policy: ohne Extras
-------------------

Grober Überblick:

    lars@datenschleuder:~$ ip rule
    0:      from all lookup local 
    32766:  from all lookup main 
    32767:  from all lookup default 

Details:

    lars@datenschleuder:~$ ip route show table main
    default via 172.16.42.1 dev eth0 
    172.16.42.0/24 dev eth0 proto kernel scope link src 172.16.42.3 

Fazit: dieselben Informationen, wie zuvor (via *route -n*)

---

Policy: lokale Adressen
-----------------------

lokale IP-Adressen werden in der *local* Tabelle als solche erkannt:

    root@erker:# ip route show table local
    local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
    local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
    broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
    broadcast 172.16.19.0 dev wlan0  proto kernel  scope link  src 172.16.19.202 
    local 172.16.19.202 dev wlan0  proto kernel  scope host  src 172.16.19.202 
    broadcast 172.16.19.255 dev wlan0  proto kernel  scope link  src 172.16.19.202 

---

Policy: nach Opennet-Geschmack
------------------------------

    root@AP-2-68:~# ip rule
    0:      from all lookup local 
    32766:  from 172.16.42.0/24 lookup main 
    32766:  from all iif lo lookup main 
    32767:  from all lookup default 
    32776:  from 172.16.42.0/24 lookup tun 
    32776:  from all iif lo lookup tun 
    65535:  from all lookup olsrd 
    65545:  from all lookup olsrd-default 
    65555:  from all lookup main 

---

Policy: mehrere Uplinks
-----------------------

    root@cerebrum:~# ip rule
    0:      from all lookup local 
    502:    from 92.198.62.56/29 lookup uplink_qsc 
    502:    from 80.153.252.42 lookup uplink_tkom 
    502:    from 83.169.20.153 lookup uplink_exo 
    502:    from 10.0.1.30 lookup uplink_tkom 
    32766:  from all lookup main 
    32767:  from all lookup default 

    root@cerebrum:~# ip route show table uplink_qsc
    default via 172.16.23.13 dev backbone 
    throw 10.0.0.0/8 
    throw 172.16.0.0/12 
    throw 192.168.0.0/16 

---

Routing + Firewall
==================

* wechselseitige Abarbeitung von Routing und Firewall-Regeln


---

Einfach
-------

![einfache Darstellung](http://www.sysresccd.org/images/dport-routing-02.png)

---

Ausführlich
-----------

![vollständige Darstellung](https://www.frozentux.net/iptables-tutorial/chunkyhtml/images/tables_traverse.jpg)

---

OLSR
====

* einfaches Routing-Protokoll
* Funktionen:
  * Wegfindung
  * sachgerechte Routen-Bewertung
  * Informationsverteilung (Routen announcieren, DNS-Informationen)

---

Qualitätsbewertung
------------------

* jeder Host empfängt von Nachbarn im 3-Sekunden-Takt ein Hello-Signal
* die Anzahl der empfangenen im Vergleich zu den erwarteten Paketen bestimmt die Link-Qualität (LQ)
* dasselbe vom Nachbarn aus betrachtet: Neighbour Link Quality (NLQ)

---

Rechnen, Rechnen
----------------

* Erwartungswert der zu sendenden Pakete (Estimated Transmission Count): ETX = 1 / (LQ * NLQ)
* *Kosten* eines Pfades: Summe der ETX-Werte
* Fazit: nicht für alle Situationen optimal
  * OLSR bietet alternative Bewertungsverfahren
  * es gibt viele weitere Routing-Protokolle

---

Verteilte Information
---------------------

* kein Knoten im Netz hat die vollständige Übersicht der Routen
* Nachbarn tauschen regelmäßig untereinander ihre Routen aus
* örtliche Ausfälle verbreiten sich langsam im Netz

---

Komplexe Systeme: das Internet
==============================

Überblick (fragmentarisch)
--------------------------

* Teilnehmer am Routing heißen Autonome System (AS)
* AS tauschen untereinander Routing-Tabellen aus
* System basiert auf Vertrauen

---

Testfeld
--------

* http://dn42.net/

