Рубрики
*NIX информация

netns / создание network namespace и добавление его в сетевую карту

Пример команд:

Создание сетевых пространств (network namespaces):
sudo ip netns add Client
sudo ip netns add Server

Создание виртуальных интерфейсов (veth):
Теперь у тебя есть связанная пара интерфейсов (veth-client <-> veth-server).
sudo ip link add veth-client type veth peer name veth-server

Привязка интерфейсов к namespace:
sudo ip link set veth-client netns Client
sudo ip link set veth-server netns Server

Настройка IP-адресов:
sudo ip netns exec Client ip addr add 192.168.1.1/24 dev veth-client
sudo ip netns exec Server ip addr add 192.168.1.2/24 dev veth-server
Теперь у тебя есть два "виртуальных хоста" (Client и Server), соединенных через veth.

В Client и Server прописываешь маршруты:
sudo ip netns exec Client ip route add default via 192.168.1.254
sudo ip netns exec Server ip route add default via 192.168.2.254

Список всех network namespaces:
sudo ip netns list
ls /var/run/netns/

Просмотр интерфейсов внутри конкретного netns:
sudo ip netns exec Client ip link show
sudo ip -n Client link

Просмотр IP-адресов внутри netns:
sudo ip netns exec Client ip addr

Просмотр таблицы маршрутизации в netns:
sudo ip netns exec Client ip route
sudo ip -n Client route

Проверить ARP-таблицу (соседей):
sudo ip netns exec Client ip neigh

Если netns нет в списке, но процесс использует его:
lsns -t net
ps aux | grep "netns"


Использование namespace: 
ip netns exec  bash
ip netns exec Client bash
ip netns exec Server bash

Пример скрипта который создаст пространства имен, привяжет интерфейсы к ним, добавит адреса, добавит маршруты:


#!/bin/bash
set -x

# Создание namespace'ов, если их ещё нет
ip netns add Server
ip netns add Client

echo "setup Server:"
ip link set enp1s0f0np0 down 
ip link set enp1s0f0np0 netns Server
ip netns exec Server ip addr add 10.0.12.2/24 dev enp1s0f0np0
ip netns exec Server ip link set enp1s0f0np0 up
ip netns exec Server ip link set lo up
ip netns exec Server ip route add default via 10.0.12.1 dev enp1s0f0np0

echo "setup Client:"
ip link set enp1s0f1np1 down 
ip link set enp1s0f1np1 netns Client
ip netns exec Client ip addr add 10.0.11.2/24 dev enp1s0f1np1
ip netns exec Client ip link set enp1s0f1np1 up
ip netns exec Client ip link set lo up
ip netns exec Client ip route add default via 10.0.11.1 dev enp1s0f1np1

# Удаление namespace'ов при необходимости
# ip netns delete Client
# ip netns delete Server

Использование namespace:

Команда:
ip netns exec  bash

Пример:
ip netns exec Server bash
ip netns exec Client bash

Пример сетевые карты разделены на 4 отдельных карточки и проводом подключены Client — Server, без маршрутизации.

#!/bin/bash
set -x

# Создание namespace'ов, если их ещё нет
ip netns add Server
ip netns add Server1
ip netns add Client
ip netns add Client1

echo "setup Server:"
ip link set ens3f0 down 
ip link set ens3f0 netns Server
ip netns exec Server ip addr add 10.0.12.2/24 dev ens3f0
ip netns exec Server ip link set ens3f0 up
ip netns exec Server ip link set lo up


echo "setup Client:"
ip link set enp4s0f0np0 down 
ip link set enp4s0f0np0 netns Client
ip netns exec Client ip addr add 10.0.12.1/24 dev enp4s0f0np0
ip netns exec Client ip link set enp4s0f0np0 up
ip netns exec Client ip link set lo up


echo "setup Server1:"
ip link set ens3f1 down 
ip link set ens3f1 netns Server1
ip netns exec Server1 ip addr add 10.0.13.2/24 dev ens3f1
ip netns exec Server1 ip link set ens3f1 up
ip netns exec Server1 ip link set lo up


echo "setup Client1:"
ip link set enp4s0f1np1 down 
ip link set enp4s0f1np1 netns Client1
ip netns exec Client1 ip addr add 10.0.13.1/24 dev enp4s0f1np1
ip netns exec Client1 ip link set enp4s0f1np1 up
ip netns exec Client1 ip link set lo up

# Удаление namespace'ов при необходимости
# ip netns delete Client
# ip netns delete Server
# ip netns delete Client1
# ip netns delete Server1