web-dev-qa-db-fra.com

Comment créer des périphériques Ethernet virtuels sous Linux?

Je teste une implémentation d'un protocole qui parle entre deux ordinateurs en utilisant Ethernet (pas IP). Afin de ne pas avoir réellement besoin de deux ordinateurs physiques, je souhaite créer deux interfaces Ethernet virtuelles. Ceux-ci ne peuvent que se parler, de sorte qu'un programme de point de terminaison se lie à une interface et l'autre point de liaison à l'autre.

Est-ce possible et comment je le fais?

22
Greg Rogers

Vous pouvez utiliser VDE2, un commutateur virtuel.

Par exemple (vous aurez besoin de quelques termes):

# 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

Tapez d'un côté, il apparaîtra de l'autre.

21
Tobu

Vous pouvez utiliser le pilote Ethernet virtuel "tap" qui permet à un programme utilisateur de se faire passer pour une interface Ethernet. Il s’agit d’une fonctionnalité du noyau standard depuis un certain temps (elle ne sera peut-être pas activée dans votre noyau).

6
MarkR

Vous pouvez utiliser ns3 pour émuler un réseau complexe entre deux appareils de prise en charge si vous en avez besoin: http://www.nsnam.org/

Je l'ai vu émuler deux commutateurs, un client sans fil et un AP, entre deux instances de virtualbox.

2
Andrew McGregor

si vous voulez votre propre sous-réseau et que vous ne voulez pas utiliser vde.

regardez this . En bref:

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

Ou avec 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
1
Alex

man interfacesman ifconfig

ajoutez simplement une nouvelle strophe dans/etc/network/interfaces

mon exemple de configuration:

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 a ip 192.168.2.150 alors que eth0: 1 a 192.168.2.2

1
Tiago Geada

Peut-être qu'il me manque quelque chose d'important .. mais n'est-ce pas exactement à quoi sert l'interface de bouclage (lo)? 

0

Vous pouvez utiliser la commande vconfig Exemple:

vconfig add eth0 10 #virtual interface eth0.10 will be created
0
user3308297