orm@doc-tcpip.org | Erstellt: Mai 1999 - Letzte Modifikation: Juli 2001 |
Auf dieser Seite finden sich folgende Abschnitte:
Das Ifconfig Kommando (AIX - BSD)
Ein paar Beispiele zum Ifconfig
Die seltsamen Flags in der Ausgabe (UP, BROADCAST
...)
Unter AIX ist alles ein wenig anders
Ifconfig und IP-Aliase
IP-Aliase unter BSD (FreeBSD, AIX)
IP-Aliase unter System V (Solaris, Linux)
Das Anlegen ganz vieler Interfaces (zu Testzwecken)
Das ifconfig Kommando hat einige Schalter und eine ganze Reihe Keywörter. Zuerst die Schalter:
-a - zeigt Information über alle Interface in der Maschine.
-d - zeigt alle Interface im Status down.
-l - zeigt nur die vorhandenen Interfaces (ohne Information).
-u - zeigt alle Interface, die gerade im Status up stehen.
Man kann direkt ein Interface angeben, und bekommt dann nur die Information zu diesem Interface. Weiterhin ist es möglich, eine Protokoll-Familie (tcp, udp, tcp6, udp6, icmp, icmp6) zu spezifizieren und nur die entsprechende Information zu erhalten.
alias - Damit wird mitgeteilt, das sich dieser Aufruf auf ein Alias bezieht, also eine zusätzliche Adresse auf dem Adapter. Man kann so einen Adapter auf mehreren logischen Netzen einrichten.
allcast - Gilt nur für Token Ring. Das TR Interface wird dann auf allen Ringen Broadcasten (sonst tut es das nur auf dem loaklen Ring).
arp - Ifconfig nutzt das ARP, um der IP-Adresse die MAC Adresse zuzuordnen.
broadcast - Spezifiziert die Broadcast Adresse für dieses Interface.
dad - Die Duplicate Adress Detection von IPv6.
debug - Es wird Treiber-spezifischer Debug-Code mitangezogen.
delete - Löscht die angebene Adresse.
detach - Entfernt das Interface aus der Liste des Kernels. Ist es das Letzte seiner Art, so wird die entsprechende Kernel Extension entladen. Will man an Routen über dieses Interface drehen, muß man es detachen.
down - Markiert das Interface als down, sendet also keine Pakete über dieses Interface.
up - Markiert das Interface als up, aktiviert die Einstellungen und ermöglicht die Nutzung des Interfaces.
eui64 - Erzeugt die IPv6 Adresse aus der MAC Adresse.
first - Setzt diese IPv6 Adresse an die erste Stelle der Liste der Adressen. Pakete ohne definierte Quelle haben dann diese Adresse als Source Adresse.
firstalias - Eine Kombination aus alias und first.
group - Man kann Interfaces in Gruppen zusammenfassen und so Routing-Probleme umgehen, die entstehen, wenn man per Alias mehrere logische Netze bedient.
hwloop - Zwingt das Interface, Pakete an ein lokales Interface auf das Netz zu geben, statt sie über den Loopback abzukürzen.
metric - Man kann eine Anzahl Hops vorgeben; das wird dann von Routing Protokollen ausgewertet und das Interface entsprechend gewichtet.
mtu - Man kann eine bestimmte MTU einstellen (im Rahmen dessen, was die Hardware zuläßt).
netmask - Spezifiziert die Netzmaske für dieses Interface.
device - Bezieht sich auf ATM. Zeigt auf das Device, auf das sich das Interface bezieht (Unter ATM kann ein Interface über mehrere Devices verteilt sein).
pvc - Bezieht sich auf ATM. Dieses Interface wird nur PVC (Permanent Virtual Circuit) Verbindungstypen unterstützen.
svc_c - Bezieht sich auf ATM. Dieses Interface wird sowohl SVC (Switched Virtual Circuit) als wie auch PVC (Permanent Virtual Circuit) Verbindungstypen unterstützen. Ausserdem ist das Interface ein ARP Client, und man muß ATM Adressen von ARP Servern mitangeben.
svc_s - Bezieht sich auf ATM. Dieses Interface wird sowohl SVC (Switched Virtual Circuit) als wie auch PVC (Permanent Virtual Circuit) Verbindungstypen unterstützen. Ausserdem wird dieses Interface der ARP Server für dieses Logische IP Subnetz sein.
tcp_nocksum - Die Checksumme über TCP-Nutzlast in Paketen aus diesem Subnetz wird nicht geprüft. Bei Remoten Netzen und anderen Protokollen geht die Prüfung weiter.
thread - Erlaubt es, ein Interface an einen Kernel-Thread zu binden. Das verhindert, das Interfaces über den normalen Interrupt-Handler eine CPU zumachen. Der Thread kann zwischen mehreren CPU abgearbeitet werden.
rfc1323 - Schaltet die RFC 1323 Performance-Erweiterungen an (Man muß 0 oder 1 spezifizieren - sonst gilt die no-Einstellung).
tcp_mssdflt - Setzt die offerierte MSS (Maximum Segment Size) für dieses Interface.
tcp_recvspace - Das offerierte TCP-Window für Verbindungen über dieses Interface.
tcp_sendspace - Das offerierte TCP-Sendwindow für Verbindungen über dieses Interface.
tcp_nodelay - Schaltet den Nagle-Algorithmus für Verbindungen über dieses Interface an und aus (0 oder 1). Der Nagle-Algorithmus sammelt kleine Pakete und sendet diese verzögert mit einem ACK-Paket, was eh gesendet werden muß.
Zuerst die Ausgabe eines einfachen Aufrufes. Pro Interface wird der Name, die Flags und die mit dem Interface verknüpften Adressen ausgegeben. Zur Adresse gehört die IP, die Netzmaske und die Broadcast-Adresse. Eventuelle Alias-Adresse und IPv6-Adressen werden mit angezeigt.
doctcp@nimmaster# ifconfig -a lo0: flags=e08084binet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255 inet6 ::1/0 en0: flags=e080863 inet 192.168.140.3 netmask 0xffffff00 broadcast 192.168.140.255 tr0: flags=e0a0043 inet 9.39.0.74 netmask 0xfffff000 broadcast 9.39.15.255
Einige Beispiele für die Nutzung des ifconfig-Kommandos:
Einrichten eines Aliases auf das Interface en0:
ifconfig en0 10.16.32.8 netmask 255.255.240.0 alias
Verbindungen über das Token-Ring sollen den Nagle-Algorithmus nicht
nutzen:
ifconfig tr0 tcp_nodelay 0
Unter System V abgeleiteten Unixen sieht es etwas anders aus .. siehe weiter unten.
Für jedes Interface gibt das ifconfig-Kommando eine Zeile
"flags" aus. Diese Zeile beginnt mit einer Nummer, das ist die
Darstellung der Flags in Hex, also es wird das entsprechende Register
ausgelesen. Danach die Übersetzung in verständliche Form.
Einige Flags beziehen sich auf einstellbare Variablen des Adapters
bzw. des Interfaces (UP, PROMISC),
andere geben über feste Eigenschaften (SIMPLEX, 64BIT) des
Adapters Auskunft. Hier einige Flags:
UP - Das Interface ist up
BROADCAST - Das Interface ist in der Lage, Broadcasts zu senden und zu empfangen (Das bedeutet, daß der Adapter Broadcast-MAC Adressen erkennt).
NOTRAILERS -
RUNNING -
PROMISC - Der Adapter ist in den promiscuos mode gesetzt worden. Es nimmt jetzt alle Pakete auf. Das macht z.B. der tcpdump.
SIMPLEX - Der Adapter kann nicht hören und senden zugleich. Wenn er sendet, ist es ihm nicht möglich, auf dem Draht nach Kollisionen zu suchen.
MULTICAST - Der Adapter ist in der Lage, Mutlicastadressen zu benutzen.
GROUPRT -
64BIT - Der Adapter ist 64 bittig.
CHECKSUM_OFFLOAD - Der Adapter führt die Berechnungen zum Prüfen der Checksummen selbst durch - er nimmt der CPU damit einiges an Arbeit ab. Ein Feature, das schnelle Adapter (FDDI, Gigabit) aufweisen sollten.
CHECKSUM_SUPPORT - Der Adapter zeigt an, das er Checksummen Operationen unterstützt.
PSEG - Private Segments. Der Adapter zeigt an, das er in der Lage ist, ein eigenes, privates Segment im Netzwerk Speicherbereich zu verwalten. Damit ist es möglich, "wichtige" Adapter vor Konkurrenzsituationen zu schützen.
Im Fall von AIX ist das alles gleich, aber anders ;-). Wie sicher bekannt, verfügt AIX über die ODM, eine Datenbank, in der alle wichtigen Dinge über das System stehen, also auch Informationen zu den Netzwerk-Adaptern.
Wird nun ein Interface während des Bootens vom cfgmgr (der Configurations Manager) eingerichtet, dann werden die Informationen aus der ODM ausgelesen und es wird die entsprechende Kernel-Extension geladen. Das entspricht dem Kommando "mkdev -l en0".
Nachher kann man das Interface ganz "normal" mit dem Ifconfig
bearbeiten, Adressen ändern, es "up" oder "down" setzen etc. Der
Pferdefuß kommt jetzt: in dem Augenblick, wo man es mit der Option
"detach" runterfahren will und dieses Interface das
letzte seiner Art ist (also Ethernet, enX zum Beispiel), dann wird die
Kernel-Extension entladen. Das Interface kommt dann nicht mehr hoch, da
es alle Einstellungen "vergessen" hat. In diesem Moment ist ein "mkdev
-l
Das gilt für AIX 4.3. Es mag sein, das später das Ifconfig aufgebohrt worden ist, um diesen Zustand zu checken und von sich aus einen "mkdev" durchzuführen, wenn das Interface keine gültige Adresse hat und auch kein DHCP machen möchte.
Man kann auf einen Adapter mehrere Interfaces binden, die dann eigene IP-Adressen haben und über die normal geroutet werden kann. Das ist z.B. nötig, wenn man mehrere logische Subnetze auf einem physikalischen Netz fahren möchte oder wenn ein Server (nehmen wir einen Name-Server) ersetzt werden muß. Die alte Adresse wandert dann als Alias auf die neue Maschine, und der Betrieb geht weiter.
Beim Einrichten der Aliase gibt es Unterschiede, je nach dem, ob es ein BSD-Derivat (*BSD, AIX) oder ein Abkömmling von System V ist (Linux, Solaris). Das sind aber eher Äußerlichkeiten - in beiden Fällen ist die Bezeichnung "Alias" ein wenig irreführend. Es sind vollgültige Interfaces, die unabhängig voneinander an einen Adapter gebunden sind und die man einzelen löschen kann.
Hier ist der Aufruf des ifconfig-Kommandos ganz normal, nur das Keyword alias muß angefügt werden. Will man ein IP-Alias wieder löschen, so kann man es direkt mit der IP-Ansprechen. In der FreeBSD Doku heißt es, daß man 256 dieser IP-Aliase anlegen kann. Unter AIX gibt es dort keine Beschränkung, es geht also solange, bis kein Netzwerkspeicher mehr zur Verfügung steht. Jetzt ein praktisches Beispiel:
elnuevo# ifconfig -a ed0: flags=8943mtu 1500 inet 172.168.140.6 netmask 0xffffff00 broadcast 172.168.140.255 inet6 fe80::240:5ff:fe6c:9d84%ed0 prefixlen 64 scopeid 0x2 ether 00:40:05:6c:9d:84 lo0: flags=8049 mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0xc inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000
Ich lege jetzt mit den folgenden Befehlen 3 IP-Aliase für andere
Netze an. Es könnten auch weitere Adressen für mein aktuelles Netz sein.
elnuevo# ifconfig ed0 166.66.66.66 alias
elnuevo# ifconfig ed0 188.88.88.88 alias
elnuevo# ifconfig ed0 199.99.99.99 alias
Das sieht dann so aus:
elnuevo# ifconfig -a ed0: flags=8943mtu 1500 inet 172.168.140.6 netmask 0xffffff00 broadcast 172.168.140.255 inet 166.66.66.66 netmask 0xffff0000 broadcast 166.66.255.255 inet 188.88.88.88 netmask 0xffff0000 broadcast 188.88.255.255 inet 199.99.99.99 netmask 0xffffff00 broadcast 199.99.99.255 inet6 fe80::240:5ff:fe6c:9d84%ed0 prefixlen 64 scopeid 0x2 ether 00:40:05:6c:9d:84 lo0: flags=8049 mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0xc inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000
Unter BSD legt das ifconfig-Kommando auch die nötigen Netzroute pro Interface an. Ich war faul und habe keine keine Netzmasken spezifiziert bei meinen ifconfig-Aufrufen, sodaß ifconfig mit den normalen Klassen der IP-Adressen rechnet, wie man sowohl in der ifconfig- wie auch der netstat-Ausgabe sieht (166. und 188. sind Class B, während 199. Class C ist. 172. ist eigentlich auch Class B, aber das habe ich gändert).
elnuevo# netstat -rn Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire 127.0.0.1 127.0.0.1 UH 1 26 lo0 166.66 link#2 UC 0 0 ed0 => 172.168 link#2 UC 0 0 ed0 => 188.88 link#2 UC 0 0 ed0 => 192.168.140 link#3 UC 0 0 ed1 => 199.99.99 link#2 UC 0 0 ed0 => Internet6: Destination Gateway Flags Netif Expire ::1 ::1 UH lo0 fe80::%ed0/64 link#2 UC ed0 fe80::%ed1/64 link#3 UC ed1 fe80::%lo0/64 fe80::1%lo0 Uc lo0 ff01::/32 ::1 U lo0 ff02::%ed0/32 link#2 UC ed0 ff02::%ed1/32 link#3 UC ed1 ff02::%lo0/32 fe80::1%lo0 UC lo0
Meine IP-Aliase haben ihren Zweck erfüllt, und ich möchte sie
löschen. Das geht mit demselben ifconfig-Aufruf, nur mit dem Keyword
delete. Es sei nochmal darauf hingewiesen, das
die "Aliase" gleichberechtigt sind. Ich kann jede beliebige Adresse
(Interface) löschen. Das eigentliche Interface (eth0) fällt erst dann
weg, wenn keine Adresse mehr darauf sitzt - es ist aber egal, welche das
ist (Also ob sie über ein Alias eingerichtet wurde oder nicht).
elnuevo# ifconfig ed0 166.66.66.66 delete
elnuevo# ifconfig ed0 188.88.88.88 delete
Das ergibt folgende ifconfig-Ausgabe:
elnuevo# ifconfig -a ed0: flags=8943mtu 1500 inet 172.168.140.2 netmask 0xffff0000 broadcast 172.168.255.255 inet 199.99.99.99 netmask 0xffffff00 broadcast 199.99.99.255 inet6 fe80::240:5ff:fe6c:9d84%ed0 prefixlen 64 scopeid 0x2 ether 00:40:05:6c:9d:84 lo0: flags=8049 mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0xc inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 elnuevo#
Dieses Verhalten liegt an der Implementierung dieser Geschichte unter den BSD-Unixen. Es gibt eine Datenstruktur, ifnet, die für jedes Interface angelegt wird. Die Datenstrukturen mehrerer Interfaces werden verkettet (eine linked list). Pro Interface sind mehrere Adresse möglich, einfach dadurch, das man im Feld if_addrlist einen neuen Verweis erzeugt und dort die Adresse ablegt - wieder eine verkettete Liste. Hier ein Bild, ich hoffe, es wird damit klarer:
. ifnet pf1_addr pf2_addr . | | | . [en0] - if_addrlist -> [1. Addr] - ifa_next -> [2. Addr] -=> . | | | . ifnext ia_next ia_next . | | | . [en1] - if_addrlist -> [1. Addr] - ifa_next -> [2. Addr] -=> . | | | . ifnext ia_next ia_next . | | | . [lo0] - if_addrlist -> [1. Addr] - ifa_next -> [2. Addr] -=> . | | |Damit ist dann auch einsichtig, warum man eine beliebige Adresse bzw. ein beliebiges Interface einfach löschen kann: Es wird aus der Kette entfernt, und die Reste werden wieder zusammen gefügt.
Das Handling ist hier ein wenig anders. Das IP-Alias wird nicht mit
dem Eintrag für den Link verbandelt, sondern es werden eigene Einträge
mit einem eigenen Interface-Namen erstellt, also Aliase auf
eth0 wären dann eth0:0, eth0:1 etc.
Das original Interface ist gegenüber den anderen hervorgehoben, es kann
erst gelöscht werden, wenn die IP-Aliase nicht mehr existieren (unter
BSD sind die Adressen völlig gleich). Inwieweit das
mit den zugrundeliegenden Datenstrukturen einhergeht, weiss ich nicht.
Jedenfalls rufe ich zum Einrichten eines IP-Alias auf System V
abgeleiteten Systemen das ifconfig-Kommando mit dem erweiterten
Interface-Namen auf und gebe ihm eine Adresse. Das "alias" Keyword gibt
es hier nicht. Wieder ein Beispiel für das alles, zuerst die
Ausgangssituation:
linux:/tmp # ifconfig eth0 Link encap:Ethernet HWaddr 00:06:29:F1:96:81 inet addr:192.168.1.9 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1088 errors:0 dropped:0 overruns:0 frame:0 TX packets:1069 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:10 Base address:0x8000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
Jetzt lege ich meine beiden IP-Aliase an:
linux:/tmp # ifconfig eth0:0 188.88.88.88
linux:/tmp # ifconfig eth0:1 199.99.99.99
Und so sieht das System danach aus. Es wird für jedes Alias ein neuer
Eintrag erstellt, die Flags etc. sind kopiert. Die Statistiken bleiben
beim original Eintrag, der den Adapter representiert:
linux:/tmp # ifconfig eth0 Link encap:Ethernet HWaddr 00:06:29:F1:96:81 inet addr:192.168.1.9 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1089 errors:0 dropped:0 overruns:0 frame:0 TX packets:1069 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:10 Base address:0x8000 eth0:0 Link encap:Ethernet HWaddr 00:06:29:F1:96:81 inet addr:188.88.88.88 Bcast:188.88.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0x8000 eth0:1 Link encap:Ethernet HWaddr 00:06:29:F1:96:81 inet addr:199.99.99.99 Bcast:199.99.99.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0x8000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
Jetzt lösche ich meine Aliase. Die Aliase kann ich in beliebiger
Reihenfolge löschen, das originale Interface erst, wenn alle Aliase
verschwunden sind.
linux:/tmp # ifconfig eth0 del 188.88.88.88
Der Ifconfig danach:
linux:/tmp # ifconfig eth0 Link encap:Ethernet HWaddr 00:06:29:F1:96:81 inet addr:192.168.1.9 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1089 errors:0 dropped:0 overruns:0 frame:0 TX packets:1069 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:10 Base address:0x8000 eth0:1 Link encap:Ethernet HWaddr 00:06:29:F1:96:81 inet addr:199.99.99.99 Bcast:199.99.99.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0x8000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 linux:/tmp #Wieder rechnet Ifconfig mit den alten Klassen die Netzmasken aus, wenn man ihn nicht eines besseren belehrt (via netmask Keyword).
Manchmal ist es nötig, viele Interface (Aliase) anzulegen. Das geht schnell und einfach mit einem Skript dieser Art:
for y in `seq 0 63` ; do for x in `seq 1 254` ; do echo $y $x ; ifconfig eth0:$[ ( $y * 256 ) + $x ] 10.0.$y.$x broadcast 10.0.$y.255 netmask 255.255.255.0 up ; done ; done
[ 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