IP Konfiguration

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:

1nameserver 192.168.0.254
2nameserver 8.8.8.8

Linux-klassisch

Viele “einfache” Linux Varianten nutzen die Datei /etc/network/interfaces, die nach folgendem Muster aufgebaut ist:

1auto lo
2iface lo inet loopback
3
4auto eth0
5iface eth0 inet static
6    address 192.168.0.13
7    netmask 255.255.255.0
8    gateway 192.168.0.254

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.:

1nmcli con mod eth0 ipv4.address 192.168.0.13/24
2nmcli con mod eth0 ipv4.gateway 192.168.0.254
3nmcli con mod eth0 ipv4.dns 8.8.8.8
4nmcli con mod eth0 ipv4.method manual
5nmcli con up eth0

FreeBSD

Die Datei /etc/rc.conf enthält für jeden Netzwerkadapter eine ifconfig_[NICNAME] Zeile neben einigen anderen Dienstkonfigurationen. Man kann also mit

1ifconfig_ethX="DHCP"
2ifconfig_ethY="inet 192.168.0.13 netmask 255.255.255.0"
3defaultrooter="192.168.0.254"

vieles abdecken. Am Ende ruft man dann noch die Kommandos

1/etc/rc.d/netif restart
2/etc/rc.d/routing restart

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:

1inet 192.168.0.1 255.255.255.0
2inet6 autoconf

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:

1up
2192.168.0.1 netmask 0xffffff00

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

1if (net_config == variant_1)
2...
3else if (net_config == variant_2)
4...

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.