С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Пара veth и сетевые пространства имён

5 мин Ubuntu 24.04 · iproute2

Пара veth — два виртуальных интерфейса, соединённых как кабель; ими связывают сетевые пространства имён.

Шпаргалка

9 команд Версия для печати
  • sudo ip netns add lab-client новое пространство имён
  • ip netns list какие пространства есть
  • sudo ip -n lab-client address add 192.0.3.10/24 dev lab0
  • sudo ip netns exec lab-client ping -c 2 192.0.2.1 программа там
  • sudo ip netns delete lab-client удалить с концом пары

Обзор

Сетевое пространство имён — отдельный набор интерфейсов, адресов, маршрутов и правил межсетевого экрана внутри одного ядра. Программа, запущенная в пространстве, видит только его сеть. На этом построены контейнеры (см. cgroups-namespaces) и учебная сеть тренажёра.

Пара veth — два виртуальных интерфейса, соединённых друг с другом: пакет, ушедший в один конец, выходит из другого. Концы кладут в разные пространства — получается кабель между двумя «машинами» внутри одной.

text
student@ubuntu:~$ sudo ip -n lab-client -4 -br address
lab0@if2         UP             192.0.3.10/24

@if2 в имени значит: у lab0 есть парный конец, его номер в другом пространстве — 2. Работают с пространством двумя способами: ip -n имя … — команда ip в нём, ip netns exec имя команда — любая программа в нём. Без sudo обе печатают Operation not permitted.

Рецепты

3

Собрать сеть из двух узлов

bash
sudo ip netns add lab-client
sudo ip netns add lab-server
sudo ip -n lab-server link add lab1 type veth \
  peer lab0 netns lab-client
sudo ip -n lab-server address add 192.0.2.1/24 dev lab1
sudo ip -n lab-client address add 192.0.2.10/24 dev lab0
sudo ip -n lab-server link set lab1 up
sudo ip -n lab-client link set lab0 up
sudo ip netns exec lab-client ping -c 2 192.0.2.1

Адреса концов — из одной подсети, иначе нужен маршрут (см. ip). Оба конца должны быть UP.

Найти второй конец пары

bash
sudo ip -n lab-client -d link show lab0     # тип veth и номер пары
sudo ip -n lab-server -br link              # интерфейс с этим номером

Убрать учебную сеть

bash
sudo ip netns delete lab-client
sudo ip netns delete lab-server

Пара veth не живёт поодиночке: удалишь один конец или его пространство — исчезнет и второй.

Неполадки

5

Cannot find device "lab0"

Команда выполняется не в том пространстве. Интерфейс lab0 лежит в lab-client, и в сети самой машины его нет: пиши sudo ip -n lab-client ….

Cannot open network namespace: No such file or directory

Пространства с таким именем нет. Список — ip netns list.

RTNETLINK answers: File exists

Интерфейс или адрес с таким именем уже есть. Посмотри ip -n имя -br link и ip -n имя -br address; лишнее убери (ip link delete, ip address del).

Интерфейс UP, а ping не идёт

Проверь второй конец: если он выключен, у этого в ip -br link будет LOWERLAYERDOWN. Включи оба конца, сверь подсети адресов и правила межсетевого экрана в каждом пространстве (см. ping, firewall).

Operation not permitted

Пространства имён меняет и просматривает изнутри только root. Добавь sudo.

Термины

2
сетевое пространство имён network namespace
Изолированное сетевое окружение Linux с собственными интерфейсами, маршрутами и рядом сетевых настроек. Ещё встречается в: cgroups и namespaces, ip, nmap: какие порты видны снаружи, ping
пара veth veth pair
Два виртуальных интерфейса, соединённых как кабель: что ушло в один конец, выходит из другого. Ими связывают сетевые пространства имён. Ещё встречается в: ping, cgroups и namespaces, Docker, ip

См. также

  • ip — адреса, подсети и маршруты, в том числе внутри пространства.
  • ping — проверить связь между концами пары.
  • cgroups-namespaces — пространства имён и cgroups в целом, контейнеры.
  • network-diagnostics — лесенка проверки связи.
  • firewall — у каждого пространства свои правила nftables.
Загрузка…