NetworkNamespaces: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 135: Строка 135:
 
ip netns exec R0 mtr 172.20.0.1
 
ip netns exec R0 mtr 172.20.0.1
 
</PRE>
 
</PRE>
  +
==Немного магии==
  +
А теперь попробуем создать тестовый стенд - 100 (сто!) роутреров, включенных один за одним. <BR>
  +
Конечно, не руками.
  +
===Скрипт для создания===
  +
  +
  +
 
==Связанные темы==
 
==Связанные темы==
 
http://wiki.sirmax.noname.com.ua/index.php/LXC
 
http://wiki.sirmax.noname.com.ua/index.php/LXC
  +
 
==Ссылки==
 
==Ссылки==

Версия 12:19, 12 мая 2013

Network NameSpaces

Network NameSpaces это способ виртуализации сетевого стека в Linux

В пределах одной физической ноды можно получить:

  • отдельную таблицу маршрутизации
  • отдельную arp-таблицу
  • iptables
  • виртуальные устройства или реальные со своими шейперами.

Простой пример

Вот простой роутрер (ноут), один линк через WiFi

ip link show
ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:1d:72:d2:2e:41 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:21:5d:40:2d:7a brd ff:ff:ff:ff:ff:ff
4: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 5a:c4:11:2e:48:99 brd ff:ff:ff:ff:ff:ff

(lxcbr0) - бридж для LXC, никак не мешает. Проверить наличие неймспейсов:

ip netns show

... ничего нет.
Добавляем 2 неймспейса

ip netns add R0
ip netns add R1

Проверяем:

ip netns list 
R1
R0

Добавляем 2 виртуальных линка (veth == virtual eth)

ip link add name ve0a type veth peer name ve0b
ip link add name ve1a type veth peer name ve1b
ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:1d:72:d2:2e:41 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:21:5d:40:2d:7a brd ff:ff:ff:ff:ff:ff
4: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 5a:c4:11:2e:48:99 brd ff:ff:ff:ff:ff:ff
20: ve0b: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 2e:0c:69:1a:43:d1 brd ff:ff:ff:ff:ff:ff
21: ve0a: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether b2:21:f3:95:e3:f6 brd ff:ff:ff:ff:ff:ff
22: ve1b: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 16:a4:78:2e:1f:56 brd ff:ff:ff:ff:ff:ff
23: ve1a: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 2a:62:f9:4f:c1:6c brd ff:ff:ff:ff:ff:ff

Добавилось 4 виртуальных интерфейса или они же 2 виртуальных линка
Далее переносим виртуальные езернеты с индексом b внутрь name spaces

ip link set dev ve0b netns R0
ip link set dev ve1b netns R1

Как можно видеть ниже - интерфейсы перестали быть видны:

ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:1d:72:d2:2e:41 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:21:5d:40:2d:7a brd ff:ff:ff:ff:ff:ff
4: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 5a:c4:11:2e:48:99 brd ff:ff:ff:ff:ff:ff
21: ve0a: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether b2:21:f3:95:e3:f6 brd ff:ff:ff:ff:ff:ff
23: ve1a: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 2a:62:f9:4f:c1:6c brd ff:ff:ff:ff:ff:ff

Для того что бы вызвать комманду из какого-либо неймспейса следует использовать минтаксис ip netns exec ...

ip netns exec R0  ip link show
18: lo: <LOOPBACK> mtu 16436 qdisc noop state DOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
20: ve0b: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 2e:0c:69:1a:43:d1 brd ff:ff:ff:ff:ff:ff
ip netns exec R1  ip link show
19: lo: <LOOPBACK> mtu 16436 qdisc noop state DOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
22: ve1b: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 16:a4:78:2e:1f:56 brd ff:ff:ff:ff:ff:ff

Добавить адреса внутрь неймспейсов.

ip netns exec R0  ip addr add 172.19.0.1/24 dev ve0b
ip netns exec R1  ip addr add 172.20.0.1/24 dev ve1b

"включить" линки. Не забываем про lo

ip netns exec R0  ip link set up dev ve0b
ip netns exec R0  ip link set up dev lo
ip netns exec R1  ip link set up dev ve1b
ip netns exec R1  ip link set up dev lo
ip netns exec R0 ifconfig 
ip netns exec R1 ifconfig 

Добавить адреса на основную систему

ip addr add 172.19.0.2/24 dev ve0a
ip addr add 172.20.0.2/24 dev ve1a
ip link set up dev ve0a
ip link set up dev ve1a
ip netns exec R0 ip route add 0.0.0.0/0 via  172.19.0.2
ip netns exec R1 ip route add 0.0.0.0/0 via  172.20.0.2
ip netns exec R0 mtr 172.20.0.1

Немного магии

А теперь попробуем создать тестовый стенд - 100 (сто!) роутреров, включенных один за одним.
Конечно, не руками.

Скрипт для создания

Связанные темы

http://wiki.sirmax.noname.com.ua/index.php/LXC

Ссылки