LinuxForum.Fans
Тема

Route на L2

Автор: pgusev 4 сообщений 1758 просмотров
#383457

.Привет усем!
Ломаю голову как победить одну вещь.
В наличии:
1.гипервизор с двумя виртуальными сетями vmvnet(172.16.1.0/24), gwvnet (172.17.1.0/24)
2.Три виртуалки - vm01 (eth0=>vmvnet,172.17.1.254), vm01_01 (eth0=>gwvnet,172.16.1.1; eth1=>vmvnet,172,17.1.1), vm01_02 (eth0=>gwvnet,172.16.1.2; eth1=>vmvnet,172,17.1.2)
3.На каждом gw поднят свой VPN, с внешней VPS (10.8.0.1==VPS, 10.8.0.6==gw)
4.При обращении к внешнему хосту, траф оттуда натится в туннель (кроме ссш порта, чтоб внешний хост управляем был), приходит на gw, и тут же натится на vm (тож самое, кроме ссш порта), таким образом, запрос к внешнему хосту приходит на конечную vm

Вощем то с одним таким gw проблемы нет, обратный маршрут прописан (на vm в качестве дефолтного маршрута задан ip первого gw 172.17.1.1), таким образом я получаю на vm реальный ип клиента и никаких проблем
Проблемы появляются когда я делаю запрос через второй внешний хост, пакеты доходят до vm, но обратно то они, понятное дело, идут через первый gw, так как он является дефолтным, а прямого маршрута до клиента снаружи нет

Вопрос заключается именно в этом, есть ли возможность без изменения архитектуры (при использовании всего двух сетей gwvnet и vmvnet) маршрутизировать пакеты туда, откуда они пришли?

Я так понимаю, что тут речь идет про роутинг на втором уровне TCP/IP? Так как на третьем уровне мы уже имеем одинаковый клиентский IP при любом раскладе (с какого бы внешнего хоста мы не пришли, адрес клиента всегда будет один и тот же), поэтому роутить тут остается возможным только на основе MAC))))

Кто то сталкивался с таким?

#383465

а да, забыл сказать, виртуалки под управлением opennebula, т.е. есть контекстуализация, запросто можно автоматизировать некоторые действия связанные с ip
вобщем то у машинок на интерфейсах маки типа..

02:00:ac:10:02:01 == 172.16.2.1
02:00:ac:11:02:01 == 172.17.2.1

последние 4 блока MAC адреса генерится на основании октетов IP-адреса

то есть в принципе приходит мысль такая, на конечной виртуалке, с учетом L2, можно сделать так:
1.iptables -A PREROUTING -t mangle -m mac --mac-source 02:00:ac:11:02:01 -j MARK --set-mark 2
2.ip route add default via 172.17.2.2 table 2
3.ip rule add fwmark 2 table 2

таким образом, получается, что все запросы, пришедшие с gw02 , маркируются двойкой, далее создается обратный дефолтный маршрут через gw02 и правило с учетом второго марка через этот маршрут

что, это максимум что можно сделать или все таки кто то может сократить путь через лес? =)

#383475
pgusev написал:
.Привет усем!
Ломаю голову как победить одну вещь.
В наличии:
1.гипервизор с двумя виртуальными сетями vmvnet(172.16.1.0/24), gwvnet (172.17.1.0/24)
2.Три виртуалки - vm01 (eth0=>vmvnet,172.17.1.254), vm01_01 (eth0=>gwvnet,172.16.1.1; eth1=>vmvnet,172,17.1.1), vm01_02 (eth0=>gwvnet,172.16.1.2; eth1=>vmvnet,172,17.1.2)
3.На каждом gw поднят свой VPN, с внешней VPS (10.8.0.1==VPS, 10.8.0.6==gw)
4.При обращении к внешнему хосту, траф оттуда натится в туннель (кроме ссш порта, чтоб внешний хост управляем был), приходит на gw, и тут же натится на vm (тож самое, кроме ссш порта), таким образом, запрос к внешнему хосту приходит на конечную vm

Вощем то с одним таким gw проблемы нет, обратный маршрут прописан (на vm в качестве дефолтного маршрута задан ip первого gw 172.17.1.1), таким образом я получаю на vm реальный ип клиента и никаких проблем
Проблемы появляются когда я делаю запрос через второй внешний хост, пакеты доходят до vm, но обратно то они, понятное дело, идут через первый gw, так как он является дефолтным, а прямого маршрута до клиента снаружи нет

Вопрос заключается именно в этом, есть ли возможность без изменения архитектуры (при использовании всего двух сетей gwvnet и vmvnet) маршрутизировать пакеты туда, откуда они пришли?

Я так понимаю, что тут речь идет про роутинг на втором уровне TCP/IP? Так как на третьем уровне мы уже имеем одинаковый клиентский IP при любом раскладе (с какого бы внешнего хоста мы не пришли, адрес клиента всегда будет один и тот же), поэтому роутить тут остается возможным только на основе MAC))))

Кто то сталкивался с таким?

iproute2, iptables tutorial читать, есть пример.

#383501

ага, спасибо) до 4 ночи возился, но сделал
в итоге решил на уровне ebtables , так как для L2 это подходит больше
спасибо за ответ!

Войдите или зарегистрируйтесь, чтобы ответить.