2010-01-17 7 views
21

Ich teste eine Implementierung eines Protokolls, das zwischen zwei Computern über Ethernet kommuniziert (nicht IP). Um nicht wirklich zwei physische Computer zu haben, möchte ich zwei virtuelle Ethernet-Schnittstellen erstellen. Diese wären nur in der Lage, miteinander zu sprechen, so dass ein Endpunktprogramm an eine Schnittstelle binden würde und der andere Endpunkt sich an die andere binden würde.Wie erstelle ich virtuelle Ethernet-Geräte in Linux?

Ist das möglich und wie mache ich das?

Antwort

21

Sie können VDE2, einen virtuellen Switch verwenden.

Zum Beispiel (Sie werden einige Begriffe müssen):

# Install vde2 (assumes Debian/Ubuntu) 
sudo aptitude install vde2 
# Create the switch and two tap interfaces attached to it 
sudo vde_switch -tap tap0 -tap tap1 
# Configure the interfaces 
sudo ip addr add 10.0.31.10 dev tap0 
sudo ip addr add 10.0.31.11 dev tap1 
# Start a server 
socat - TCP-LISTEN:4234,bind=10.0.31.10 
# Alternatively, an echo server: 
#socat PIPE TCP-LISTEN:4234,bind=10.0.31.10 
# Start a client 
socat - TCP:10.0.31.10:4234,bind=10.0.31.11 

Typ auf der einen Seite, auf der anderen erscheinen.

+0

Das ist einfach und effektiv für das, was ich brauche, danke –

+6

Dieses Beispiel funktioniert nicht: Der gesamte Datenverkehr läuft über die 'lo'-Schnittstelle, wie mit' tcpdump 'gesehen werden kann.Möglicherweise stellen Sie auch fest, dass beide Tap-Schnittstellen noch nicht aktiv sind. Nach dem Aufrufen arbeitet tcpdump auf den Tap-Interfaces, zeigt aber überhaupt keinen Traffic auf ihnen. Der Linux-Kernel verwendet die lokale Routing-Tabelle (siehe 'ip route show table local'), um herauszufinden, dass diese IPs lokal sind und die Pakete nur lokal routen, ohne 'vde_switch' zu verwenden. Nachdem ich all das gesagt habe, habe ich noch keinen Weg gefunden, eine socat-Verbindung _through_ vde_switch herzustellen und Schnittstellen zu antippen. –

6

Sie können den "tap" virtuellen Ethernet-Treiber verwenden, der ein Programm im Benutzerbereich so tun lässt, als sei es eine Ethernet-Schnittstelle. Dies ist eine Standard-Kernel-Funktion für einige Zeit (es ist möglicherweise nicht in Ihrem Kernel aktiviert).

+0

Das Modul heißt tun. Aber ja, sonst ist diese Antwort gut. Tun Sie einfach einen insmod tun, andernfalls kompilieren Sie den Kernel mit Unterstützung dafür. – Anders

+2

Das Modul heißt tun, es stellt auch das "tap" -Gerät zur Verfügung. Informationen zur vollständigen Benutzeroberfläche finden Sie in der Dokumentation/networking/tuntap.txt des Kernels. Virtuelle Schnittstellen werden mit einem ioctl auf einem Zeichengerät erstellt/dev/net/tun – MarkR

+0

tun0 ist ein virtuelles Punkt-zu-Punkt-Gerät, tap0 ist ein virtuelles Ethernet. Letzteres kann mit jedem Protokoll verwendet werden, nicht nur IP – MarkR

2

Sie ns3 verwenden können, ein kompliziertes Netzwerk zwischen zwei Tap-Geräten zu emulieren, wenn Sie sie brauchen: http://www.nsnam.org/

Ich habe es zwei Schalter emulieren, ein WLAN-Client und eine AP, zwischen zwei Virtualbox-Instanzen.

2

Mann Schnittstellen Mann ifconfig

gerade eine neue Strophe in/etc/network/interfaces

mein Beispiel-Konfiguration hinzufügen:

iface eth0 inet static 
    address 192.168.2.150 
    netmask 255.255.255.0 
    network 192.168.2.0 
    broadcast 192.168.2.255 
    gateway 192.168.2.253 
    # dns-* options are implemented by the resolvconf package, if installed 
    dns-nameservers 8.8.4.4 


iface eth0:1 inet static 
    address 192.168.2.2 
    netmask 255.255.255.0 
    network 192.168.2.0 
    broadcast 192.168.2.255 
    gateway 192.168.2.253 
    # dns-* options are implemented by the resolvconf package, if installed 
    dns-nameservers 8.8.4.4 

-

eth0 hat ip 192.168 .2.150 während eth0: 1 hat 192.168.2.2

+7

Dies erstellt kein neues virtuelles Gerät, es konfiguriert nur eine zusätzliche IP auf einem physischen Gerät. – Flow

+0

@Flow was ist der Unterschied? Nur neugierig? Ich meine in Bezug auf Konsequenzen, nicht Umsetzung. – CMCDragonkai

+1

Es gibt viele Konsequenzen. Wenn Sie beispielsweise eine zweite IP-Adresse zu einer verbundenen physischen Schnittstelle hinzufügen, ist das System unter dieser IP-Adresse über diese physische Schnittstelle von extern erreichbar. – Flow

0

Sie können den vconfig Befehl Beispiel verwenden:

vconfig add eth0 10 #virtual interface eth0.10 will be created 
1

wenn Sie Ihr eigenes Subnetz wollen und wollen nicht stören vde zu verwenden.

Blick auf this. Kurz gesagt:

# tunctl -t eth0 
Set 'eth0' persistent and owned by uid 0 
# ifconfig eth0 
eth0  Link encap:Ethernet HWaddr a6:9b:fe:d8:d9:5e 
     BROADCAST MULTICAST MTU:1500 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:500 
     RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

Oder mit ip:

# ip tuntap add dev eth0 mode tap 
# ip link ls dev eth0 
    7: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 500 
    link/ether 0e:55:9b:6f:57:6c brd ff:ff:ff:ff:ff:ff 
0

Vielleicht etwas Wichtiges .. Ich bin fehlt, ist aber nicht genau das, was die Loopback (lo) Schnittstelle für ist?

Verwandte Themen