Створюємо loopback інтерфейс в linux, hippolab - блог системного адміністратора

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

Створюємо loopback інтерфейс в linux, hippolab - блог системного адміністратора

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

Створюємо loopback інтерфейс в linux, hippolab - блог системного адміністратора

Створюємо віртуальний інтерфейс в linux вручну

Створюємо інтерфейс типу 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

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

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 з вмістом:

[NetDev]
Name = tun0
Kind = tun

Створюємо інтерфейс типу tap