IP Konfiguration
« | 13 Feb 2022 | »Während alle Betriebssysteme vergleichbare APIs für das Dateisystem haben, ist die zweitwichtigste (manchmal auch wichtigste) Konfiguration vollkommen individuell in die Software eingeflossen: Die TCP/IP Konfiguration.
Dass Windows und Linux unterschiedliche Meinungen haben, war zu erwarten. Doch dass alle Unix Derivate unterschiedliche Wege gehen, überrascht mich immer wieder.
Windows
Während in Windows fast alles durch APIs erreichbar ist, fehlten auch hier einige Funktionen um IP Adressen im System zu setzen oder um Dienste wie DHCP und DNS ein und auszuschalten.
Lustigerweise hat sich hier ein Unix
Ansatz eingeschlichen, indem die Netshell (netsh
) als Kommandozeilen
Werkzeug das Konfigurieren von IP Einstellungen “standardisiert” hat.
netsh interface ipv4 set address "Local Area Connection" static 192.168.0.8 255.255.255.0 192.168.0.1
und netsh interface ipv4 set dnsserver "Local Area Connection" static 192.168.0.1
können sowohl von Scripts als auch von Programmen benutzt werden um das
Netzwerk zu verwalten.
Seit Windows 2000 ist mit WMI auch eine COM-API vorhanden. Die VB-Script Beispiele der MSDN lassen sich mit einigen Anpassungen in native Programme integrieren, oder per System.Management auch von dotNET Programmen anwenden.
Unix-Derivate
BSD und Linux Varianten nutzen häufig Konfigurationsdateien, um IP Adressen beim Start statisch zu setzen, oder eben DHCP einzuschalten. Doch leider ist diese Information bei jeder Distributionsfamilie wo anders abgelegt.
Und dann kommen auch noch unterschiedliche Zusatzdienste wie networkmanager
hinzu, die - wenn aktiviert - diese Konfigurationsdateien entweder
überschreiben oder unwirksam machen.
DNS
Relativ einig sind sich alle, wo ein statisch konfigurierter DNS-Server
festgelegt wird, nämlich in /etc/resolv.conf
.
Dort drinnen stehen wenige Zeilen nach dem Schema:
Linux-klassisch
Viele “einfache” Linux Varianten nutzen die Datei
/etc/network/interfaces
, die nach folgendem Muster aufgebaut ist:
um statische IPs zu vergeben.
Die Namen der diversen Netzwerkadapter (hier eth0
) erhält man entweder
per klassischem ifconfig
Aufruf, oder per ip addr
.
Will man den DHCP Client die IP Adressen setzen lassen, hilft:
1iface eth0 inet dhcp
Weitere Beispiele unter linuxhint.com/debian_etc_network_interfaces
Linux Network Manager
Wer eine Network Manager Installation von der Konsole aus verwalten will, findet unter devconnected.com/network-manager-on-linux-with-examples/ eine detaillierte Beschreibung.
Grundsätzlich kann man aber mit Tools wie nmcli
viele Einstellungen setzen
und anwenden lassen.
z.B.:
FreeBSD
Die Datei /etc/rc.conf
enthält für jeden Netzwerkadapter eine
ifconfig_[NICNAME]
Zeile neben einigen anderen Dienstkonfigurationen.
Man kann also mit
vieles abdecken. Am Ende ruft man dann noch die Kommandos
auf um die Konfiguration sofort anwenden zu lassen.
Weitere Infos unter: docs.freebsd.org/en/books/handbook/config/#config-network-setup
OpenBSD
OpenBSD speichert seine Daten in separate Dateien als
/etc/hostname.[nicname]
Da drinnen findet man Zeilen wie:
für statische IPs oder
1inet autoconf
für DHCP.
Der Router wird in eine eigene Gateway Datei namens /etc/mygate
geschrieben
und beinhaltet dann nur die Zeile:
1192.168.0.254
Weitere Infos findet man unter www.openbsd.org/faq/faq6.html
NetBSD
NetBSD speichert die IP-Addresse in /etc/ifconfig.[nicname]
.
Ein Beispieldatei wie /etc/ifconfig.hvn0
sieht etwa so aus:
Zusätzlich sollte die neue statische IP in /etc/hosts
eingetragen sein.
Für die IPv4 Route, wird die Gateway IP entweder in /etc/mygate
hinterlegt,
oder aber man fügt in /etc/rc.conf
den Eintrag
1defaultroute="192.168.0.254"
an.
Und zur Aktivierung von DHCP, muss man in /etc/rc.conf
die Zeile
1dhcpcd=YES
anfügen.
www.netbsd.org/docs/guide/en/chap-net-practice.html listet auch noch weitere Details auf.
Fazit
Was mich wirklich etwas anpisst, ist die Tatsache, dass alle Varianten extrem ähnlich zu einander sind, also keine gravierenden Feature-Unterschiede erkennbar sind. (OK, ich lasse hier mal WLAN bewusst weg).
Es wirkt so, als hätte man künstlich versucht Unterschiede zu schaffen.
Für mich als Programmierer, der gerne Verwaltungsdienste schreibt, die ein System fernwartbar machen sollen, ist das natürlich eine Katastrophe. Denn hier kann man nur tausende Zeilen von IF-Orgien zusammenwerfen
um seinen Code halbwegs auf alle Plattformen zu bringen.
Andere Scripting Frameworks wie Perl, Python usw. haben das tatsächlich auch gemacht. Und um so mehr ärgert es mich, dass dieses “Wissen” nicht auch nativen Programmen zur Verfügung gestellt wird.
Von daher: Daumen runter für diese Config-Chaos-Community.