linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Сеть: L2 / L3/veth-pair

kb/network-l2-l3 ── Сеть: L2 / L3 ── advanced

veth pair

veth-pair - два связанных виртуальных Ethernet-интерфейса. Что заходит в один конец - выходит из другого. Базовый кирпич всех Linux-контейнерных сетей.

view as markdownaka: veth, virtual-ethernet

Зачем нужны

В Linux сетевая карта живёт в одном namespace (см. namespaces). Чтобы подключить контейнер (свой netns) к чему угодно - нужен «провод». veth - этот провод: пара синтетических интерфейсов, физически связанных. Что прилетает в один - мгновенно выходит из другого.

Создаётся одной командой:

bash
sudo ip link add veth0 type veth peer name veth1

После этого в default-netns появляются два интерфейса. Один из них оставляют в host-netns (часто bridge'ат), второй кладут в namespace контейнера:

bash
sudo ip netns add container
sudo ip link set veth1 netns container

Теперь:

  • veth0 - на хосте, видим в ip link
  • veth1 - внутри netns container, виден через ip netns exec container ip link

Подняв оба и выдав IP, получаем рабочий канал:

bash
sudo ip addr add 10.0.0.1/24 dev veth0
sudo ip link set veth0 up
sudo ip netns exec container ip addr add 10.0.0.2/24 dev veth1
sudo ip netns exec container ip link set veth1 up

Ping 10.0.0.2 с хоста - пройдёт.

Как это используют контейнерные платформы

Docker / CRI-O / containerd / Kubernetes делают то же самое за тебя:

  1. Создают veth-pair при запуске контейнера
  2. Один конец подключают к bridge на хосте (docker0, cni0)
  3. Второй кладут в pod/container netns
  4. Дают IP из подсети bridge'а
  5. Прописывают default route в контейнере на IP bridge'а

Когда два контейнера на одном хосте говорят друг с другом - пакеты идут через bridge на хосте: container1 → veth-pair → bridge → veth-pair → container2.

Когда контейнер шлёт наружу - пакет проходит через bridge → host-routing → внешний интерфейс (с nat на masquerade).

Имена и счётчики

Имена обычно генерируются (vethXXXXXX@if13). Цифра после @if - ifindex другого конца.

bash
ip -br link | grep ^veth
# vethabc123@if5  UP  fe:80:42:...

Счётчики на каждом конце симметричны:

bash
ip -s link show veth0
# покажет rx/tx packets/bytes

Альтернативы

  • macvlan - даёт контейнеру собственный MAC на физическом интерфейсе, без bridge. Быстрее, но «выходит» в L2-сеть как отдельный device.
  • ipvlan - то же что macvlan, но shared MAC, разделение по IP
  • VXLAN / GENEVE - overlay-сети для multi-host сценариев (k8s flannel, calico)

§ команды

bash
sudo ip link add veth0 type veth peer name veth1

Создать veth-pair. Сразу появляются ОБА интерфейса

bash
sudo ip link set veth1 netns container

Перенести один конец в другой network namespace

bash
ip -br link | grep '@if'

Список всех veth-интерфейсов с ifindex другого конца

bash
sudo ip link delete veth0

Удалить veth-pair (удаление одного конца удаляет и второй)

§ см. также

  • namespacesLinux namespacesNamespaces - механизм ядра, который даёт процессу собственный изолированный view на ресурс (сеть, mount-points, PID, UID, IPC, hostname, time). На них построены все контейнеры.
  • ethernet-frameEthernet frameEthernet-frame - единица передачи на L2: dst-MAC, src-MAC, ethertype, payload (обычно IP-пакет), FCS-checksum. Стандартный MTU = 1500 байт.
  • linux-bridgeLinux bridge - программный свитчBridge - программный L2-свитч в ядре Linux. Учит MAC в FDB, форвардит фреймы между интерфейсами. Основа Docker default network, KVM bridge, libvirt. С vlan_filtering эмулирует управляемый свитч.
  • ebpf-xdpeBPF XDP - kernel data-planeXDP - eBPF-программа на самом раннем RX-hook (до skb_alloc). Actions: DROP, PASS, TX, REDIRECT. Native-mode в драйвере, generic в стеке. AF_XDP - zero-copy в userspace. Use cases - DDoS-фильтр, L4 load balancer, cilium kube-proxy.
  • cni-pluginsCNI plugins - сеть Kubernetes (calico, cilium, flannel)CNI - спека плагина: дай pod IP и сеть. Реализации: flannel (VXLAN L2-overlay), calico (BGP routing), cilium (eBPF в kernel). Каждая даёт NetworkPolicy для firewall'а между подами. IPAM - часть CNI, выделяет адреса.

§ упоминается в уроках

  • ›advanced-01-namespaces
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки