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

Вы могли бы смотреть на nc (1), сетевой своего рода швейцарский нож.

72
22.07.2018, 06:50
3 ответа

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

Если вы хотите создать сетевые интерфейсы, но не хватает физической сетевой карты для поддержки вы можете использовать фиктивный тип ссылки. Вы можете прочитать о них подробнее здесь: 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

Ссылки

107
27.01.2020, 19:31

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

ip link add veth0 type veth peer name veth1

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

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

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

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

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

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

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

ip link del veth0
27
27.01.2020, 19:31

Протестировано на Ubuntu 18.04:

1. Основы:

# 1. Install the "dummy" Linux kernel module.
sudo modprobe dummy
# 2. Ensure the "dummy" Linux kernel module is installed.
sudo lsmod | grep dummy
# 3. Create a virtual (dummy) interface named `eth10`.
sudo ip link add eth10 type dummy
# 4. Change this new interface's IP address to whatever you like
# (10.0.0.1 in this case).
sudo ip address change dev eth10 10.0.0.1
# 5. See the newly-created device and the IP address you just
# assigned to it.
ip address

Вот именно!

И если вам когда-нибудь понадобится удалить это устройство:

# 6. Delete this `eth10` dummy device you created.
sudo ip link delete eth10 type dummy
# 7. Ensure 'eth10' is deleted and doesn't show up here now.
ip address

Готово!

2. Подробнее

lsmodпоказывает «состояние модулей в ядре Linux» (, см. man lsmod). Попробуйте! Просто введите

lsmod

Один из модулей называется dummy. Посмотрим, не там ли:

$ lsmod | grep dummy
dummy                  16384  0

Да, это там. Хорошо. Этот модуль ядра Linux должен присутствовать , чтобы вы могли запустить команду sudo ip link add eth10 type dummyвыше для создания виртуального интерфейса с помощью модуля ядра dummy. Если у вас его нет, см. ответ @slm .

Прежде чем создавать новый виртуальный интерфейс, запустите это, чтобы увидеть, какие IP-адреса и интерфейсы у вас уже есть:

ip address

Вы также можете взглянуть на это:

ifconfig

После того, как вы создали новый виртуальный интерфейс, вы увидите его в выводе команды ip addressвыше. Примечание:ifconfigможет не отображать созданное вами виртуальное фиктивное устройство, но ip addressбудет.


Подождите, но мой коллега пробежал sudo ip addr change dev eth10 10.0.0.1, вместоsudo ip address change dev eth10 10.0.0.1(уведомление addrвместоaddress). Или, может быть, они использовалиsudo ip a change dev eth10 10.0.0.1(уведомление aвместоaddress). Что с этим делать!?

Что ж, этой конкретной команде требуется достаточное количество символов, чтобы убедиться, что она знает, что вы имеете в виду. Другими словами, как только в команде будет достаточно символов, чтобы понять, что вы не можете иметь в виду никакую другую команду, она принимает ее. Поскольку никакая другая подкоманда после ipне начинается с буквы a, достаточно ip a. Следовательно, все приведенные ниже команды эквивалентны:

ip address
ip addres
ip addre
ip addr
ip add
ip ad
ip a

Просто помните об этих странных вещах при обмене информацией и просмотре helpменю и manстраниц (, показанных в моих ссылках ниже ). Иначе будешь вся в замешательстве, как и я,когда, как бы вы ни искали, вы не можете найти команды a(, как в ip a), или addr(, как в ip addr), перечисленные где-либо на этой странице. Просто поймите, что оба они сокращены от address. Ах... теперь на страницах справки есть !

$ ip help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
                   netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |
                   vrf | sr }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec |
                    -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } | -br[ief] |
                    -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}

Иip address help(или man ip address), , чтобы увидеть существование команды ip address change!:

$ ip address help
Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]
                                                      [ CONFFLAG-LIST ]
       ip address del IFADDR dev IFNAME [mngtmpaddr]
       ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]
                            [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]
       ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]
                         [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]
                         [ label LABEL ] [up] [ vrf NAME ] ]
       ip address {showdump|restore}
IFADDR := PREFIX | ADDR peer PREFIX
          [ broadcast ADDR ] [ anycast ADDR ]
          [ label IFNAME ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG  := [ permanent | dynamic | secondary | primary |
           [-]tentative | [-]deprecated | [-]dadfailed | temporary |
           CONFFLAG-LIST ]
CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG
CONFFLAG  := [ home | nodad | mngtmpaddr | noprefixroute | autojoin ]
LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]
LFT := forever | SECONDS
TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |
          bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |
          gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |
          nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |
          hsr | macsec

Ссылки:

  1. Ответ @slm здесь
  2. ip help
  3. man ip
  4. ip link help
  5. man ip link
  6. ip address help
  7. man ip address

Связанные:

  1. [мой ответ] AskUbuntu :Как включить/отключить сеть (Ethernet или Wi-Fi )устройства, произвольно
3
16.06.2020, 01:26

Теги

Похожие вопросы