Virtuelle Ethernet-Schnittstellen

Beschreibung

Eine virtuelle Ethernet-Schnittstelle ist ein Pseudogerät, das ein zweites Ethernet-Gerät vorgaukelt. Es kann auf eine andere IP-Adresse eingestellt werden als das ursprüngliche Ethernet-Gerät, sodass man mehrere IP-Adressen gleichzeitig benutzen kann.

Solaris hat das bereits eingebaut, Kenner haben bestimmt schon mal sowas wie "le0:1" gesehen.

Was man braucht

Zu aller Erst braucht man mal das Paket vif-1.11.tar.gz

Da modload auf SunOS 4.1.1 nicht gescheit funktioniert, werden wir den Treiber in den Kernel einbauen. Das ist nicht weiter schwierig.
Nachteil: Man kann den Treiber nicht im laufenden Betrieb entfernen.
Vorteil: Man kann den Treiber nicht im laufenden Betrieb entfernen, während er in Benutzung ist, was zum Absturz der Maschine führt.

Installation

Auspacken:
        gzcat vif-1.11.tar.gz | tar xvf -
        cd vif-1.11
An der Datei if_vif.c muss eine kleine Änderung vorgenommen werden:
        vi if_vif.c
Gleich hinter der Zeile
        #include "vif.h"
Muss folgende Zeile eingefügt werden:
        #if NVIF > 0
Das dazugehörige
        #endif
kommt ganz ans Ende der Datei.

Dann kopiert man den Treiber nach /sys/net:

        cp if_vif.c /sys/net/
Als nächstes muss man folgende Zeile in /sys/conf.common/files.cmn einfügen:
        net/if_vif.c            optional vif
Gleich hinter dem Eintrag für net/if.c wäre die geeignete Stelle.

Nun muss in /sys/sun/conf.c ein Anschluss für den Treiber eingerichtet werden. Hinter der Anschussdefinition des Grafikbeschleunigers NGAONE füge man folgendes ein:

        #include "vif.h"
        #if NVIF > 0
        int vif_open(),vif_close(),vif_read(),
                vif_write(),vif_ioctl(),vif_select();
        #else
        #define vif_open nodev
        #define vif_close nodev
        #define vif_read nodev
        #define vif_write nodev
        #define vif_ioctl nodev
        #define vif_select nodev
        #endif
Dann muss man in der cdevsw-Struktur einen Eintrag machen. Am besten modifiziert man dazu den Eintrag #14, der früher für die cgone reserviert war:
    {
        vif_open,       vif_close,      vif_read,       vif_write,       /*14*/
        vif_ioctl,      nodev,          vif_select,     0,      /* was cgone */
        0,
    },
Wir merken uns: Die Hauptgerätenummer (major device number)] ist die 14!

Zu guter Letzt muss auch noch ein Eintrag in der Kernelkonfiguration gemacht werden:

        pseudo-device   vif8
Eine gute Stelle dafür wäre hinter den anderen Pseudo-Geräten und gleich vor den Kommentaren zur "config vmunix"-Zeile.

Man kann die Zahl hinter "vif" auch erhöhen, aber wenn man mehr als 10 Schnittstellen angibt, zeigt "netstat" diese ein wenig komisch an.

Nun muss der Kernel neu konfiguriert, gebaut, installiert und die Maschine neu gestartet werden. Danach erzeugt man die Gerätedateien:

        cd /dev
        mknod vif0 c 14 0
        mknod vif1 c 14 1
        mknod vif2 c 14 2
        mknod vif3 c 14 3
        mknod vif4 c 14 4
        mknod vif5 c 14 5
        mknod vif6 c 14 6
        mknod vif7 c 14 7
        :
        :
        :

Wie benutzt man virtuelle Ethernet-Schnittstellen?

Erstmal braucht man Einträge in /etc/hosts (und/oder NIS und/oder DNS):
        127.0.0.1       localhost
        192.68.1.1      myhost          # this is my host
        192.68.1.2      othername       # another name for my host
Dann muss man einen arp-Eintrag machen:
        arp -s othername 8:0:20:0:1b:a5 pub
Wichtig: Gerät initialisieren:
        echo >/dev/vif0
Dann kann man es konfigurieren:
        ifconfig vif0 othername up
Fertig!

Probleme

Hat man Probleme mit arp während die virtuellen Geräte in Benutzung sind, muss man sie kurz abschalten:
        ifconfig vif0 down
        arp ...
        ifconfig vif0 up
Wenn man sehen will, ob alles funktioniert, kann man folgendes eingeben:
        netstat -ian
        netstat -rn
        ifconfig -a
        arp -a
Sieht das alles vernünftig aus, kann man mal von einem anderen Rechner aus ein ping oder ein telnet auf die neue Adresse wagen.

Um die Ethnernet-Adresse der eigenen Maschine herauszubekommen, kann man die arp-Tabelle einer anderen Maschine auslesen:

        # ping myhost
        # arp -a
        :
        myhost (123.234.56.78) at 8:0:20:0:1b:a5
        :
                                  ^^^^ here ^^^^

Copyright 1999-2001