В данном примере мы имеем на хосте два сетевых интерфейса eth0 и eth1. Наша цель заизолировать один интерфейс.
root@netns:~# 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 2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:0a:02:ba:36 brd ff:ff:ff:ff:ff:ff inet 10.2.186.54/24 brd 10.2.186.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::200:aff:fe02:ba36/64 scope link valid_lft forever preferred_lft forever 3: eth1: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:0a:02:ba:37 brd ff:ff:ff:ff:ff:ff inet 10.2.186.55/24 brd 10.2.186.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::200:aff:fe02:ba37/64 scope link valid_lft forever preferred_lft forever root@netns:~#
ip netns add mynamespace
Посмотреть список созданных сетевых неймспейсов командой
root@netns:~# ip netns list mynamespace (id: 0)
поднимем lo интерфейс
#опустим интерфейс root@netns:~# ip link set eth1 down #прокинем его в ранее созданный НС root@netns:~# ip link set eth1 netns mynamespace #повесим на него ip и добавим в новом НС маршрут root@netns:~# ip netns exec mynamespace ip addr add 10.2.186.55/24 dev eth1 root@netns:~# ip netns exec mynamespace ip route add default via 10.2.186.1 #поднимем интерфейс root@netns:~# ip netns exec mynamespace ip link set eth1 up
На выводе ниже показано, что eth1 перестал отображаться в исходном неймспейсе
root@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 2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:0a:02:ba:34 brd ff:ff:ff:ff:ff:ff inet 10.2.186.52/24 brd 10.2.186.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::200:aff:fe02:ba34/64 scope link valid_lft forever preferred_lft forever
Можно зайти зайти внутрь нового пространства имен и посмотреть его сетевые интерфейсы
root@mynamespace:~# 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 3: eth1: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:0a:02:ba:33 brd ff:ff:ff:ff:ff:ff inet 10.2.186.51/24 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::200:aff:fe02:ba33/64 scope link valid_lft forever preferred_lft forever root@mynamespace:~#
Идея состоит в том, чтобы определенным приложениям разрешить ходить через нужный интерфейс. Пример использования сервисом нужных НС смотреть в разделе systemd.