Вы могли бы смотреть на nc (1), сетевой своего рода швейцарский нож.
Если вы хотите создать сетевые интерфейсы, но не хватает физической сетевой карты для поддержки вы можете использовать фиктивный тип ссылки. Вы можете прочитать о них подробнее здесь: iproute2 Страница Википедии .
Чтобы создать этот интерфейс, вам сначала нужно убедиться, что у вас загружен фиктивный модуль ядра. Вы можете сделать это так:
$ 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-адрес, если вам нравится:
$ 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
Вы можете создавать виртуальные интерфейсы с помощью инструментария 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
Протестировано на Ubuntu 18.04:
# 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
Готово!
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
ip help
man ip
ip link help
man ip link
ip address help
man ip address