Network namespace в Linux — это отдельная «копия» сетевого стека для группы процессов. У каждого неймспейса — свои интерфейсы, свои IP-адреса и маршруты, свой ARP/ND-кэш, свои правила firewall и conntrack, свойlo
Зачем используется
- Контейнеры и оркестрация. 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>
- Чистка:удаляет netns и все его интерфейсы, которые не вынесены наружу.
ip netns del red
Чем отличается от VRF
- Netns — полностью отдельный стек (интерфейсы, таблицы правил и т. д.).
- VRF — логические L3-домены внутри одного netns (несколько таблиц маршрутов в общей стековой среде). Их можно комбинировать: VRF внутри каждого netns.
Типичные грабли
- Забыли поднять→ сервисы не слушают на 127.0.0.1.
lo
- Нет маршрута по умолчанию/не настроен DNS внутри netns → «в интернет не выходит».
- Фильтры на хосте не пропускают трафик из вложенных интерфейсов.
- Несогласованная MTU по пути → пинги идут, а HTTP/HTTPS «висит».