2010-01-17 10 views
21

Sto testando un'implementazione di un protocollo che dialoga tra due computer usando ethernet (non IP). Per non dover effettivamente avere due computer fisici, voglio creare due interfacce Ethernet virtuali. Questi sarebbero in grado di comunicare tra loro, quindi un programma endpoint si collegherebbe a un'interfaccia e l'altro si collegherebbe all'altro.Come posso creare dispositivi ethernet virtuali in linux?

È possibile e come si fa?

risposta

21

È possibile utilizzare VDE2, un commutatore virtuale.

Per esempio (avrete bisogno di alcuni termini):

# 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 da un lato, esso apparirà sull'altro.

+0

Questo è semplice ed efficace per ciò di cui ho bisogno, grazie –

+6

Questo esempio non funziona: Tutto il traffico passa attraverso l'interfaccia 'lo' come si può vedere usando 'tcpdump'.Si può inoltre notare che entrambe le interfacce di tocco sono ancora inattive. Dopo averli richiamati, tcpdump funziona sulle interfacce di tocco ma non mostra affatto traffico su di essi. Il kernel di Linux usa la tabella di routing locale (vedi 'ip route show table local') per scoprire che questi IP sono locali e instrada i pacchetti solo localmente, senza usare 'vde_switch'. Detto questo, non ho ancora trovato un modo per creare una connessione socat _through_ vde_switch e toccare le interfacce. –

6

È possibile utilizzare il driver di tocco virtuale Ethernet che consente a un programma di spazio utente di essere un'interfaccia ethernet. Questa è una caratteristica del kernel standard da qualche tempo (potrebbe non essere abilitata nel tuo kernel).

+0

Il modulo si chiama tun. Ma sì, altrimenti, questa risposta è buona. Basta fare un tuning insmod, altrimenti compilare il kernel con il supporto per esso. – Anders

+2

Il modulo si chiama tun, fornisce anche il dispositivo "tap". Vedi la documentazione del kernel/networking/tuntap.txt per l'interfaccia completa dello spazio utente; le interfacce virtuali vengono create usando un ioctl su un dispositivo di carattere/dev/net/tun – MarkR

+0

tun0 è un dispositivo virtuale point-to-point, tap0 è una rete virtuale. Quest'ultimo può essere utilizzato con qualsiasi protocollo, non solo IP – MarkR

2

È possibile utilizzare NS3 per emulare una complessa rete tra due dispositivi rubinetto se ne avete bisogno: http://www.nsnam.org/

ho avuto emulando due interruttori, un client wireless, e un AP, tra due istanze VirtualBox.

2

uomo interfacce uomo ifconfig

basta aggiungere una nuova strofa in/etc/network/interfaces

mia configurazione di esempio:

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

+7

Questo non crea un nuovo dispositivo virtuale, ma configura solo un IP aggiuntivo su un dispositivo fisico. – Flow

+0

@Flow qual è la differenza? Solo curioso? Intendo in termini di conseguenze, non di implementazione. – CMCDragonkai

+1

Ci sono molte conseguenze. Ad esempio, se aggiungi un secondo IP a un'interfaccia fisica connessa, il sistema sarà raggiungibile con questo IP su tale interfaccia fisica da esterno. – Flow

0

È possibile utilizzare il comando vconfig esempio:

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

se si desidera che il proprio sottorete e non vogliono preoccuparsi di usare VDE.

look this. In breve:

# 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

forse mi manca qualcosa di importante .. ma non è questo esattamente ciò che la (lo) interfaccia di loopback è per?

Problemi correlati