Пример команд:
Создание сетевых пространств (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 execbash 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 execbash Пример: 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