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 Netzwerkschnittstelleroute
- Die Weiterleitungstabelle anzeigen oder anpassenlink
- Aspekte der Sicherungsschicht ausgeben und verändernneighbour
- 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.
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!