Appearance
Routing im LAN mit Ethernet
Ziel dieses Versuches ist es Ethernet Netzwerkinterfaces in einem LAN zu konfigurieren.
Setup
OS-Anpassungen
Raspberry Pi Imager wird nach Anpassungen des Betriebssystems fragen. Sie können an der Stelle bereits SSH aktivieren und einen username mit passwort definieren. Die folgenden Schritte mit userconfig.txt
und erstellen des ssh
files sind damit nicht mehr notwending.
Verbinden Sie sich ins Lokale WiFi mit wlan0. Achten Sie, dass Sie für wlan0
via dhcp eine IP Adresse beziehen. Dazu kann auch z.B. raspi-config
verwendet werden.
Stellen Sie sicher, dass Sie via USB UART und Putty mit dem Raspi Verbunden sind, da Sie die IP Adresse von eth0
jeweils ändern und deshalb nicht im gleichen Netz wie das Hostsystem sind.
arping
Installieren Sie das Paket arping
und tshark
mit dem command sudo apt install arping tshark
auf Ihrem Targetsystem. Falls nötig, verbinden Sie sich hierzu ins Internet via WLAN mit dem Accesspoint dnet
(falls nicht Verfügbar, verwenden Sie einen Hotspot).
Falls der networking
Service Problemen bereitet (check systemctl status networking
) können Sie den Inhalt im File /etc/network/interfaces
löschen und das Target neu starten. Verwenden Sie nach dem Reboot UART und sudo raspi-config
um sich mit dem dnet
Accesspoint (oder alternativ eigenem Hotspot) zu verbinden.
File backupen und leeren
Manchmal macht es Sinn ein File als Backup zu sichern, bevor man es editiert. In Linux können Sie das File im Terminal an einen anderen Ort kopieren (z.B. ins Homeverzeichnis)
bash
sudo cp /etc/network/interfaces ~/interfaces.bak
# verifizieren
cat ~/interfaces.bak
# file "leeren"
echo "" | sudo tee /etc/network/interfaces
Letzteren Command verwenden wir, mit sudo tee
um den Inhalt von der Pipe |
in das File /etc/network/interfaces
umzuleiten, ähnlich, wie wir das sonst mit >
machen.
Mit arping
können wir einen ARP
request vom Target her auslösen. Hiermit können wir feststellen, welche MAC Adresse einem Host zugeordnet ist. Auch lässt sich so feststellen, ob eine IP bereits vergeben ist.
ARP funktioniert auf Layer 2 (Ethernet in unserem Fall), kann also ohne IP Config verwendet werden.
ARP Traffic sniffen
Verwenden Sie tshark
um ARP Traffic auf dem Ethernetinterface Netzwerkweit zu sniffen. Schauen Sie sich die man Page von tshark
hierzu an und insbesondere die Optionen -i
und -Y
.
Was für Parameter verwenden Sie hier um nur ARP Traffic auf dem eth0
Interface anzuzeigen?
eth0
eth0
ist das Interface, welches wir für das LAN manuell konfigurieren. Löschen Sie jegliche Einträge in /etc/network/interfaces
hierzu. Verbinden Sie eth0
mit dem interface eines Switches im Unterricht.
Der ip
Command
Für diese Versuche verwenden wir den ip
Command, welcher detailliertere Konfigurationen als ifconfig
vornehmen kann. Zum Beispiel ist es mit ip
möglich, mehrere IP-Adressen pro Interface zuzuweisen.
Commands
Folgende Commands werden für die Szenarien gebraucht. Mit ip help <subcommand>
kann jeweils eine Hilfeseite zu dem ip untercommand aufgerufen werden.
command | |
---|---|
ip addr | IP Adresse aller interfaces auflisten |
ip link | Alle interfaces (L2) anzeigen |
ip link set up dev eth0 | eth0 einschalten |
ip link set down dev eth0 | eth0 ausschalten |
ip link set dev eth0 address AA:BB:CC:DD:EE:FF | MAC Adresse für interface setzen |
ip addr show dev eth0 | IP Adressen von eth0 auflisten |
ip addr add 192.168.51.1/24 dev eth0 | IP Adresse hinzufügen |
ip addr del 192.168.51.1/24 dev eth0 | IP Adresse löschen |
ip addr flush dev eth0 | Alle IP Adressen auf dem interface eth0 löschen |
ip route | Zeigt die Routing table an |
Vollständig vernetzes Ethernet
Für die folgenden Szenarien verwenden wir ein vollständig vernetzes LAN auf Layer 2. Alle Hosts sind also am gleichen, geswitchten Ethernet Netzwerk verbunden.
Die Subnetze werden wir auf Layer 3 anpassen.
Szenario 1 - Einfaches Netz ohne Routing
Stellen Sie sicher, dass Sie arping
installiert haben. Mit arping
kann festgestellt werden, ob eine Adresse bereits vergeben worden ist.
Netz
Wir verwenden das Netz 10.118.0.0/24
. Löschen Sie alle Adressen, welche Sie auf dem Interface eth0
konfiguriert haben (ggf. mit ip addr del
oder ip addr flush
entfernen).
Öffnen Sie die man
Page zu ip address
und suchen Sie den flush
Command. Wozu dient dieser?
Suchen Sie sich eine freie IP Adresse im Netz 10.118.0.0/24
. Konsultieren Sie die man
page von arping
um herauszufinden, welche Parameter notwendig sind um festzustellen, ob die gewünschte IP Adresse frei ist.
TIP
Welche Parameter sind notwendig um den ARP request zu versenden?
Verwenden Sie ip addr add
um die IP dem Interface hinzuzufügen. Verifizieren Sie mit ip addr show dev eth0
, dass die IP Adressen richtig konfiguriert worden sind. Falls die IP Adresse fehlt, schauen Sie mit ip link
, ob das Interface überhaupt eingeschaltet ist.
Pingen Sie Ihren Nachbarn um zu verifizieren, dass die Konfiguration geklappt hat.
Routing Table
Zeigen Sie die Routing Table an. Welche Einträge finden Sie in der Routing table? Nach welcher Regel sind die Einträge wohl erstellt worden?
Szenario 2 - Eigenes Subnetz mit Routing
In diesem Szenario arbeiten Sie in einer Zweiergruppe. Ziel ist es einen Router zu Konfigurieren, welcher Zugang zu einem Netz bereitstellt und Packets auf Layer 3 entsprechend forwarded.
Name | Aufgabe | IP Adressen |
---|---|---|
Host 1 | Router | 1x in Netz 10.118.0.0/24 , 1x in Netz 10.222.x.y/24 |
Host 2 | Host | 1x in Netz 10.222.x.y/24 |
Zweites Netz wählen
Wählen Sie ein /24
Subnetz aus 10.222.0.0/16
. Idealerweise stellen Sie sicher, dass niemand anderes das gleiche Netz verwendet. Markieren Sie das Netz rot, welches Sie verwenden möchten in folgendem Sheet: https://docs.google.com/spreadsheets/d/1eZQJvxVeE1FlwEh4iWNV5J66im47HU_URKnahP-nU1g/edit?usp=sharing
Host (Host 2)
Host 2 soll im gewählten Netz für eth0
genau eine IP beziehen. Entfernen Sie bei Host 2 alle IP Adressen auf dem eth0
Interface und wählen Sie eine IP Adresse in dem von Ihnen gewählte Subnetz.
Router (Host 1)
Lassen Sie die Konfiguration wie in Szenario 1 beschrieben stehen. Verifizieren Sie, dass Sie andere Hosts im Netz 10.118.0.0/24
pingen können.
Ziel ist es, dass Sie ihr eth0
Interface mit zwei IP Adressen konfigurieren und es Host 2
erlauben, ins 10.118.0.0/24
Netz zu kommunizieren, ohne, dass Host 2
im Netz 10.118.0.0/24
drin ist. Diesen Prozess nennt man genau "Routing" (das Verbinden von Netzen auf Layer 3).
Vergeben Sie eine weitere IP Adresse an Ihr eth0
Interface im Subnetz, welches Sie gewählt haben.
Pingen Sie sich nun Gegenseitig, klappt das? Wird bereits geroutet?
Versuchen Sie von Host 2 her die IP von Host 1 im Netz 10.118.0.0/24
zu pingen. Klappt das?
Routes einrichten
Als nächstes richtne wir auf beiden Hosts eine entsprechende Route ein, mit dem Ziel, dass Host 2 ins Netz 10.118.0.0/24
kommunizieren kann. Schauen Sie sich die Routing Table auf Host 1 an. Gibt es bereits eine Route ins Netz 10.118.0.0/24
? Gibt es eine Route in Ihr gewähltes Netz 10.222.x.y/24
?
Route auf Host 2
Schauen Sie sich die Routing Table auf Host 2 an. Finden Sie einen eintrag für das Zielnetz 10.118.0.0/24
?
Wie sollte eine Route aussehen für das Destinationsnetz?
Route | Parameter |
---|---|
Destinationsnetz mit Netmask | |
Netzwerkinterface | |
Gateway IP (via) |
Schauen Sie sich unter "Examples" bei man ip route
ein paar Beispiele an. Passt eines der Beispiele für unser Setup?
Fügen Sie die Route via ip route
dem Routing Table hinzu und verifizieren Sie.
Was passiert nun, wenn Sie versuchen einen Host im Netz 10.118.0.0/24
zu pingen? Hat sich etwas an der Fehlermeldung geändert?
IP Forwarding aktivieren
Host 1 (der Router) letet Packets aus Sicherheitsgründen noch nicht weiter. Im SysFS File /proc/sys/net/ipv4/ip_forward
ist konfiguriert, ob IPv4 Packets geforwarded werden. Der Wert sollte 1 sein. Schreiben Sie den Wert 1
ins File rein.
Als root user ein File schreiben
Versuchen Sie mit sudo echo
den Wert 1 ins File zu schreiben, erhalten Sie wahrscheinlich den Fehler bash: /proc/sys/net/ipv4/ip_forward: Permission denied
.
Das Problem ist, dass das echo
zwar mit Superuserrechten ausgeführt wird - das Schreiben ins File allerdings nicht. Es gibt zwei alternativen:
- mit
sudo su
auf eine Root Shell wechseln (Vorsicht geboten, hier können Sie ohne Errors und Warnings das System beschädigen) ... - ... eleganter: Den Command
tee
via Pipe mitsudo
verwenden um ins File zu schreiben (schauen Sie sich die Manpage zum Command anman tee
).
Nachdem Sie nun IP Forwarding aktiviert haben, versuchen Sie nochmals das äussere IP von Host 1 im Netz 10.118.0.0/24
zu pingen.
Szenario 3
Tragen Sie nun die IP des Routers im 10.118.0.0/24
Netz im Sheet https://docs.google.com/spreadsheets/d/1eZQJvxVeE1FlwEh4iWNV5J66im47HU_URKnahP-nU1g/edit?usp=sharing unter der Spalte via
ein. Ergänzen Sie auch die IP von Host 1
und Host 2
in Ihrem bezogenen Subnetz.
Fügen Sie bestehende via Einträge in den Routing Table des Routers ein. Versuchen Sie andere Hosts zu erreichen:
- vom Router her
- vom Host her
Kommt es zu Timeouts? Starten Sie tshark
(installieren, falls nicht vorhanden) um nachvollziehen zu können, ob IP Packets geroutet werden.