Настройка виртуального сетевого интерфейса linux

How to create a virtual network interface in Ubuntu 20.04

A virtual interface is a networking interface, that mimics a physical interface. With the help of virtual interfaces creating virtual machines or containers are possible.

Adding virtual interface.

Adding a virtual interface is a very simple and straight task. This can be done with ip command and with some arguments.

In the below-mentioned command, I have added an interface with the name vr-br.

Adding a non persistent interface

Use the following command to add a nonpersistent interface. In the following command dummy is the kernel module.

sudo ip link add name type dummy

Example of the above command and its verification is shown in the following code section

ubuntu@ubuntu-exp:~$ sudo ip link add name vr-br type dummy ubuntu@ubuntu-exp:~$ ubuntu@ubuntu-exp:~$ ubuntu@ubuntu-exp:~$ ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens3: mtu 1450 qdisc fq_codel state UP group default qlen 1000 link/ether fa:16:3e:6e:46:61 brd ff:ff:ff:ff:ff:ff inet 10.0.1.62/8 brd 10.255.255.255 scope global dynamic ens3 valid_lft 77157sec preferred_lft 77157sec inet6 fe80::f816:3eff:fe6e:4661/64 scope link valid_lft forever preferred_lft forever 3: vr-br: mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 3a:4f:ec:a3:ad:68 brd ff:ff:ff:ff:ff:ff ubuntu@ubuntu-exp:~$

You can then play with the interface and you can also assign IP address to this interface. This type of assignment is not persistent, which means after a reboot of your machine you won’t find a network interface.

Adding a persistent interface and IP address

Adding vr-br.netdev and vr-br.network file in /etc/systemd/network/ directory

sudo touch /etc/systemd/network/vr-br.netdev sudo touch /etc/systemd/network/vr-br.network

The above command when we run in our system.

ubuntu@ubuntu-exp:~$ sudo touch /etc/systemd/network/vr-br.netdev ubuntu@ubuntu-exp:~$ sudo touch /etc/systemd/network/vr-br.network ubuntu@ubuntu-exp:~$ ls /etc/systemd/network/ vr-br.netdev vr-br.network ubuntu@ubuntu-exp:~$

Edit both the files, I have added the following content in these files.

ubuntu@ubuntu-exp:~$ cat /etc/systemd/network/vr-br.network [Match] Name=vr-br [Network] Address=192.168.0.100 Mask=255.255.255.0 ubuntu@ubuntu-exp:~$ ubuntu@ubuntu-exp:~$ ubuntu@ubuntu-exp:~$ cat /etc/systemd/network/vr-br.netdev [NetDev] Name=vr-br Kind=dummy ubuntu@ubuntu-exp:~$

For initializing the configuration you can reboot the system or simply run the below-mentioned commands.

sudo systemctl restart systemd-networkd

For testing check the interface with ip a command

ubuntu@ubuntu-exp:~$ sudo systemctl restart systemd-networkd ubuntu@ubuntu-exp:~$ ubuntu@ubuntu-exp:~$ ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens3: mtu 1450 qdisc fq_codel state UP group default qlen 1000 link/ether fa:16:3e:6e:46:61 brd ff:ff:ff:ff:ff:ff inet 10.0.1.62/8 brd 10.255.255.255 scope global dynamic ens3 valid_lft 86394sec preferred_lft 86394sec inet6 fe80::f816:3eff:fe6e:4661/64 scope link valid_lft forever preferred_lft forever 3: vr-br: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 link/ether 3a:4f:ec:a3:ad:68 brd ff:ff:ff:ff:ff:ff inet 192.168.0.100/24 brd 192.168.0.255 scope global vr-br valid_lft forever preferred_lft forever inet6 fe80::384f:ecff:fea3:ad68/64 scope link valid_lft forever preferred_lft forever ubuntu@ubuntu-exp:~$

Other tools

We can use ifconfig commands to add a new interface and to manage or play with other network configurations. However, for ifconfig command, we need to install the net-tool package in ubuntu. You can use the following command to install the package.

ubuntu@ubuntu-exp:~$ sudo apt install net-tools

Источник

Читайте также:  Rtc time linux изменить

Виртуальный сетевой интерфейс в linux. TAP vs TUN

Читатели, не нуждающиеся в теоретическом изложении концепции виртуальных сетевый интерфейсов Linux, могут сразу перейти к настройке по ссылкам:

Создавать сетевые интерфейсы в linux нам позволяют различные модули ядра. Но там, где для реальных железных сетевых карт эти модули ядра, или как их еще называют — драйверы, обеспечивают прием данных от стека TCP/IP и их формирование уже в виде электрического сигнала на сетевой карте, драйверы виртуальных сетевых интерфейсов (loopback) могут лишь, приняв эти данные, отдать их какому-нибудь приложению для дальнейшей обработки. Такая функциональность может быть востребована, если на вашем сервере установлены программы, использующие стек TCP/IP для обмена данными и, понятно, не нуждающиеся в выводе этих данных в реальную сеть. Пример: веб-сайт на drupal связывается с базой данных, установленной на этом же сервере:

Другим распростаренным примером использования виртуальных сетевых интерфейсов (loopback) в linux может быть их использование для целей построения виртуальных частных сетей — VPN. Вы наверняка слышали о таких технологиях как OpenVPN, GRE, WireGuard и т.д. Каждый из этих демонов создает виртуальный сетевой интерфейс который служит для прозрачной маршрутизации данных между узлами, находящимися на удалении друг от друга и не имеющих возможности прямого взаимодействия. Рассмотрим общую сетевую топологию на примере OpenVPN:

От используемого драйвера зависит тип интерфейса, его скорость, допустимый размер MTU и т. д. Совсем даже не обязательно, что загружать драйвер в ядро вам придется самостоятельно. Скорее всего, создавая интерфейс нужного типа, система сама подберет и загрузит требуемый драйвер. Вам лишь останется сконфигурировать уже работающий loopback интерфейс. В данной статье мы рассмотрим 3 возможных на конец 2016 года типа виртуальных интерфейсов в linux: tun, tap и dummy. Отличие интерфейсов tun и tap заключается в том, что tap старается больше походить на реальный сетевой интерфейс, а именно он позволяет себе принимать и отправлять ARP запросы, обладает MAC адресом и может являться одним из интерфейсов сетевого моста, так как он обладает полной поддержкой ethernet — протокола канального уровня (уровень 2). Интерфейс tun этой поддержки лишен, поэтому он может принимать и отправлять только IP пакеты и никак не ethernet кадры. Он не обладает MAC-адресом и не может быть добавлен в бридж. Зато он более легкий и быстрый за счет отсутствия дополнительной инкапсуляции и прекрасно подходит для тестирования сетевого стека или построения виртуальных частных сетей (VPN). Виртуальный интерфейс типа dummy очень похож на tap, разница лишь в том, что он реализуется другим модулем ядра.

Читайте также:  Oki mb472 linux driver

Создаем виртуальный интерфейс в linux вручную

Создавать и удалять интерфейсы, назначать IP и MAC адреса, изменять MTU и многое другое нам помогает утилита ip. Пользоваться ip удобно и легко, но помните, что произведенные изменения будут потеряны после перезагрузки компьютера. Используйте ip в целях тестирования.

Создаем интерфейс типа tun

ip tuntap add dev tun0 mode tun
ip address add 192.168.99.1/30 dev tun0
ip address show tun0
2: tun0: mtu 1500 qdisc noop state DOWN group default qlen 500
link/none
inet 192.168.99.1/30 scope global tun0
valid_lft forever preferred_lft forever

Как видим у нас теперь есть виртуальный интерфейс с именем «tun0», у него есть IP-адрес, и ни слова о MAC-адресе — всё, как мы и рассчитывали. Его уже можно пинговать, и на нем уже можно запускать слушающие сервисы. Но что будет, если мы попытаемся добавить этот интерфейс в бридж?

ip link set dev tun0 master br0
RTNETLINK answers: Invalid argument

Команда ip логичным образом выдала ошибку — нет никакого смысла добавлять в бридж интерфейс, не обладающий поддержкой ethernet.

Создаем интерфейс типа tap

ip tuntap add dev tap0 mode tap
ip address add 192.168.99.5/30 dev tap0
ip address show tap0
3: tap0: mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether d6:1c:67:cd:6f:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.99.5/30 scope global tap0
valid_lft forever preferred_lft forever

У нас теперь появился новый виртуальный интерфейс с именем «tap0», у него есть как IP-адрес, так и MAC-адреса. Его также можно пинговать, и на нем также можно запускать слушающие сервисы. Команда, добавляющая интерфейс в бридж уже не выдаст ошибку, потому что это интерфейс, обладающий поддержкой ethernet:

ip link set dev tap0 master br0

Создаем интерфейс типа dummy

ip link add dev dum0 type dummy
ip address add 192.168.99.9/30 dev dum0
ip address show dum0
4: dum0: mtu 1500 qdisc noop master br0 state DOWN group default qlen 1000
link/ether 1a:37:3b:0f:da:be brd ff:ff:ff:ff:ff:ff
inet 192.168.99.9/30 scope global dum0
valid_lft forever preferred_lft forever

Вы наверняка заметили, что команда для добавления интерфейса изменилась. Ничего необычного. Так написана утилита «ip». Ну и конечно, виртуальный интерфейс типа dummy можно легко добавить в бридж:

ip link set dev dum0 master br0

Создаем виртуальный интерфейс в linux с помощью systemd-networkd

В systemd-networkd за создание интерфейсов отвечают одни конфигурационные файлы, имеющие суффикс «.netdev», а за их настройку другие, имеющие суффикс «.network». Соответственно нам понадобиться в /etc/systemd/network создать по паре конфигурационных файлов для каждого из исследуемых типов интерфейсов

Создаем интерфейс типа tun

Создадим соответственно файлы tun0.netdev с содержимым:

Создаем интерфейс типа tap

Создадим соответственно файлы tap0.netdev с содержимым:

Создаем интерфейс типа dummy

Создадим соответственно файлы dum0.netdev с содержимым:

[NetDev]
Name=dum0
Kind=dummy

Читайте также:  Gcc arm linux gnueabi build

Стоит отметить, что если вы планируете маршрутизировать траффик через виртуальные интерфейсы ( а, используя их для цели создания виртуальных частных сетей (VPN), вы точно этого хотите), то в конфигурационный файл в секии «Network» следует добавить диррективу «IPForward=yes».

Источник

Creating a Virtual Network Interface in Debian

There are times when you might want to assign more than one IP to a system, even if it only has a single physical NIC. This documentation details how to create a virtual network interface (known as aliasing) under Debian (see here for how to alias in Centos 6).

We’ll assume that your NIC is eth0, if not then simply use the name of your network interface.

You should see an entry similar to one of the following

auto eth0
iface eth0 inet dhcp

# OR
iface eth0 inet manual
address 192.168.1.252
netmask 255.255.255.0
gateway 192.168.1.254

Taking the settings from above, we can create the virtual interface by doing the following

nano /etc/network/interfaces

# Add the following
auto eth0:1
allow-hotplug eth0:1
iface eth0:1 inet static
address 192.168.1.248
netmask 255.255.255.0
gateway 192.168.1.254

# Ctrl-X, Y to Save and exit

The configuration above creates a new interface — eth0:1 and sets a static IP of 192.168.1.248. To apply the changes, we simply need to restart networking

service networking restart

It’s that simple, now you should be able to see the interface

ifconfig 
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:129 errors:0 dropped:0 overruns:0 frame:0
TX packets:129 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:16247 (15.8 KiB) TX bytes:16247 (15.8 KiB)

eth0 Link encap:Ethernet HWaddr b8:27:eb:a2:0e:62
inet addr:192.168.1.252 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:902097 errors:0 dropped:0 overruns:0 frame:0
TX packets:432782 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:203759013 (194.3 MiB) TX bytes:71615701 (68.2 MiB)

eth0:1 Link encap:Ethernet HWaddr b8:27:eb:a2:0e:62
inet addr:192.168.1.248 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

We can see the interface is up and running, and should be able to ping the IP that we’ve added

Using a Different Subnet

If we wanted to add an IP on a different subnet (say 10.10.10.5/30), the initial steps are exactly the same

nano /etc/network/interfaces

# Add the following
auto eth0:1
allow-hotplug eth0:1
iface eth0:1 inet static
address 10.10.10.7
netmask 255.255.255.252
gateway 10.10.10.6

# Ctrl-X, Y to Save and exit

The only additional step would be making sure that clients on the LAN know how to route to it. For this, we need to add a static route (either to the other LAN clients, or on the router itself) using the IP of the physical NIC as a gateway

route add -net 10.10.10.7 netmask 255.255.255.252 gw 192.168.1.252
# Or
route add -net 10.10.10.7/32 gw 192.168.1.252

Obviously, depending on your network setup there may be a gateway that needs to know instead (in the example above we used a /30, so there’s a second IP free for the gateway there)

Источник

Оцените статью
Adblock
detector