Network Namespace (Сетевой неймспейс)

⌘K

Network Namespace (Сетевой неймспейс)

Network namespace в Linux — это отдельная «копия» сетевого стека для группы процессов. У каждого неймспейса — свои интерфейсы, свои IP-адреса и маршруты, свой ARP/ND-кэш, свои правила firewall и conntrack, свой

lo
(loopback). Процессы из разных неймспейсов сетевыми средствами друг друга не видят, пока вы их специально не соедините.

Зачем используется

  • Контейнеры и оркестрация. Docker по умолчанию создаёт отдельный netns для контейнера; в Kubernetes все контейнеры пода делят один netns (общий IP).
  • Изоляция и многотенантность. Разделение тестовых/продовых сред, клиентов, сервисов на одном хосте.
  • Лаборатории и отладка. Можно «нарисовать» мини-сеть на одной машине и воспроизводить сложные сценарии.

Как связывают неймспейсы

  • Через veth-пары: создаёте виртуальный «провод» из двух концов и переносите один конец в другой netns.
  • Через мост (linux bridge/OVS): несколько netns подключают к одному L2-сегменту.
  • Через macvlan/ipvlan: дают «собственный MAC/IP» поверх физического интерфейса без софта-моста.
  • Через маршрутизацию/NAT на хосте: чтобы дать интернет внутрь изолированной сети.

Короткий практический пример

# создать два netns ip netns add red ip netns add blue # сделать veth-пару и разнести по netns ip link add veth-red type veth peer name veth-blue ip link set veth-red netns red ip link set veth-blue netns blue # поднять интерфейсы и проставить адреса ip -n red link set lo up ip -n blue link set lo up ip -n red addr add 10.10.0.1/24 dev veth-red ip -n blue addr add 10.10.0.2/24 dev veth-blue ip -n red link set veth-red up ip -n blue link set veth-blue up # проверить связность ip netns exec red ping -c1 10.10.0.2 ip netns exec blue ping -c1 10.10.0.1

Доступ «наружу» (общая идея)

  • Подключите netns к мосту, где есть uplink, или пропустите трафик через хост-роутер с NAT:
    # на хосте (root netns): включить маршрутизацию и NAT из 10.10.0.0/24 наружу sysctl -w net.ipv4.ip_forward=1 iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE
  • Не забудьте MTU/MSS: если внутри есть туннели/оверлеи, уменьшите MTU в netns или включите MSS-clamp.

Полезные приёмы

  • Запуск команды внутри netns:
    ip netns exec red <команда>
    (например,
    tcpdump -i veth-red
    ).
  • Посмотреть, в каком netns живёт процесс:
    ip netns identify <PID>
    , войти:
    nsenter -t <PID> -n
    .
  • «Привязать» существующий netns к имени:
    ln -s /proc/<PID>/ns/net /var/run/netns/<name>
    .
  • Чистка:
    ip netns del red
    удаляет netns и все его интерфейсы, которые не вынесены наружу.

Чем отличается от VRF

  • Netns — полностью отдельный стек (интерфейсы, таблицы правил и т. д.).
  • VRF — логические L3-домены внутри одного netns (несколько таблиц маршрутов в общей стековой среде). Их можно комбинировать: VRF внутри каждого netns.

Типичные грабли

  • Забыли поднять
    lo
    → сервисы не слушают на 127.0.0.1.
  • Нет маршрута по умолчанию/не настроен DNS внутри netns → «в интернет не выходит».
  • Фильтры на хосте не пропускают трафик из вложенных интерфейсов.
  • Несогласованная MTU по пути → пинги идут, а HTTP/HTTPS «висит».

Долгосрочные клиенты — наша гордость

Для тех, кто с нами надолго: 12 месяцев = 13 с промокодом

Месяц в подарок
COPIED
NEWCOM COPIED