Использование нескольких сетевых стеков в Linux |
[исправить] |
В linux относительно давно появилась такая замечательная вещь, как неймспейсы
(namespaces). Основное применение данной технологии - контейнерная
виртуализация, но и на маршрутизаторе можно придумать много разных применений,
так как среди неймспейсов есть "network namespaces".
Network namespaces позволяют в рамках одной машины в каждом неймспейсе иметь:
свой набор таблиц маршрутизации (а их 2^31-1 шт)
свою arp-таблицу
свои правила iptables
свои устройства (а значит и qdisc + class'ы tc)
NB: для выполнения нижеследующих примеров крайне желательно иметь свежий iproute2 и ядро.
Создаются неймспейсы достаточно скучно и просто:
ip netns add VROUTER
ip netns add KUKYSEVRACI
Создадим "виртуальны шнурок":
ip link add name ve0a type veth peer name ve0b
Добавим интерфейсы внутрь VROUTER:
ip link set dev eth0 netns VROUTER
ip link set dev ve0b netns VROUTER
Выполнить команду в контексте определённого неймспейса можно так:
ip netns exec VROUTER ip link show
Настроим адреса:
ip netns exec VROUTER ip a a 192.168.1.1/24 dev ve0b
ip a a 192.168.1.2/24 dev ve0a
ip netns exec VROUTER ip a a 10.140.48.16/24 dev eth0
Поднимем интерфейсы:
ip link set dev ve0a up
ip netns exec VROUTER ip link set dev eth0 up
ip netns exec VROUTER ip link set dev ve0b up
Шлюз по умолчанию:
ip netns exec VROUTER ip r a default via 10.140.48.1
Посмотрим, что получилось:
root@laptus:~# ip netns exec VROUTER ip r s
default via 10.140.48.1 dev eth0
10.140.48.0/24 dev eth0 proto kernel scope link src 10.140.48.16
192.168.1.0/24 dev ve0b proto kernel scope link src 192.168.1.1
Добавим NAT:
ip netns exec VROUTER iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 10.140.48.16
Сделаем пару трейсов:
root@laptus:~# ip netns exec VROUTER traceroute -q 1 -I opennet.ru
traceroute to opennet.ru (77.234.201.242), 30 hops max, 60 byte packets
1 10.140.48.1 (10.140.48.1) 0.148 ms
2 10.140.0.1 (10.140.0.1) 0.245 ms
3 border.yournet.ru (91.204.148.17) 0.436 ms
4 alisa.yournet.ru (91.204.151.2) 0.521 ms
5 sev-gw.yournet.ru (91.204.148.2) 8.975 ms
6 bl16-1-gw.spb.runnet.ru (194.190.255.25) 1.321 ms
7 bl16-1-gw.spb.runnet.ru (194.85.40.170) 1.785 ms
8 s14-1-gw.spb.runnet.ru (194.85.40.81) 1.456 ms
9 vuztc.spb.runnet.ru (194.190.255.170) 1.987 ms
10 opennet.ru (77.234.201.242) 2.395 ms
root@laptus:~# traceroute -q 1 -I opennet.ru
traceroute to opennet.ru (77.234.201.242), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.094 ms
2 10.140.48.1 (10.140.48.1) 0.751 ms
3 10.140.0.1 (10.140.0.1) 1.277 ms
4 border.yournet.ru (91.204.148.17) 2.061 ms
5 alisa.yournet.ru (91.204.151.2) 2.911 ms
6 sev-gw.yournet.ru (91.204.148.2) 6.770 ms
7 bl16-1-gw.spb.runnet.ru (194.190.255.25) 3.622 ms
8 bl16-1-gw.spb.runnet.ru (194.85.40.170) 5.262 ms
9 s14-1-gw.spb.runnet.ru (194.85.40.81) 4.135 ms
10 vuztc.spb.runnet.ru (194.190.255.170) 4.710 ms
11 opennet.ru (77.234.201.242) 7.220 ms
|
|
|
|
Раздел: Корень / Администратору / Сетевая подсистема, маршрутизация / Туннелинг, VPN, VLAN |