Linux Netzwerkkonfiguration - Workshop Dezember 2024

1 Agenda

  • Netzwerkkonfiguration
  • Linux Befehle zur Netzwerkkonfiguration
  • RedHat und NetworkManager
  • SUSE und Wicked
  • Ubuntu und Netplan
  • Systemd-Networkd

2 Lab-Umgebung Internet

  • Benutzername: user
  • Passwort: network
  • Die virtuellen Maschinen im Internet haben je zwei Netzwerkschnittstellen
    • eth0 : Verbindung mit dem Internet
    • eth1 : Privates Netzwerk
  • Maschinen im Internet
Nummer Name IP-Adresse eth0 URL
1 Carsten 159.223.23.148 https://networkk01.dane.onl
2 Bernhard 164.92.180.181 https://networkk02.dane.onl
3 Alexander 159.89.100.218 https://networkk03.dane.onl
4 Maikl 164.92.138.252 https://networkk04.dane.onl
5 Helmut 159.89.110.163 https://networkk05.dane.onl
6 Stefan 159.65.124.180 https://networkk06.dane.onl
7 Jürgen 159.65.122.143 https://networkk07.dane.onl
8 Leon 139.59.141.178 https://networkk08.dane.onl
9 Michael 139.59.154.247 https://networkk09.dane.onl
10 Christine 139.59.153.66 https://networkk10.dane.onl
11 Johannes 159.65.114.208 https://networkk11.dane.onl
12 Georg 139.59.139.191 https://networkk12.dane.onl
13 Thomas 139.59.153.139 https://networkk13.dane.onl
14 Andreas 139.59.157.18 https://networkk14.dane.onl
15 Christian 139.59.149.33 https://networkk15.dane.onl

3 Lab-Umgebung Lokal

  • Virtuelle Maschinen im WLAN linuxlab
  • Benutzername: user
  • Passwort: network
  • Die (lokalen) virtuellen Maschinen haben je zwei Netzwerkschnittstellen
    • eth0 : Verbindung in das Lab-Netzwerk
    • eth1 : Verbindung der VMs untereinander

4 Netzwerkkonfiguration

4.1 IP-Adressen

  • IPv4 Adressen sind intern eine 32bit Zahl. Diese Zahl wird als 4 Gruppen zu je einem Byte (Octet) geschrieben
    • Beispiel: 192.0.2.10
  • Wird eine IPv4 Adresse mit weniger Bytes/Octets geschrieben, so ist dies kein Fehler sondern die fehlenden Bytes werden mit Nullen "0" aufgefüllt
    # ping 1.1
    PING 1.1 (1.0.0.1) 56(84) bytes of data.
    
  • Octets/Bytes in IPv4 Adresse mit führenden "0" werden oktal (Basis 8) interpretiert:
    # ping 0100.0200.010.001
    PING 0100.0200.010.001 (64.128.8.1) 56(84) bytes of data.
    
  • ACHTUNG: Diese Schreibweisen können auch gemischt werden und werden von Angreifern benutzt um bösartige Konfigurationen zu verschleiern

4.2 Aufbau von IPv4 Adressen

  • Classless vs. Class-based IPv4 Adressen
    • In den Anfangstagen von IPv4 waren IPv4 Adressen in Klassen (Classes) eingeteilt.
      • Class A: 10.0.0.0/8
      • Class B: 172.16.0.0/16
      • Class C: 192.168.1.0/24
      • Class D: 224.0.0.0 (Multicast)
      • Class E: 240.0.0.0 (Reserviert)
    • Der Anteil des Netzbereiches der IPv4 Adresse war allein durch die ersten Bits der Adresse vorbelegt, es gab keine Subnetzmasken und keine Prefix-Längen-Angaben
    • Diese Klassenunterteilung gibt es seit Anfang der 1990er Jahre nicht mehr. Seitdem werden classless Adressen benutzt, welche eine variable Prefix-Länge besitzen
  • IPv4 Adressen setzen sich aus dem Netzwerk-Teil (Bits der Adresse von der linken Seite gezählt) und dem Host-Teil (Bits der Adresse von der rechten Seite gezählt) zusammen
  • In den ersten 20 Jahren (ca. 199x-200x) der IPv4 Classless-Adressen wurden diese häufig zusammen mit einer Subnetzmaske spezifiziert: 192.168.1.10 Maske: 255.255.255.0
    • Seit dem Jahrtausendwechsel (und der Verbreitung vom IPv6) werden IPv4 Adressen (wie IPv6 Adressen) in der Regel als Kombination aus IP-Adresse und Prefix-Länge geschrieben: 192.168.1.10/24
    • Die Prefix-Länge beschreibt, welche Bits der Adresse von links aus gezählt vom Netzwerkteil der Adresse gehören. Die restlichen Bits machen daher die Host-Adresse der IP-Adresse aus
      Prefixnotation Subnetzmaske
      /32 255.255.255.255
      /30 255.255.255.252
      /28 255.255.255.240
      /24 255.255.255.0
      /16 255.255.0.0
      /8 255.0.0.0

5 Linux-Befehle zur IP-Konfiguration

  • Die Befehle zur Netzwerkkonfiguration wurden in Linux ursprünglich von den BSD-Unix-Systemen übernommen: ifconfig, arp, route, netstat
  • Diese Befehle sind aber (unter Linux) veraltet und werden nicht mehr weiter entwickelt
    • Diese Befehle sollten unter Linux nicht mehr verwendet werden, obwohl diese noch aus dem Paketen installierbar sind und häufig auch vorinstalliert wurden. Diese Befehle wurde nicht auf einige neue Netzwerktechnologien angepasst und können die Netzwerkkonfiguration negativ beeinflussen. Auch zeigen diese Befehle die Netzwerkkonfiguration in modernen Linux-Systemen nicht immer akkurat an (ifconfig zeigt z.B. nur eine IPv4 Adresse pro Netzwerkschnittstelle, auch wenn mehrere Adressen auf einer Schnittstelle konfiguriert sind).
    • Unter anderen Unix-Systemen (FreeBSD, NetBSD, OpenBSD, Solaris …) werden diese Befehle weiterentwickelt, hier entfernen sich Linux und die anderen Unix-Systeme voneinander und sind nicht mehr kompatibel
      Funktion Alter Befehl Neuer Befehl
      Netzwerk Hardware konfigurieren ethtool ip link
      ARP Protokoll arp ip neigh
      IP Adressen konfigurieren ifconfig ip address
      Routen konfigurieren route ip route
      Netzwerkinformationen abrufen netstat ss (Socket Status)
      DNS Namensauflösung nslookup dig

5.1 IP-Befehl

  • Der IP-Befehl fasst die Funktionen der alten Befehle ethtool, arp, ifconfig und route zusammen. Zusätzlich bietet ip Funktionen zur Konfiguration von ipsec, /segment-routing, Netzwerk-/Namespaces, Eternet-over-TCP-Tunnel (ltp), Multicast, VRF, Tunnel (z.B. GRE)
  • Der ip Befehl nimmt Parameter auf der Kommandozeile entgegen. Befehlsparameter werden mit Leerzeichen getrennt angegeben und beziehen sich auf die Funktion des ip Befehls. Konfigurationsparameter verändern die Ausführung des ip Befehls und beginnen mit einem - und einem Buchstaben oder einem oder mehreren Worten verbunden mit Bindestrichen (ASCII-Minus). Die kurzen Parameter können beim ip Befehl nicht kombiniert werden!
    • Beispiel kurzer Parameter: ip -4 route
    • Beispiel langer Parameter: ip -timestamp address show
  • Wichtige globale Parameter des ip Befehls
    • -4 nur auf IPv4 arbeiten
    • -6 nur auf IPv6 arbeiten
    • -s Statistiken ausgeben
    • -d mehr Details
    • -r IP-Adressen in Hostnamen auflösen
    • -n <nsname> Befehl in Netzwerk-Namespace ausführen
    • -h Daten in für Menschen besser lesbare Einheiten ausgeben
    • -j Daten im JSON Format ausgeben (gut für Scripting)
    • -p JSON-Daten aufbereiten
  • Sub-Befehle des ip Befehl können beliebig verkürzt werden, solange der Befehl eindeutig ist
# Voller Befehl
ip address show
# Abkürzung benutzt
ip addr sh
# Extreme Abkürzung
ip a s
# "show" ist der Default fÜr 'ip address' und kann daher
# weggelassen werden
ip a

5.2 Netzwerk-Schnittstellen

5.2.1 Schnittstellen Informationen abfragen

ip link show

5.2.2 Schnisttellen ändern

ip link set dev eth1 up
ip link set dev eth1 name dmz
ip link set dev dmz mtu 9000

5.2.3 Schnittstellen anlegen

ip link add eth10 type dummy

5.2.4 Schnittstelle entfernen

  • Nicht-physische Netzwerkschnittstellen können mit dem IP-Befehl entfernt werden
ip link del dmz

5.2.5 Bridge anlegen

ip link add bridge0 type bridge

5.2.6 Schnittstellen einer Bridge zuweisen

ip link set dev eth1 master bridge0
ip link set dev eth2 master bridge0

5.3 IP-Adressen Konfiguration

5.3.1 Informationen über IPv4-Adressen abfragen

ip address show
ip -s -h address show
ip address show up
ip address show dev eth0

5.3.2 IPv4 Adresse zuweisen

ip addr add 192.0.2.10/24 dev eth0

5.3.3 IPv4 Adresse entfernen

ip addr del 192.0.2.10/24 dev eth0

5.4 ARP

  • In IPv4 Systemen verbindet das ARP-Protokoll (Address-Resolution-Protocol) die IPv4-Adressen mit den Hardware-Adressen der Netzwerkschnittstellen.
  • Um einen anderen Rechner im gleichen Subnetz zu erreichen muss der TCP/IP-Stack die Ziel-IP-Adresse in die Hardware-Adresse auflösen
    • Der Sender schickt ein ARP-Broadcast mit der Ziel-IP-Adresse in das Netzsegment
    • Der Besitzer der IPv4-Adresse (und Empfänger) sendet die eigene Hardware-Adresse (MAC-Adresse) zurück
    • Der Sender speichert diese Adresse für eine gewisse Zeit im ARP-Cache des TCP/IP-Stack
    • Ist eine Gegenstelle nicht mehr erreichbar (Timeout), so wird der ARP-Eintrag aus dem Cache vorzeitig entfernt (NUD - Neighbourhood Unreachability Detection)

5.4.1 ARP-Tabelle abfragen

ip -4 -s neigh show

5.4.2 ARP-Eintrag setzen

ip neigh add 192.0.2.10 lladdr 01:02:03:04:05:06 dev eth0

5.4.3 ARP-Eintrag löschen

ip neigh del 192.0.2.10 dev eth0

5.4.4 Permanenter Eintrag im ARP-Cache

ip neigh add 192.0.2.10 lladdr 01:02:03:04:05:06 nud permanent dev eth0

5.5 Aufgabe 1:

  • Auf der VM
    • Erstelle eine Schnittstelle von Typ dummy
    • Weise die IPv4 Adresse 192.0.2.10/27 dieser Schnittstelle zu
    • Aktiviere die Schnittstelle
    • Prüfe das die Schnittstelle per ping erreichbar ist
    • Schaue dir die ARP Tabelle an. Ist die neue IP-Adresse dort sichtbar?

5.6 Lösung Aufgabe 1:

ip link add dummy0 type dummy
ip address add 192.0.2.10/27 dev dummy0
ip link set dev dummy0 up
ip -4 neigh show
  • Die IP-Adresse für lokale Schnittstelle wird nicht in der ARP-Tabelle gespeichert (nur externe Systeme werden in der ARP-Tabelle vermerkt)

5.7 IP Monitoring

  • Der Befehl ip monitor zeigt die Änderungen an der Netzwerkkonfiguration an. Dieser Befehl kann zur Fehlersuche verwendet werden, speziell bei Netzwerk-Konfigurations-Diensten wie NetworkManager (RedHat) oder Wicked (SUSE)
    • Der Parameter -t gibt einen Zeitstempel vor jeder Ausgabezeile aus

5.8 Aufgabe 2:

  • Starte tmux
  • Starte ip monitor
  • Öffne eine weitere Shell im tmux mit der Tastenkombination CTRL-b+" (CTRL/STRG halten und zusammen mit Taste 'b' betätigen, dann beide Tasten loslassen und die Taste '"' betätigen). Es sollte ein neues Shell Fenster unten erscheinen.
  • Ändere in der zweiten Shell die IP-Adresse der dummy Schnittstelle auf eine neue IP-Adresse (bestehende IP-Adresse soll gelöscht werden). Verfolge die Meldungen vom ip monitor im oberen Fenster.

5.9 Routing

5.9.1 Routing Tabelle anzeigen

ip -4 route show

5.9.2 Route hinzufügen

# Default-Route setzen
route add default via 10.0.10.1 dev eth0
# Host-Route
route add 192.0.2.0/32 via 10.0.10.1 dev eth0
# Netzwerk-Route auf Netzwerkschnittstelle
route add -net 192.1.2.0/24 dev wg0
# Netzwerk-Route auf Router-IP-Adresse
route add -net 192.1.2.0/24 via 10.0.0.1 dev wg0

5.9.3 Route löschen

route del 192.0.2.10/24

5.10 Netzwerk Informationen abfragen

  • ss (Socket stat) zeigt die aktiven TCP/IP und Unix-Sockets an
  • Wichtige Parameter:
    • -t TCP Sockets anzeigen
    • -u UDP Sockets anzeigen
    • -l Auf Anfragen wartende Sockets (Listen)
    • -p Prozesse zu den Sockets anzeigen
    • -e Erweiterte Informationen anzeigen
    • -n keine Namensauflösung für IP-Adressen
    • -i Interne TCP-Informationen anzeigen
    • -Z SELinux Context anzeigen
    • -s Globale Statistiken anzeigen
ss -s
ss -tulpen
ss -tulip
ss -tulipe4

5.11 Namensauflösung

5.11.1 IPv4 Adresse über den konfigurierten Resolver abfragen

# IPv4 Adresse von 'example.com' abfragen
dig example.com
# Nur die Antwort anzeigen
dig example.com +short
# Nur die Antwort-Sektion anzeigen
dig example.com +noall +answer

5.11.2 DNS-Anfrage an speziellen DNS-Server senden

dig @dns1.example.com example.com

dig @1.1.1.1 example.com

5.11.3 DNS-Anfrage für andere DNS-Record-Typen

# TXT-Records
dig txt example.com
# MX-Record
dig mx exmaple.com
# IPv6-Adresse
dig aaaa example.com
# Name-Server für Domain
dig ns example.com
# SOA-Record
dig soa example.com

5.11.4 Status/Verbindung zu allen DNS-Servern einer Domain prüfen

  • Der Parameter +nssearch sendet eine Anfrage nach dem SOA-Record an alle DNS-Server, welche für die Domain als NS-Records gelistet sind. Hierzu muss der Rechner direkte DNS-Verbindung zu diesen DNS-Server haben
dig example.com +nssearch

5.11.5 DNSSEC Status prüfen

  • Den DNSSEC-Status, inkl. der DNSSEC-Signatur-Records abfragen. Bei erfolgreicher DNSSEC Prüfung muss das AD-Flag im Header der DNS-Antwort angezeigt werden
dig example.com +dnssec +multi

5.12 TCP/IP Fehlersuche

5.12.1 ICMP Echo Request (ping)

  • Mit dem ping Befehl kann die IP-Verbindung zu einem Host im Netzwerk geprüft werden
    • ping benutzt das ICMP-Protokoll, das ICMP-Protokoll kann prüfen ob die IP-Verbindung (ARP, Routing) funktioniert. Mittels ping kann keine verlässliche Aussage über TCP oder UDP gemacht werden!
    • Firewall-Systeme können ICMP blockieren und TCP oder UDP erlauben, oder andersherum
    • In Internet-Backbone-Systemen hat ICMP-echo-request (PING) oft eine niedrige Priorität. Eine schlechte PING-Verbindung kann nicht in jedem Fall auf die Qualität der TCP oder UDP Verbindung schliessen lassen.

5.12.2 traceroute, tracepath, mtr

  • Der Befehl traceroute zeigt den Weg eines Pakets durch eine Netzwerkverbindung an. Der Befehl sendet Pakete mit geringer TTL (Hop-Count), und wartet auf die ICMP-Fehler-Rückmeldungen der Systeme auf dem Weg, welche das Paket verwerden
    • Nicht alle Systeme senden ICMP-Fehlermeldungen
    • ICMP-Pakete können auf dem Rückweg durch Firewall-Systeme blockiert werden
  • Linux traceroute benutzt UDP und kann mittels Parameter auf TCP oder ICMP umgestellt werden
  • Der Befehl tracepath arbeitet ähnlich wie traceroute, gibt zusätzlich Informationen über die MTU (Maximum Transfer Unit = maximale IP Paketgrösse) für jedes Netzwerksegment auf dem Weg aus
  • Der Befehl mtr (oft nicht vorinstalliert) gibt kontinuierlich die Trace-Informationen auf dem Terminal aus.

6 RedHat kompatible Linux-Distributionen

  • Die folgenden Informationen sind für RedHat kompatible Linux-Distributionen (Fedora / Rocky Linux / Alma Linux / Oracle Linux / CentOS)
  • Die derzeitige Netzwerk-Verwaltungs-Software heisst NetworkManager
  • NetworkManager kann über eine GUI-Anwendung, die Konsolen-Anwendung nmtui oder über das Kommandozeilen-Programm nmcli konfiguriert werden. Es ist auch möglich die NetworkManager Konfigurationsdateien unterhalb von /etc/NetworkManager/system-connections zu ändern.

6.1 Generelle Informationen

  • Konfigurationsdateien in /etc/NetworkManager
    • Schnittstellenkonfiguration in /etc/NetworkManager/system-connections
    • Nach manueller änderungen in den Konfigurationsdateien:
# systemctl reload NetworkManager
# nmcli connection reload
  • NetworkManager CLI
# nmcli networking
# nmcli general

# nmcli net off
# nmcli net on

# nmcli device status
# nmcli connection

6.2 Ethernet Netzwerk

ip link add eth1 type dummy

nmcli con add con-name my-eth1 ifname eth1 type ethernet ip4 192.168.100.100/24 \
      gw4 192.168.100.1
nmcli -p con show my-eth1
nmcli con mod my-eth1 ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con mod my-eth1 ipv4.ignore-auto-dns yes
nmcli device up eth1
nmcli con up my-eth1
nmcli con down my-eth1
nmcli con mod my-eth1 connection.zone work
nmcli -p connection show my-eth1
nmcli con mod my-eth1 connection.id eth-ens14
nmcli con del "Wired connection 1"
nmcli con edit eth-ens14
nmcli> describe ipv4
nmcli> describe ethernet
nmcli> set ipv4.routes 192.168.122.0/24 10.10.10.1
nmcli>
nmcli> save persistent
Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection.
Do you still want to save? [yes] yes
nmcli> quit

6.3 Beispiel Konfigurationsdatei

[connection]
id=eth0
uuid=7f616ba0-9552-3ca3-afff-c07201d0794c
type=ethernet
autoconnect-priority=-999
interface-name=eth0
timestamp=1732647665

[ethernet]

[ipv4]
method=auto

[ipv6]
addr-gen-mode=eui64
method=auto

[proxy]

6.4 NetworkManager Konfiguration anschalten

  • Eine Verbindung aktivieren
nmcli con up <connection-name>
  • Ein Verbindungsprofil soll automatisch beim Systemstart aktiv werden
nmcli con modify <connection-name> connection.autoconnect yes

6.5 Bridge

  • Eine Bridge Konfiguration erstellen
nmcli connection add type bridge ifname bridge0
  • Eine Netzwerkschnittstelle der Bridge hinzufügen
nmcli connection add type bridge-slave ifname eth0 master bridge0
  • Bridge Konfiguration anzeigen
nmcli connection show bridge-bridge0
  • Bridge aktivieren
nmcli connection up bridge-bridge0

6.6 Routing

  • Default-Route (Gateway) setzen
nmcli con modify my-eth0 ipv4.gateway 172.16.1.1
  • Route hinzufügen (Syntax: netzwerk/prefix nexthop metric, [...] )
nmcli con modify my-eth0 ipv4.routes "192.0.2.0/24 10.0.0.1 4, 100.64.1.0/28 5, 1.0.0.0/8 192.0.2.100"

6.7 DNS Resolver

  • DNS Resolver IP-Adressen der Konfiguration my-eth0 setzen
nmcli con modify my-eth0 ipv4.dns "1.1.1.1,9.9.9.9"
  • DNS Resolver IP-Adresse der Konfiguration my-eth0 hinzufügen
nmcli con modify my-eth0 +ipv4.dns 8.8.8.8

7 SUSE Linux

  • Die derzeitige Netzwerkkonfigurationslösung für SUSE Systeme heisst Wicked
  • XML-Konfigurationsdateien in /etc/wicked/*.xml
    • /etc/wicked/common.xml
    • /etc/wicked/server.xml
    • /etc/wicked/client.xml
    • /etc/wicked/nanny.xml
  • Dokumentation: man wicked-config / man wicked
  • Liest alternativ alte RedHat-Style und SUSE-Style Netwerkkonfigurationen aus /etc/sysconfig/network/ifcfg-*
  • Werden die ifcfg Dateien verwendet, so kann ein SUSE-Linux-System von Wicked zu NetworkManager umgeschaltet werden

7.1 Status des Wicked-Dienstes abfragen

systemctl status wicked
wicked show all

7.2 Konfiguration einer Netzwerkschnittstelle mit statischer IP-Adresse

  • Dokumentation: man 5 ifcfg
  • Datei /etc/sysconfig/network/ifcfg-eth0 (für die Netzwerkschnittstelle eth0)
BOOTPROTO='static'
STARTMODE='auto'
WICKED='yes'
IPADDR=172.16.1.1/24
GATEWAY=172.16.1.254
  • Konfiguration aktivieren (Achtung bei Administration via ssh, dieser Befehl kann die aktive Verbindung beenden!)
sudo systemctl restart network

7.3 Bridge Konfiguration unter SUSE Linux mit Wicked

  • Dokumentation: man ifcfg-bridge
  • Eine ifcfg-Konfigurationsdatei unter /etc/sysconfig/network/ mit dem Namen ifcfg-br0 erstellen
STARTMODE='auto'
BOOTPROTO='static'
WICKED='yes'
IPADDR=172.16.1.155/24
BRIDGE='yes'
BRIDGE_STP='off'
BRIDGE_FORWARDDELAY='0'
BRIDGE_PORTS='veth0 eth1'
  • Neue Konfiguration aktivieren
systemctl restart network

7.4 Aufgabe 1

  • Konfiguriere die Netzwerkschnittelle eth1 mit der statischen IP-Adresse 172.16.1.x
  • Teste das die Gegenstelle 172.16.1.200 erreichbar ist

7.5 Aufgabe 2

  • Erstelle eine Konfiguration für Wicked um die statische IP-Adresse aus Aufgabe 1 auf die Schnittstelle eth1 zu setzen
  • Teste die Konfiguration mittels eines Netstart des Systems

7.6 Aufgabe 3

  • Erstelle eine Konfiguration für eine Bridge
  • Füge die Netzwerkschnittstelle eth1 dieser Bridge hinzu
  • Starte einen Systemd-nspawn Container mit privatem Netzwerk und VETH-Netzwerkschnittstellen systemd-nspawn -b -D /srv/container/suse15 --private-network --network-veth
  • Konfigure the VETH-Network inside the container with the IP-Address 172.16.1.10x
  • Füge die VETH-Schnittstelle auf dem Host der Bridge hinzu
  • Teste die Verbindung vom Container zu der IP-Adresse 172.16.1.200

8 Ubuntu

  • Netplan: https://netplan.readthedocs.io/en/stable/
  • Konfigurationsdateien
    • /lib/netplan/*.yaml - vom OS gelieferte Konfigurationen
    • /etc/netplan/*.yaml - lokale Konfigurationen
    • /run/netplan/*.yaml - temporäre Konfigurationen
  • Netplan ist kein eigener Netzwerk-Konfigurations-Dienst, sondern erstellt (rendert) aus den Netplan-Konfigurationsdateien Konfiguration für z.B. systemd-networkd oder NetworkManager
    • Ubuntu 24.04 LTS wird mit NetworkManager ausgeliefert
# cat /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

8.1 Generelle Informationen

# chmod 600 /etc/netplan/01-network-manager-all.yaml 
# netplan status --all
# netplan get

8.2 Ethernet Konfiguration

# ip link add eth2 type dummy 
  • Netplan Konfiguration prüfen
# netplan try
  • Netplan Konfiguration aktivieren
# netplan apply

8.3 Konfiguration statische IPv4 Adresse

  • Datei /etc/netplan/50-eth2-static-ipv4.yaml
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    eth2:
      addresses:
        - 192.0.2.10/24
      nameservers:
        search:
          - "example.com"
        addresses:
          - 9.9.9.9
          - 8.8.8.8
  • Berechtigungen anpassen
# chmod 600 /etc/netplan/50-eth1-static-ipv4.yaml
  • Netplan Konfiguration aktivieren
# netplan apply
  • Generierte NetworkManager Konfiguration
# cat /run/NetworkManager/system-connections/netplan-eth2.nmconnection 
[connection]
id=netplan-eth2
type=dummy
interface-name=eth2

[ethernet]
wake-on-lan=0

[ipv4]
method=manual
address1=192.0.2.10/24
dns=9.9.9.9;8.8.8.8;
dns-search=example.com;

[ipv6]
method=ignore

8.4 Bridge Konfiguration:

  • Netplan Konfigurationsdatei in /etc/netplan/10-bridge.yaml
network:
 version: 2
 ethernets:
   eth0:
     dhcp4: no
   eth1:
     dhcp4: no
 bridges:
   br0:
     interfaces: [veth0, eth1]
     addresses:
       - 192.0.2.250/24
  • Berechtigungen anpassen
# chmod 600 /etc/netplan/10-bridge.yaml
  • Netplan Konfiguration aktivieren
# netplan apply

8.5 Aufgabe 1

  • Konfiguriere die Netzwerkschnittelle eth1 mit der statischen IP-Adresse 172.16.1.x
  • Teste das die Gegenstelle 172.16.1.200 erreichbar ist

8.6 Aufgabe 2

  • Erstelle eine Konfiguration für Netplan um die statische IP-Adresse aus Aufgabe 1 auf die Schnittstelle eth1 zu setzen
  • Teste die Konfiguration mittels eines Netstart des Systems

8.7 Aufgabe 3

  • Erstelle eine Konfiguration für eine Bridge
  • Füge die Netzwerkschnittstelle eth1 dieser Bridge hinzu
  • Starte einen Systemd-nspawn Container mit privatem Netzwerk und VETH-Netzwerkschnittstellen systemd-nspawn -b -D /srv/container/ubuntu24 --private-network --network-veth
  • Konfigure the VETH-Network inside the container with the IP-Address 172.16.1.10x
  • Füge die VETH-Schnittstelle auf dem Host der Bridge hinzu
  • Teste die Verbindung vom Container zu der IP-Adresse 172.16.1.200

9 Systemd-networkd

  • systemd-networkd ist der Netzwerk-Konfigurationsdienst des SystemD-Projektes.
    • Es wird erwartet das die populären Linux-Distributionen in den kommenden Jahren von eigenen Netzwerkkonfigurations-Lösungen auf systemd-networkd umstellen
    • Systemd-networkd sucht Konfigurationsdateien in den folgenden Verzeichnissen (Lade-Reihenfolge, später geladene Dateien haben Priorität über früher geladene Dateien):
      • /usr/lib/systemd/network
      • /usr/local/lib/systemd/network
      • /run/systemd/network
      • /etc/systemd/network

9.1 Link-Dateien

  • Dateien mit der Endung .link Beschreiben die Konfiguration der Hardware-Schnittstellen (z.B. Ethernet)
  • In diesen Dateien können z.B. Verbindungsparamter (Netzwerkgeschwindigkeit, MTU, Duplex) oder Schnittstellen-Parameter (MAC-Adresse, Name der Schnittstelle, Wake-on-LAN) konfiguriert werden
  • Link-Dateien sollten mit mit einer zweistellingen Nummer im Dateinamen beginnen. Die Link-Dateien werden in der Sortierreihenfolge der Datei-Namen gelesen (00 - erste Datei, 99 - letzte Datei)
  • Dokumentation: man systemd.link
  • Beispiel: Umbenennung einer Netzwerkschnittstell anhand der MAC-Adresse
[Match]
MACAddress=00:a0:de:63:7a:e6

[Link]
Name=dmz0

  • Nachdem eine neue .link-Datei erstellt oder eine bestehende .link-Datei geändert wurde, können die neuen Einstellungen mit den folgenden Befehlen auf die entsprechende Schnittstelle (hier eth0) angewendet werden:
$ sudo udevadm control --reload
$ sudo ip link set eth0 down
$ sudo udevadm trigger --verbose --settle --action add /sys/class/net/eth0

9.2 Netdev-Dateien

  • Dateien mit der Endung .netdev definieren und konfigurieren virtuelle Netzwerkgeräte wie veth, macvlan, ipvlan, IPSec, Vlan oder bridge Schnittstellen
  • Dokumentation man systemd.netdev
  • Beispiel: Bridge
[NetDev]
Name=bridge0
Kind=bridge

[Bridge]
Priority=10
STP=true
VLANFiltering=true

  • Beispiel: VLAN
Name=vlan1
Kind=vlan

[VLAN]
Id=1

  • Beispiel: VETH-Schnittstelle
[NetDev]
Name=veth-cust0
Kind=veth

[Peer]
Name=veth-host0
MACAddress=00:AA:00:11:22:33

9.3 Network-Dateien

  • Dateien mit der Endung .network Beschreiben die IP-Konfiguration (IPv4 oder IPv6) einer Netzwerkschnittstelle
  • Die [Match] Sektion der Konfigurationsdatei wählt die Netzwerkschnittstelle anhand der Namens, des Netzwerktreibers, der Hardware-Adresse, SSID oder PCI-Pfad aus. Jede .network Datei sollte mit einer [Match] Sektion beginnen
  • In der [Link] Sektion können einige Parameter der Hardware-Schicht konfiguriert werden, wie z.B. die MTU. Hier sind jedoch nicht alle Optionen der [Link] Dateien vorhanden
  • In der [Network] wird das TCP/IP Netzwerk konfiguriert:
    • DHCP an/aus
    • Default-Route
    • DNS Resolver inkl. DNSSEC Validierungs-Status
    • Mulicast DNS und LLMNR
    • NTP-Server
    • Forwarding
  • In der [Address] Sektion werden die IPv4- und IPv6 Adressen konfiguriert
  • In der [Neighbor] Sektion können IPv4 ARP Einträge manuell vorgenommen werden
  • In der [Route] Sektion wird die Routing-Konfiguration im Detail konfiguriert (Default-Gateway, weitere Host- oder Netz-Routen)
  • In der [DHCPV4] Sektion kann die Funktion des DHCPv4-Clients im Detail konfiguriert werden
  • In der [BRIDGE] Sektion werden die Einstellungen für eine Software Bridge konfiguriert
  • Beispiel: statische Netzkonfiguration
[Match]
Name=enp2s0

[Network]
Address=192.0.2.15/24
Gateway=192.0.2.1
  • Beispiel: Bridge mit 2 Schnittstellen
[NetDev]
Name=bridge0
Kind=bridge

[Match]
Name=bridge0

[Network]
Address=192.0.2.15/24
Gateway=192.0.2.1
DNS=192.0.2.53
[Match]
Name=eth0

[Network]
Bridge=bridge0
[Match]
Name=enp7s0

[Network]
Bridge=bridge0

9.4 Aufgabe 1

  • Konfiguriere die Netzwerkschnittelle eth1 mit der statischen IP-Adresse 172.16.1.x
  • Teste das die Gegenstelle 172.16.1.200 erreichbar ist

9.5 Aufgabe 2

  • Erstelle eine Konfiguration für systemd-networkd um die statische IP-Adresse aus Aufgabe 1 auf die Schnittstelle eth1 zu setzen
  • Teste die Konfiguration mittels eines Netstart des Systems

9.6 Aufgabe 3

  • Erstelle eine Konfiguration für eine Bridge
  • Füge die Netzwerkschnittstelle eth1 dieser Bridge hinzu
  • Starte einen Systemd-nspawn Container mit privatem Netzwerk und VETH-Netzwerkschnittstellen systemd-nspawn -b -D /srv/container/redhat --private-network --network-veth
  • Konfigure the VETH-Network inside the container with the IP-Address 172.16.1.10x
  • Füge die VETH-Schnittstelle auf dem Host der Bridge hinzu
  • Teste die Verbindung vom Container zu der IP-Adresse 172.16.1.200