2010-01-17 14 views
21

Estoy probando una implementación de un protocolo que habla entre dos computadoras usando ethernet (no IP). Para no tener que tener dos computadoras físicas, quiero crear dos interfaces virtuales de ethernet. Estos solo podrían comunicarse entre sí, por lo que un programa de punto final se vincularía a una interfaz y el otro extremo se uniría a la otra.¿Cómo creo dispositivos virtuales de Ethernet en Linux?

¿Es esto posible y cómo lo hago?

Respuesta

21

Puede usar VDE2, un conmutador virtual.

Por ejemplo (necesitará algunos términos):

# 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 

Tipo en un lado, que aparecerá en el otro.

+0

Esto es simple y efectivo para lo que necesito, gracias –

+6

Este ejemplo no funciona: Todo el tráfico pasa por la interfaz 'lo' como se puede ver al usar 'tcpdump'.También puede observar que ambas interfaces de tap están todavía inactivas. Después de mostrarlos, tcpdump funciona en las interfaces de toma, pero no muestra tráfico en absoluto. El kernel de Linux usa su tabla de enrutamiento local (ver 'ip route show table local') para descubrir que estas IP son locales y solo enruta los paquetes localmente, sin usar 'vde_switch'. Habiendo dicho todo eso, aún no he encontrado una forma de hacer una conexión de socat _through_ vde_switch y pulse interfaces. –

6

Puede usar el controlador virtual de "tocar" que permite que un programa de espacio de usuario simule ser una interfaz de ethernet. Esta es una característica estándar del kernel desde hace algún tiempo (aunque puede que no esté habilitada en su kernel).

+0

El módulo se llama tun. Pero sí, de lo contrario, esta respuesta es buena. Solo haga una instalación incorrecta, de lo contrario compilará el kernel con soporte para ello. – Anders

+2

El módulo se llama tun, también proporciona el dispositivo "tap". Consulte la Documentation/networking/tuntap.txt del kernel para conocer la interfaz completa del espacio de usuario; las interfaces virtuales se crean utilizando un ioctl en un dispositivo de caracteres/dev/net/tun – MarkR

+0

tun0 es un dispositivo punto a punto virtual, tap0 es un ethernet virtual. Este último se puede usar con cualquier protocolo, no solo IP – MarkR

2

Puede utilizar NS3 para emular una complicada red entre dos dispositivos de derivación, si lo necesita: http://www.nsnam.org/

lo he tenido que emula dos interruptores, un cliente inalámbrico, y un punto de acceso, entre dos instancias de VirtualBox.

2

man interfaces hombre ifconfig

sólo tiene que añadir una nueva estrofa en/etc/network/interfaces

mi ejemplo de configuración:

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 tiene ip 192.168 .2.150 mientras eth0: 1 tiene 192.168.2.2

+7

Esto no crea un nuevo dispositivo virtual, solo configura una IP adicional en un dispositivo físico. – Flow

+0

@Flow ¿cuál es la diferencia? ¿Sólo curioso? Me refiero en términos de consecuencias, no de implementación. – CMCDragonkai

+1

Hay muchas consecuencias. Por ejemplo, si agrega una segunda IP a una interfaz física conectada, entonces el sistema será accesible bajo esta IP a través de esa interfaz física desde el exterior. – Flow

0

Puede utilizar el comando vconfig ejemplo:

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

si desea que su propia subred y no quiere molestar a usar VDE.

mira this. En resumen:

# 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) 

O con 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

Tal vez me falta algo importante .. pero no es esto exactamente lo que la (lo) interfaz de bucle es para?

Cuestiones relacionadas