orm@doc-tcpip.org | Erstellt: Mai 2000 - Letzte Modifikation: November 2003 |
Zuallererst sollte man wissen, woran warum gedreht werden soll - das ist wichtig und sollte eigentlich klar sein. Trotzdem will ich nochmal darauf hinweisen...
Auf den verschiedenen Unix-Derivaten gibt es ebensoviele Arten und Wege, solche Parameter zu verändern. Einige der Parameter greifen tief in Kernel-Routinen ein, es muß also neu gebootet werden, damit die Änderung wirkt. Andere Einstellungen sind dynamisch und gelten ab dem Punkt der Änderung für neue TCP-Verbindungen. Bestehende Verbindungen werden nicht angetastet (Beim Öffnen eines Socket werden Datenstrukturen angelegt, es gibt pro Verbindung einen TCB (Transmission Control BLock) und einen PCB (Protocol Control Block). Dort sind die Parameter entsprechend initialisiert, und werden nicht neu eingelesen, wenn sie sich ändern). Das bedeutet, daß alle Sockets, die auf dem Netz lauschen, nach Änderungen neu gestartet werden müssen - und natürlich auch der inetd.
Es ist mit einer einfachen Änderung meist nicht getan, den diese gelten nur bis zum Reboot. Je nach Unix-Derivat muß man einmal gemachte Einstellungen in verschiedenen Files oder Datenbanken hinterlegen, damit ein Reboot die entsprechenden Parameter wieder einstellt. Und, wieder je nach Unix-Derivat unterschiedlich, es gibt verschieden viele Parameter, die man per Interface einstellen kann.
Als letztes sei noch erwähnt, das es sehr viele Parameter gibt, einige sehr sinnvoll, andere ein bisschen unverständlich bzw. überholt. Und das Ganze ist im steten Fluß, mit jedem Release kann man neue Einstellmöglichkeiten entdecken.
AIX - IBMs Unix Derivat
Hier wird zum Setzen der Netzwerk-Parameter das Kommando no
(network options) benutzt. Man kann alle möglichen
Parameter abfragen,
einen Parameter setzen und einen Parameter auf den Default-Wert
zurücksetzen. Die Benutzung ist einfach, man muß allerdings beachten, ob
der Parameter einen Reboot bzw. einen Neustart des
Kommunikations-Subsystems braucht, oder ob der Parameter dynamisch
angezogen wird. Will man die gemachte Änderung über einen Reboot
beibehalten, so muß die Änderung in das File /etc/rc.net
eintragen.
Dabei gilt, daß dynamische Parameter nach den Aufrufen
der defif/cfgif Methoden eingetragen werden müssen,
nicht-dynamische aber vorher!
Ab der AIX Versionen 5.2 wird für diesen Zweck das File
/etc/tuning/nextboot benutzt. Außerdem wurden die Klassen
der Parameter erweitert. Es gibt jetzt zu den bekannten
dynamischen- und reboot-Parametern noch
statische (festgelegte Parameter),
bosboot (der Parameter erfordert einen bosboot zum
reboot),
mount (zieht beim nächsten Mount),
incremental
(kann ab dem Booten nur noch inkrementell verändert werden und
connect (zieht mit der nächsten Socket Verbindung).
Je nach Klasse werden die Parameter aktiviert bzw. der
User auf nötige Aktionen (bosboot) hingewiesen.
Ein Log-File (/etc/tunables/lastboot.log) loggt
Probleme mit einzelnen Parametern beim Boot, das File
/etc/tunables/lastlog listet alle während des
Bootes gesetzten Parameter.
Um das Ganze noch etwas weiter zu
komplizieren: Einige Parameter sind Interface-Spezifisch und landen in
der ODM (Object Data Manager).
Die einzelnen Parameter werden hier
beschrieben.
Zum Kommando selbst (Stand AIX V5.2):
no -a zeigt die einstellbaren Parameter und ihre Default-Einstellung. Man piped das am Besten nach more oder pg, da es mehrere Bildschirme füllt.
no -o setzt einen Parameter auf den
angegebenen Wert:
no -o thewall=130289
Der Parameter thewall wird auf den entsprechenden Wert gesetzt.
Das ist ein dynamischer Parameter, er gilt also jetzt für jede neue
Verbindung bis zum Reboot. Soll er immer so eingestellt werden, dann muß
er am Ende der Datei /etc/rc.net angefügt werden. Dort
stehen schon einige Beispiele. Besondere Beachtung sollten andere
Skripts verdienen, die eventuell auch laufen und Werte ändern -
tuning.cust auf SP-Maschinen ist so ein Kandidat.
no -d setzt den angegebenen Parameter auf den
Systemeigenen Default-Wert zurück. Es gilt wieder, darauf zu achten,
ob der Parameter dynamisch ist oder nicht - und ob die Änderung in einem
Start-Skript steht. Der Schalter -D setzt
alle Parameter auf den Default zurück. Ein Beispiel:
no -d thewall
Der Parameter thewall wird wieder der vom System berechnete
Standard-Wert sein.
no -h zeigt einen Hilfetext zum Parameter.
no -L zeigt die einstellbaren Parameter und ihre Default-Einstellung sowie der Bereich und die Einheit in einer Tabelle.
no -p ist analog den Schaltern -P und -T beim chdev-Kommando. Es wird ein File /etc/tunables/nextboot geschrieben, was beim Booten ausgewertet wird. Damit lassen sich alle dynamischen und die Reboot-Parameter zusammen setzen (ein zeitnaher Reboot ist nötig). Ein Sonderfall sind Parameter, die einen Bosboot erfordern - hier erfolgt eine entsprechende Meldung.
no -r wie der Schalter -p, jedoch nur für Reboot-Parameter (anlegen von /etc/tunables/nextboot).
no -x wie der Schalter -L, aber ohne Kommentare (zum Import in ein Tabellen-Programm).
FreeBSD - Ein BSD-Unix
Der Befehl sysctl erfüllt hier die Aufgabe. Allerdings
ist der Befehl bei weitem nicht auf das Netzwerk beschränkt - sämtliche
System- und Kernel-Variablen lassen sich hier einstellen.
Aktuelle Informationen liefern die entsprechenden Header-Files im
Sourcecode und die sysctl man-Page: man 3 sysctl
.
Zum Kommando selbst:
sysctl -a zeigt die einstellbaren Parameter und ihre Default-Einstellung. Man piped das am Besten nach grep net | more, da es mehrere Bildschirme füllt.
sysctl parameter.name gibt für
den spezifizierten
Parameter den Namen und den Wert an:
sysctl -n net.inet.tcp.keepinit
Zeigt den Parameter und den gesetzten Wert.
sysctl -n parameter.name gibt für
den spezifizierten
Parameter nur den Wert an - man kann so Werte in Skripten auslesen:
sysctl -n net.inet.tcp.keepinit
Zeigt nur den gesetzten Wert.
sysctl -w parameter.name=wert setzt den
angegebenen Parameter entsprechend auf den gewünschten Wert.
Ein Beispiel:
sysctl -w net.inet.ip.forwarding=1
Das schaltet das IP-Forwarding Feature auf dem System an.
Sollen die Werte nach einem Reboot bestehen bleiben, so müssen sie
entweder im File /etc/rc.conf entsprechend gesetzt sein - oder im
File /etc/sysctl.conf angegeben werden.
Linux - Unix unter der GPL
Hier finden sich wieder leichte Unterschiede von Distribution zu
Distribution .... Jedenfalls ist hier der Ansatz etwas anders, alle
Kernel-Parameter haben im /proc/sys-Filesystem einen Eintrag, der den
gesetzten Wert darstellt. Man kann diese Werte dann zur Laufzeit mit
einem einfachen echo-Kommando verändern. Je nach
Distribution ist das bekannte sysctl als Interface
implementiert. Hier wird wieder nur auf die Netzwerk-Parameter
eingegangen; diese liegen in /proc/sys/net.
.
Änderungen mit dem echo-Kommando:
Hier anhand eines Beispieles abgefackelt. Ich möchte meine Maschine dazu
bringen, das sie Pakete weitergibt, also ip-forwarding macht.
Schlauerweise weiss ich schon, das es da irgendeinen Parameter gibt,
der das bewerkstelligt. Und der wird wohl irgendwo bei den
Netzeinstellungen, Internet (inet) oder IPv4 zu finden sein. Also los:
[root@elpequeno /root]# cd /proc/sys/net [root@elpequeno net]# ls 802 core ethernet ipv4 token-ring unix [root@elpequeno net]# cd ipv4 [root@elpequeno ipv4]# ls *forw* ip_forward [root@elpequeno ipv4]# cat ip_forward 0 [root@elpequeno ipv4]# echo 1 > ip_forward [root@elpequeno ipv4]# cat ip_forward 1Nun forwarded die Maschine - es sei nicht verschwiegen, das man diese Einstellung unter Linux pro Interface vornehmen kann.
Änderungen mit dem sysctl-Kommando:
Das geht im großen und ganzen wie unter *BSD. Zusätzlich gibt es noch
den Schalter -p, der es erlaubt, ein File zu
spezifizieren und einzulesen (Standard ist /etc/sysctl.conf).
Solaris - Unix von SUN
Ich habe noch nie verstanden, warum alle Leute so heiss auf
Solaris sind - für mich ist es wie Traktorfahren. Jedenfalls
wird der TCP/IP Stack mit dem ndd-Kommando
getuned. Man kann sich die Parameter anzeigen lassen und sie mit
dem Schalter set setzen:
ndd
ndd -set
Es gibt eine Reihe von Devices (Module), meist in /dev, die man
mit ndd tunen kann. Ein Beispiel:
ndd /dev/tcp
Alle Parameter eines Modules:
ndd /dev/icmp ?
oder mit dem ganzen Namen:
ndd /dev/udp xxx_xx yy_yyy
ändern mit
ndd -set xxx_xx Wert
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL