TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.52K subscribers
Post #654 430
veth - как Linux соединяет два network namespace

Network namespace изолирует сетевой стек процесса. У каждого namespace могут быть свои интерфейсы, маршруты и таблица соседей.

Но как соединить два таких изолированных сетевых мира?

Для этого в Linux есть veth pair - виртуальный Ethernet-кабель с двумя концами.

▪️Создаём два namespace

ip netns add ns1
ip netns add ns2


Теперь создаём пару:

ip link add veth1 type veth peer name veth2


Получили:

veth1 <──────────> veth2


То, что отправлено в один конец, появляется на другом.

▪️Разносим концы по namespace

ip link set veth1 netns ns1
ip link set veth2 netns ns2


Теперь:

namespace ns1        namespace ns2

veth1 <──────────> veth2


В каждом namespace находится только свой конец виртуального кабеля.

▪️Назначаем адреса

ip -n ns1 addr add 10.10.0.1/24 dev veth1
ip -n ns2 addr add 10.10.0.2/24 dev veth2

ip -n ns1 link set veth1 up
ip -n ns2 link set veth2 up


Теперь можно проверить связь:

ip netns exec ns1 ping 10.10.0.2


Пакет проходит примерно так:

process
↓
network stack ns1
↓
veth1
↓
veth2
↓
network stack ns2
↓
process


Никакого физического интерфейса между namespace здесь нет.

▪️Почему это используется в контейнерах

Контейнер получает собственный network namespace.
Один конец veth помещается внутрь контейнера:

container
eth0
│
│ veth
│
host


Второй конец остаётся на host и обычно подключается к Linux bridge.
Например:

container eth0
│
veth
│
bridge
├── veth
├── veth
└── host


Так несколько изолированных namespace получают доступ к одной L2-сети.

▪️Проверяем, где находится интерфейс
На host:

ip link


В namespace:

ip -n ns1 link


Можно увидеть, что veth1 и veth2 физически не существуют как один интерфейс — это два связанных виртуальных endpoint’а.

▪️Важный нюанс
veth сам по себе не маршрутизирует трафик.
Он просто соединяет два сетевых пространства на уровне Ethernet.
Если нужно выйти из namespace в интернет, поверх veth обычно добавляют bridge, routing, NAT или другой сетевой механизм.

То есть veth - это буквально виртуальный кабель:

namespace A
│
veth A
│
└──────── veth B
│
namespace B


А уже дальше Linux решает, куда отправлять пакеты.

BashTex 📱 #bash #systemd
  • 👍 6
  • 🔥 1
More from @bash_tex
  1. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  2. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  3. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  4. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  5. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
  6. Sep 29, 2026tee + process substitution: один поток и несколько получателей Иногда нужно одновременно:…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →