Rechner kommunizieren untereinander,
indem sie Datenpakete über Kabel und Funk austauschen.
Nach Außen empfängt und versendet der Kernel diese Datenpakete über einen Netzwerk-Adapter.
Nach Innen kommuniziert er über die Systemaufrufe send()
und recv()
mit dem richtigen Prozess.
Ein Netzkoppler (engl.: Gateway),
wie zum Beispiel die Fritz!Box,
verbindet verschiedenartige Netzwerke untereinander
und mit dem Internet.
Wir Menschen identifizieren Rechner anhand ihres Namens, daher brauchen es einen Mechanismus, der Namen auf Adressen abbildet. Der NSS legt fest, in welcher Reihenfolge verschiedene Datenbanken befragt werden. Die erste Anlaufstelle ist meist die lokale Hosts-Datei gefolgt vom DNS. Ein sogenanter Recursive Resolver hangelt sich, beginnend bei einem der Root-Nameserver, bis zum für die Domäne zuständigen authoritativen Nameserver durch und merkt sich die Antworten.
Für die Datenbank hosts
stehen folgende
Service-Module zur Verfügung:
files
/etc/hosts
)nis, nisplus
myhostname
/etc/hostname
) sowie localhost
und _gateway
mymachines
systemd-nspwan
)mdns
.local
Domäne (avahi-autoipd
)resolve
systemd-resolved
)dns
/etc/resolv.conf
)Der Kernel stellt die verfügbaren Adapter unter
/sys/class/net
zur Verfügung. Der
udev(7)
Daemon benennt diese nach folgemdem Schema:
Präfix | Controller | Beispiel | Verwendung |
---|---|---|---|
lo | Loopback (virtuelles Schleifengerät) | ||
en | Ethernet (kabelgebundener RJ45-Adapter) | ||
oNumber | eno1 | On-board (oft bei Servern) | |
sSlot | ens1 | Hotplug-Slot | |
pBussSlot | enp0s25 | PCI-Bus (0000:00:19) | |
xMacAddress | enx23ee4711d34f | Hardware-Addresse | |
wl | pBussSlot | wlp4s0 | Wireless (drahtloses Funknetz) |
ww | pBussSlot… | wwp0s2… | Wide Area (SIM-Karte) |
br | br0 | Bridge (Punkt-zu-Punkt Verbindung) | |
tun | Number | tun0 | Tunnel (VPN) |
ve- | Name | ve-debian | Virtuelle Maschine |
Um die klassischen Namen wie eth0
zu reaktivieren,
gibt man auf der Kommandozeile des Kernels net.ifnames=0
an.
Individuelle Namen wie dmz0
kann man über persistente Regel
vergeben:
/etc/udev/rules.d/70-persistent-net.rulesSUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="dmz0"
Das Kommando
ip(8)
aus dem Paket
iproute2
dient der manuellen Einrichtung von
Adaptern, Adressen, Tunneln und Routen.
Damit ersetzt es die veralteten Werkzeuge aus dem Paket
net-tools
wie zum Beispiel
arp(8)
,
ifconfig(8)
,
route(8)
etc.
Das ist praktisch zum Testen, die Einstellungen gehen aber bei einem Neustart verloren.
ip link1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue… link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
Jedem Adapter lassen sich eine oder mehrere Adressen zuordnen.
ip address1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue… link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo
In der ARP-Tabelle sammelt er die Zuordnung von IP- zu MAC-Adressen.
ip neighbour10.0.0.1 dev eno1 lladdr de:ad:ca:fe:ba:be REACHABLE
Die Routing-Tabelle steuert, welchen Weg Datenpakete durch das Netzwerk nehmen.
ip routedefault via 10.0.0.1 dev eno1 metric 1024
Auf einem Netzkoppler mit mehreren Schnittstellen gibt es auch mehr Routen:
ip route default via 10.0.0.1 dev eno1 10.0.0.0/24 dev eno1 proto kernel scope link src 10.0.0.2 10.0.0.0/24 dev eno2 proto kernel scope link src 10.0.0.1 10.8.0.0/24 via 10.8.0.2 dev tun0 10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1
Standardmäßig werden unter Debian die Einstellungen in einer Konifigurationsdatei für ifupdown()
persistiert.
/etc/network/interfacesauto lo iface lo inet loopback allow-hotplug wlp1s0 iface wlp1s0 inet dhcp wpa-driver wext wpa-ssid Name wpa-psk Password
Systemd bringt einen Dienst mit, der das Netzwerk beim Start des Systems einrichtet. Ich nutze ihne gerne auf Servern.
/etc/systemd/networkd/en0.network[Match] Name=eno1 [Network] Address=192.168.23.2/24 Gateway=192.168.23.1
Das Programm networkctl(1)
steuert den Daemon.
networkctl IDX LINK TYPE OPERATIONAL SETUP 1 lo loopback carrier unmanaged 2 wwan0 wwan off unmanaged 3 enp0s31f6 ether no-carrier unmanaged 5 wlp0s20f3 wlan routable unmanaged
Auf einem Arbeitsplatz-Rechner sorgt normalerweise der Network Manager für eine bestmögliche Verbindung zum Internet, entweder per Ethernet oder über ein Funknetz.
/etc/NetworkManager/system-connections/Fnord.nmconnection[connection] type=wifi id=Fnord uuid=2227879f-8741-4029-a668-2835bec58ea8 interface-name=wlp0s20f3 [wifi] mode=infrastructure ssid=Fnord [wifi-security] auth-alg=open key-mgmt=wpa-psk psk=Password
Unter Gnome kann man Verbindungen über das Kontextmenü in der
oberen rechten Ecke bearbeiten. Auf der Kommandozeile konfiguriert
man Verbindungen mit nmcli(1)
oder nmtui(1)
.
Diese Programme kommunizieren via D-Bus mit einem privilegierten Daemon.
nmcli con show NAME UUID TYPE DEVICE Fnord 2227879f-8741-4029-a668-2835bec58ea8 wifi wlp0s20f3 lo 9b4de805-af42-431f-963f-193f364b3520 loopback lo Kabelgebundene Verbindung 1 88d907d5-8ec7-3ae4-9165-d098920209ca ethernet -- Kabelgebundene Verbindung 2 ab12924b-da9a-3a87-a05a-bd9aac6b59d8 ethernet --
Wenn der Kernel ein Datenpaket empfängt oder sendet, durchläuft es eine Reihe von Filtern.
/etc/nftables.conf#!/usr/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority filter; } chain forward { type filter hook forward priority filter; } chain output { type filter hook output priority filter; } }
Regeln in Datei schreiben oder laden.
nft list ruleset > /etc/nftables.conf nft --file /etc/nftables.conf
Die Systemd-Unit nftables
lädt die persistierten Regeln beim Systemstart.
systemctl enable --now nftables
Lokal zugestellte Datenpakete durchlaufen die Tabelle
INPUT
; lokal gesendete Datenpakete durchlaufen die Tabelle
OUTPUT
; und durchgeleitete Datenpaket die Tabelle
FORWARD
. Die Tabellen PREROUTING
und
POSTROUTING
werden hauptsächlich für
NAT
verwendet.
Mit iptables(8)
erstellt oder ändert man die Regeln.
Befehl | Option | Parameter | Beschreibung |
---|---|---|---|
iptables | [-t] | filter|nat|mangle|raw|security | Tabelle |
-A | INPUT|OUTPUT|FORWARD |PREROUTING|POSTROUTING | Anhängen an Kette | |
[-i] | eno1|ppp0|… | Eingehende Schnittstelle | |
[-o] | eno1|ppp0|… | Ausgehende Schnittstelle | |
[-p] | tcp|udp|icmp|…|all | Protokoll | |
[-s] | SourceAddr[/Mask] | Client-Adresse | |
[-d] | DestAddr[/Mask] | Server-Adresse | |
-j | ACCEPT|DROP|RETURN | Aktion |