Create virtual interface linux

How to create a virtual network interface in Ubuntu?

I’m testing a network program on Ubuntu. Is there any way to create a virtual network interface in Ubuntu. Something like lo is good, but unfortunately there is bunch of packets on lo with 127.0.0.1 as source and destination IP addrress.

2 Answers 2

USE CASE: To create a persistent VIP address in a server to function as a ‘loopback’ address

Change to /etc/systemd/network/ directory

user@server:~$ cd /etc/systemd/network/ 

Create two files, ‘vip.netdev’ and ‘vip.network’

user@server:/etc/systemd/network$ touch vip.netdev vip.network 

Show the newly created files

user@server:/etc/systemd/network$ ls vip.netdev vip.network 

Edit the two files with your favorite editor to reflect the detail below

user@server:/etc/systemd/network$ more vip.netdev [NetDev] Name=vip Kind=dummy 
user@server:/etc/systemd/network$ more vip.network [Match] Name=vip [Network] Address=172.16.1.23 (or whatever address you so choose) Mask=255.255.255.255 Broadcast=172.16.1.255 (match the Address x.x.x.255) 

Enable the newly created VIP interface w/out rebooting the server

user@server:/etc/systemd/network$ systemctl restart systemd-networkd 

Show the newly create VIP interface

user@server:/etc/systemd/network$ ifconfig ens33: flags=4163 mtu 1500 inet 172.16.1.16 netmask 255.255.255.0 broadcast 172.16.1.255 inet6 fe80::20c:29ff:fe9b:703f prefixlen 64 scopeid 0x20 ether 00:0c:29:9b:70:3f txqueuelen 1000 (Ethernet) RX packets 244 bytes 32605 (32.6 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 653 bytes 51807 (51.8 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 411 bytes 66247 (66.2 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 411 bytes 66247 (66.2 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vip: flags=195 mtu 1500 inet 172.16.1.23 netmask 255.255.0.0 broadcast 172.16.255.255 inet6 fe80::d0a7:56ff:fe83:95ff prefixlen 64 scopeid 0x20 ether d2:a7:56:83:95:ff txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 7 bytes 490 (490.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 
user@server:/etc/systemd/network$ 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: ens33: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:9b:70:3f brd ff:ff:ff:ff:ff:ff inet 172.16.1.16/24 brd 172.16.1.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe9b:703f/64 scope link valid_lft forever preferred_lft forever 3: vip: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 link/ether d2:a7:56:83:95:ff brd ff:ff:ff:ff:ff:ff inet 172.16.1.23/16 brd 172.16.255.255 scope global vip valid_lft forever preferred_lft forever inet6 fe80::d0a7:56ff:fe83:95ff/64 scope link valid_lft forever preferred_lft forever 

Источник

Читайте также:  Samba linux valid users

Виртуальный сетевой интерфейс в 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, разница лишь в том, что он реализуется другим модулем ядра.

Читайте также:  Linux user already exists

Создаем виртуальный интерфейс в 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:

Читайте также:  Linux odt to docx

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

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

Источник

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