Как я могу создать виртуальный интерфейс Ethernet на машине без физического адаптера?

68

У меня есть ультрабук Dell XPS 13, у которого есть Wi-Fi, но нет физического сетевого Ethernet (wlan0, но нет eth0). Мне нужно создать виртуальный адаптер для использования Vagrant с NFS, но я обнаружил, что типичный ifup eth0:1...сбой с ignoring unknown interface eth0:1=eth0:1. Я также пытался создать виртуальный интерфейс против wlan0, но получил тот же результат.

Как я могу создать виртуальный интерфейс на этой машине без физического интерфейса?

STW
источник
Прежде всего, убедитесь, что ваш драйвер, используемый wlan0, поддерживает псевдонимы. Это другое название виртуального интерфейса. Посмотрите, как через мой A к этому Q: unix.stackexchange.com/questions/108396/… . Кстати, вы не можете сделать псевдоним против eth0, если у вас нет этого физического устройства.
SLM
Вы также можете добавить дополнительный IP - адрес с помощью ipкоманды тоже: xmodulo.com/2013/02/...
ОДС

Ответы:

103

Настройка фиктивного интерфейса

Если вы хотите создать сетевые интерфейсы, но у вас нет физического сетевого адаптера, вы можете использовать фиктивный тип связи. Вы можете прочитать больше о них здесь: iproute2 страница Википедии .

Создание eth10

Чтобы создать этот интерфейс, вам сначала нужно убедиться, что у вас загружен фиктивный модуль ядра. Вы можете сделать это так:

$ sudo lsmod | grep dummy
$ sudo modprobe dummy
$ sudo lsmod | grep dummy
dummy                  12960  0 

Теперь, когда драйвер загружен, вы можете создавать любые фиктивные сетевые интерфейсы, которые вам нравятся:

$ sudo ip link set name eth10 dev dummy0

И подтвердите это:

$ ip link show eth10
6: eth10: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    link/ether c6:ad:af:42:80:45 brd ff:ff:ff:ff:ff:ff

Смена MAC

Затем вы можете изменить MAC-адрес, если хотите:

$ sudo ifconfig eth10 hw ether 00:22:22:ff:ff:ff
$ ip link show eth10
6: eth10: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    link/ether 00:22:22:ff:ff:ff brd ff:ff:ff:ff:ff:ff

Создание псевдонима

Затем вы можете создавать псевдонимы поверх eth10.

$ sudo ip addr add 192.168.100.199/24 brd + dev eth10 label eth10:0

И подтвердить их так:

$ ifconfig -a eth10
eth10: flags=130<BROADCAST,NOARP>  mtu 1500
        ether 00:22:22:ff:ff:ff  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ ifconfig -a eth10:0
eth10:0: flags=130<BROADCAST,NOARP>  mtu 1500
        inet 192.168.100.199  netmask 255.255.255.0  broadcast 192.168.100.255
        ether 00:22:22:ff:ff:ff  txqueuelen 0  (Ethernet)

Или используя ip:

$ ip a | grep -w inet
    inet 127.0.0.1/8 scope host lo
    inet 192.168.1.20/24 brd 192.168.1.255 scope global wlp3s0
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
    inet 192.168.100.199/24 brd 192.168.100.255 scope global eth10:0

Удаление всего этого?

Если вы хотите отмотать все это, вы можете выполнить следующие команды:

$ sudo ip addr del 192.168.100.199/24 brd + dev eth10 label eth10:0
$ sudo ip link delete eth10 type dummy
$ sudo rmmod dummy

Рекомендации

SLM
источник
4
Эта команда не работает для меня sudo ip link set name eth10 dev dummy0. Я использовал ip link add dummy0 type dummyи использовал интерфейс dummy0 в следующих командах. Другие команды работали хорошо. Спасибо!
Икром
1
офигенно, это именно то, что мне было нужно для старого lmgrd, который не смог прочитать MAC-адрес с имен новых устройств RHEL 7 (emX вместо ethX)
Thesane
26

Вы можете создавать виртуальные интерфейсы, используя набор инструментов iproute2 .

ip link add veth0 type veth peer name veth1

Это создаст 2 интерфейса, veth0и veth1. Думайте о них как о 2 концах трубы. Любой отправленный трафик veth0выйдет veth1и наоборот.

Если вы хотите, чтобы трафик был направлен, вы можете сделать:

sysctl -w net.ipv4.conf.veth0.forwarding=1

Это скажет ядру переадресовывать трафик, приходящий из veth0(поэтому используйте veth1для используемой конечной точки).

Другой вариант - настроить мост с veth0другим интерфейсом. Тогда любой трафик, поступающий через виртуальный интерфейс, будет направляться в сеть, как если бы ваша машина просто действовала как коммутатор.

Есть много других вещей, которые вы можете делать с этим трафиком (маскировать его, перенаправлять, DNAT и т. Д.), Но это зависит от того, чего вы пытаетесь достичь.

Чтобы снести это:

ip link del veth0
Патрик
источник
Классная штука, но не совсем то, что мне было нужно в этом случае (мне просто нужен был виртуальный интерфейс, чтобы виртуальная машина могла монтировать общий ресурс NFS вместо использования общих файловых ресурсов VBox)
STW
Как установить IP-адрес veth0 в примере?
MURATSPLAT