Как создать виртуальные Ethernet-устройства в Linux?
Я тестирую реализацию протокола, который говорит между двумя компьютерами, использующими ethernet (не IP). Для того, чтобы на самом деле не было двух физических компьютеров, я хочу создать два виртуальных интерфейса Ethernet. Они могли бы только разговаривать друг с другом, поэтому одна конечная программа будет привязываться к одному интерфейсу, а другая конечная точка будет привязываться к другой.
Возможно ли это и как это сделать?
Ответы
Ответ 1
Вы можете использовать виртуальный коммутатор 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
Введите с одной стороны, он появится на другом.
Ответ 2
Вы можете использовать драйвер виртуального Ethernet-соединения "tap", который позволяет программе userpace притворяться интерфейсом Ethernet. Это стандартная функция ядра в течение некоторого времени (возможно, она не включена в вашем ядре).
Ответ 3
Вы можете использовать ns3 для эмуляции сложной сети между двумя устройствами, если вам это нужно: http://www.nsnam.org/
У меня была эмуляция двух коммутаторов, беспроводного клиента и точки доступа, между двумя экземплярами виртуальных машин.
Ответ 4
интерфейсы пользователя
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
Ответ 5
если вы хотите свою собственную подсеть и не хотите пытаться использовать 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
Ответ 6
Вы можете использовать команду vconfig
Пример:
vconfig add eth0 10 #virtual interface eth0.10 will be created
Ответ 7
Возможно, мне не хватает чего-то важного.. но разве это не то, для чего нужен интерфейс loopback (lo)?