Vorbereitung

ip

Ein zentrales Kommandozeilenwerkzeug um diverse Netzwerkeinstellungen vorzunehmen ist ip. Der generelle Aufbau eines Aufrufs von ip sieht wie folgt aus:

ip [ OPTIONS ] OBJECT { COMMAND | help }

ip kann auf verschiedene Objekte (OBJECT) angewandt werden. Ein Objekt ist dabei so etwas wie eine Kategorie oder ein Aspekt der Netzwerkkonfiguration, die angepasst oder ausgegeben werden soll. Die wohl wichtigsten Objekte sind:

  • address - Manipulation und Ausgabe von IP-Adressen einer Netzwerkschnittstelle
  • route - Die Weiterleitungstabelle anzeigen oder anpassen
  • link - Aspekte der Sicherungsschicht ausgeben und verändern
  • neighbour - Den ARP-Cache verwalten

Es gibt wesentlich mehr Objekte, aber in diesem Praktikum werden wir hauptsächtlich mit den ersten beiden arbeiten. Die anderen beiden werden wir noch in einem späteren Praktikum verwenden. Objekte kann man auch abkürzen. Das Objekt, das in lexikographischer Ordnung als erstes auf die Abkuerzung passt wird dann gewählt. Hier ein einfaches Beispiel dazu. Um sich die IP-Adressen aller Netzwerkschnittstellen anzeigen zu lassen, kann man folgendes ip-Kommando nutzen:

ip address

oder abgekürzt ginge auch einfach:

ip a

Die Ausgabe koennte wie folgt aussehen:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:a2:01:04:3e brd ff:ff:ff:ff:ff:ff
    inet 1.2.3.4/24 brd 1.2.3.255 scope global dynamic ens3
       valid_lft 43939sec preferred_lft 43939sec
    inet6 2a01:1111:2222:3333::2/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::453:11:fe01:12/64 scope link 
       valid_lft forever preferred_lft forever

Vieles davon kennen wir aus der Vorlesung. Hier abgebildet sind zwei Netzwerkschnittstellen. Die erste ist das nur lokal verfügbare Loopback-Interface (lo). Die Adressen die hier vergeben sind, sind Teil der speziellen Adressen, die wir schon kennegelernt haben. Die “echte” Netzwerkschnittstelle hier hat den Namen ens3 und eine IPv4 Adresse ist konfiguriert, sowie wie zwei IPv6 Adressen.

In diesem Kommando war keine Option gesetzt. Diese werden dem Objekt vorangestellt. So kann man z.B. eine farbiges Highlighting via Optionen mit -c einstellen, oder man kann sich Statistiken anzeigen lassen mit -s. Das vorherige Kommando dazu sähe dann so aus:

ip -c -s a

Probieren Sie es mal aus. Der Zustand der Schnittstellen sollte nun farbig hervorgehoben sein, sowie die IP-Adressen. Ausserdem sollten Statistiken angezeigt werden (z.B. Anzahl der gesendeten und empfangenen Bytes/Pakete). Es gibt weiter Optionen, wovon wir aber nur wenige einsetzen werden. Mit man ip können alle verfügbaren Optionen eingesehen werden. Schauen Sie mal nach, was es sonst noch so gibt.

Schauen wir uns nochmal den generellen Aufbau eines Aufrufs von ip an:

ip [ OPTIONS ] OBJECT { COMMAND | help }

OPTIONS und OBJECT haben wir nun grob besprochen. Was noch fehlt ist entweder der COMMAND-Teil bzw. help. Das, was im Kommando folgen kann ist abhängig vom Objekt, d.h. jedes Objekt hat seinen eigenen Satz an Kommandos. Diese kann man sich z.B. mit help anzeigen lassen. Nehmen wir das address-Objekt nochmal als Beispiel:

ip a help
Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]
                                                      [ CONFFLAG-LIST ]
       ip address del IFADDR dev IFNAME [mngtmpaddr]
       ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]
                            [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]
       ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]
                         [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]
                         [ label LABEL ] [up] [ vrf NAME ] ]
       ip address {showdump|restore}
IFADDR := PREFIX | ADDR peer PREFIX
          [ broadcast ADDR ] [ anycast ADDR ]
          [ label IFNAME ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG  := [ permanent | dynamic | secondary | primary |
           [-]tentative | [-]deprecated | [-]dadfailed | temporary |
           CONFFLAG-LIST ]
CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG
CONFFLAG  := [ home | nodad | mngtmpaddr | noprefixroute | autojoin ]
LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]
LFT := forever | SECONDS
TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |
          bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |
          gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |
          nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |
          hsr | macsec

Wem das zu kryptisch ist, der kann auch für die man pages für die einzelnen Objekte anschauen. Dabei verbindet man ip durch einen Bindestrich mit dem jeweiligen Objekt und erhält so den Namen der man page (die Abkürzungen funktionieren hier natürlich nicht):

man ip-address

Da es heute um die Weiterleitung geht, brauchen wir aber das route-Objekt. Das zu route gehörige Kommando kann sehr komplex sein, denn Linux is diesbezüglich sehr mächtig. Wie brauchen heute aber nur die Funktionen, um selbst Einträge in die Weiterleitungstabelle einzutragen oder zu löschen, wenn mal Fehler gemacht wurden. Auch das Anzeigen der Tabelle wird benötigt, aber die “Power-Feature”, die Linux uns bereitstellt, werden wir nicht benötigen.

Der grundsätzliche Aufbau zur Manipulation der Weiterluntungstabelle sieht so aus:

ip route { add | del | change | append | replace } ROUTE

Von den hier abgebildeten Kommandos brauchen wir primär add, um einen Eintrag hinzuzufügen, und wenn etwas schief geht noch del um einen Eintrag wieder zu löschen. Was sich hier so harmlos als ROUTE anschliesst, kann ebenfalls sehr komplex werden. Aber auch hier brauchen wir nur ganz einfache Varianten.

Beispielnetzwerk
Beispielnetzwerk

Nehmen wir an, dass wir das oben abgebildete Netzwerk vorliegen haben. Wir sind auf Router R1 eingeloggt und wollen einen Eintrag in seiner Weiterleitungstabelle vornehmen, so dass Pakete für das Subnetz 192.0.2.0/24 vermittelt werden können. Man sieht in der Abbildung den Router, der das Paket als nächstes bekommen soll, dann den Rest des Netzes als Wolke dargestellt und dann am Ende das Zielsubnetz. Auf Router R1 müsste dieser Eintrag wie folgt angelegt werden:

ip route add 192.0.2.0/24 via 10.0.0.1
  • 192.0.2.0/24 ist der Zielpräfix
  • 10.0.0.1 ist der next hop

Optional kann auch noch die Netzwerkschnittstelle angegeben werden. Dazu wird einfach dev ifname anghängt, wobei ifname durch den Namen der Netzwerkschnittstelle ersetzt wird. Die Namen der Schnittstellen können z.B. durch ip a ermittelt werden, wie wir vorhin gesehen haben.

In der Vorlesung hatten wir noch einen speziellen Eintrag in der Weiterleitungstabelle kennengelernt, die Default Route. Diese ist 0.0.0.0/0, und wird z.B. von Endsystemen genutzt.

Löschen kann man ebenfalls einen Eintrag. Dazu muss nur der zu löschende IP-Präfix angegeben werden:

ip route del 192.0.2.0/24

Man kann auch herausfinden wohin ein Paket mit einer Zieladresse weitergeleitet werden würde:

ip route get 192.0.2.12

Hier wird der Eintrag ausgegeben, der genutzt wird, um ein Paket mit der Ziel-IP-Adresse 192.0.2.12 weiterzuleiten.

Die Weiterleitungstabelle kann man natürlich auch im Ganzen anzeigen lassen mit:

ip route

Damit ist alles, was von ip für das Praktikum benötigt wird erläutert. Es kann also losgehen.

Viel Erfolg!


Zurück
Übersicht
Weiter