Как создать виртуальные устройства Ethernet в Linux? - PullRequest
22 голосов
/ 18 января 2010

Я тестирую реализацию протокола, который общается между двумя компьютерами, используя Ethernet (не IP). Чтобы фактически не иметь двух физических компьютеров, я хочу создать два виртуальных интерфейса Ethernet. Они смогут общаться только друг с другом, поэтому одна программа конечной точки будет привязана к одному интерфейсу, а другая конечная точка - к другому.

Возможно ли это и как мне это сделать?

Ответы [ 7 ]

21 голосов
/ 18 января 2010

Вы можете использовать виртуальный коммутатор VDE2.

Например (вам понадобится несколько терминов):

# 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

Напечатайте с одной стороны, оно появится с другой.

6 голосов
/ 18 января 2010

Вы можете использовать виртуальный драйвер Ethernet «tap», который позволяет программе пользовательского пространства притворяться интерфейсом Ethernet. Некоторое время это стандартная функция ядра (хотя она может быть не включена в вашем ядре).

2 голосов
/ 18 января 2010

Вы можете использовать ns3 для эмуляции сложной сети между двумя подключенными устройствами, если вам это нужно: http://www.nsnam.org/

У меня была эмуляция двух коммутаторов, беспроводного клиента и точки доступа между двумя экземплярами virtualbox.

1 голос
/ 03 марта 2014

, если вы хотите собственную подсеть и не хотите использовать vde.

посмотрите на это . Короче говоря:

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

Или с 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 голос
/ 28 февраля 2011

человек интерфейсы man ifconfig

просто добавьте новый раздел в / etc / network / interfaces

мой пример конфигурации:

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 есть ip 192.168.2.150, а у eth0: 1 192.168.2.2

0 голосов
/ 01 апреля 2015

Может быть, я упускаю что-то важное ... но разве это не то, для чего предназначен интерфейс loopback (lo)?

0 голосов
/ 14 февраля 2014

Вы можете использовать команду vconfig Пример:

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