Veth

Virtual Ethernet Device

Создаем network namespace
    ip netns add mynamespace

Посмотреть список созданных сетевых неймспейсов командой

    root@veth:~# ip netns list
    mynamespace (id: 0)

Можно зайти зайти внутрь этого пространства имен и посмотреть его сетевые интерфейсы

    root@veth:~# ip netns exec mynamespace bash
    root@veth:~# ip a
    1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

поднимем lo интерфейс

    root@veth:~# ip link set dev lo up
    root@veth:~# ip a
    1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    root@veth:~#     
veth

Создадим "шнурок" по которому процессы в пространстве имен mynamespace смогут общаться с процессами в нашем исходном пространстве имён.

Сообщения, отправленные на одном конце, выходят из устройства на другом

    ip link add veth0 type veth peer name veth1

Прокидываем veth1 в новое пространство имён

    root@veth:~# ip link set veth1 netns mynamespace

Смотрим в новом пространстве имен сетевые интерфейсы

    root@veth:~# ip netns exec mynamespace ip a
    1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    8: veth1@if9:  mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 1a:88:41:63:3c:1d brd ff:ff:ff:ff:ff:ff link-netnsid 0
    root@veth:~#

Осталось поднять интерфейсы и назначить им ip-адреса

В текущем НС:

    root@veth:~# ip addr add 10.1.1.1/24 dev veth0
    root@veth:~# ip link set dev veth0 up

В новом НС mynamespace

    root@veth:~# ip netns exec mynamespace bash
    root@veth:~# ip addr add 10.1.1.2/24 dev veth1
    root@veth:~# ip link set dev veth1 up

Все готово, можно запускать пинги и проверять доступность интерфейсов

    root@veth:~# ping 10.1.1.1
    PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data.
    64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.020 ms
    64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.038 ms
    ...    
    root@veth:~# ping 10.1.1.2
    PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data.
    64 bytes from 10.1.1.2: icmp_seq=1 ttl=64 time=0.160 ms
    64 bytes from 10.1.1.2: icmp_seq=2 ttl=64 time=0.041 ms
    ...
Использование

Пример использования через systemd можно найти в соответствующем разделе (см. NetworkNamespacePath)