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.
Типичные грабли