Страница 1 из 2

Freebsd два VPN канала

СообщениеДобавлено: 26 мар 2013, 11:16
considered_this
ДД!

ситуация такая:
у нас имеется два филиала, у каждого филиала своя приватная сеть
филиал1(192.168.1.0/24) филиал2 (192.168.2.0/24)

в каждой сети по маршрутизатору на базе freebsd(192.168.1.1 и 192.168.2.1 соответственно), между сетями организован 1мбит впн тунель(gif)
одного мегабита недостаточно, поэтому взяли еще один 1мбит впн канал от другого провайдера

теперь задача равномерно разрулить трафик между филиалами по имеющимся двум каналам, как это лучше сделать не соображу, получается для двух тунелей один и тот же шлюз.

есть идеи?

Re: Freebsd два VPN канала

СообщениеДобавлено: 26 мар 2013, 11:22
considered_this
пока смотрю в сторону mpd5, возможно ли объеденить с помощью mpd два канала с балансировкой по роунд робин? может у кого есть примеры конфигов, гуглил, но ничего подобного не нашел, к сожалению

Re: Freebsd два VPN канала

СообщениеДобавлено: 26 мар 2013, 11:49
considered_this
такая схема необходима
http://docs.fortinet.com/cb/html/FOS_Co ... 6.01.1.png

Re: Freebsd два VPN канала

СообщениеДобавлено: 28 мар 2013, 09:16
lehisnoe
Тебя интересует ECMP (Equal-cost multi-path routing). Данный функционал реализован в FreeBSD, начиная с версии 8.0, становится доступен после пересбора ядра с указанием в его конфиге:
Код: Выделить всё
options RADIX_MPATH


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

P.S. не могу сказать, на сколько стабильно сейчас ведет себя фря с этой опцией. Раньше из-за нее у нас серверы ребутались с завидной регулярностью, но мы использовали динамическую маршрутизацию. В случае со статикой картина м.б. и иной.

Re: Freebsd два VPN канала

СообщениеДобавлено: 28 мар 2013, 10:38
considered_this
2lehisnoe, Благодарю за ответ, но по-моему это не совсем то, что мне надо. Ведь шлюз в моей ситуации один и тот же для обеих каналов.
Вот, что еще пробовал и с чем столкнулся:

изначально идея была рузрулить трафик балансировкой по роунд робин с помощью pf, подобным правилом - pass in on $int_if route-to { (gif0 192.168.2.1), (gif1 192.168.2.1)} round-robin from 192.168.1.0/24 to any keep state

в филиале1 версия freebsd 6.3, во втором 8.1
при попытке поднять gif1 с таким же шлюзом, система ругалась
ifconfig gif1 inet 192.168.1.1 192.168.2.1 netmask 255.255.255.255 mtu 1500
ifconfig: ioctl (SIOCAIFADDR): File exists

правда, если сначала "положить" первый гиф, потом ввести данную команду и после "поднять" первый гиф, то в результате ифконфиг показывает два тунеля в апе, аналогично проделывается на втором роутере

таким кривым способом тунели поднимаются и с помощью pf трафик вроде балансируется(с помощью tcpdump наблюдается наличие пакетов на обоих гифах), но переодически в dmesg фиксируются ошибки типа
kernel: ifa_add_loopback_route: insertion failed
+
kernel: gif1: promiscuous mode enabled
kernel: gif1: promiscuous mode disabled

и через некоторое время такая схема разваливается, сети друг друга перестают видеть

#ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1): 56 data bytes
ping: sendto: Input/output error
ping: sendto: Input/output error
ping: sendto: Input/output error

плюс ко всему надо еще как-то зашифровать эти два тунеля
первый тунель организовывался средствами racoon
теперь, при попытке зашифровать второй тунель, ракун просто не подымается, ругаясь, что такой канал уже существует

пока светлых мыслей как это все дело подружить - не приходит

Re: Freebsd два VPN канала

СообщениеДобавлено: 28 мар 2013, 11:28
lehisnoe
considered_this писал(а):по-моему это не совсем то, что мне надо.
Это то, что тебе надо, просто ты еще не понял этого ;-).
Во-первых, на одном сервере должны быть уникальные адреса, никаких извратов с поднятием туннелей с одинаковыми адресами.
Во-вторых, туннели поднимаются также с уникальными адресами. Например для первого туннеля использовать подсеть 10.0.0.0/30, для второго - 10.0.0.4/30.
В-третьих, через туннели уже и попытаться балансить трафик путем добавления нескольких маршрутов к сети филиала, но через разные туннели - и вот тут-то и пригодиться ECMP (если с ним, конечно, сервера будут стабильно работать).

considered_this писал(а):плюс ко всему надо еще как-то зашифровать эти два тунеля
Шифруй на здоровье, препятствий для этого пока не вижу.

Re: Freebsd два VPN канала

СообщениеДобавлено: 28 мар 2013, 12:38
considered_this
ты прав, видимо я еще слабо понимаю ситуацию..
разъясни пожалуйста момент с уникальной адресацией, то именно необходимо исправить, чтобы тунели нормально работали?
на данный момент у меня следующая конфигурация:
филиал1
rl0 192.168.1.1 (LAN)
rl1 172.16.1.2 (VPN1)
rl2 10.10.10.2 (VPN2)
филиал2
rl0 192.168.2.1 (LAN)
rl1 172.16.1.10 (VPN1)
rl2 10.10.10.22 (VPN2)

IP адреса для VPN предоставлены двумя разными провайдерами

тунели:
филиал1
Код: Выделить всё
gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        tunnel inet 10.10.10.2 --> 10.10.10.22
        inet 192.168.1.1 --> 192.168.2.1 netmask 0xffffffff
gif1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        tunnel inet 172.16.1.2 --> 172.16.1.10
        inet 192.168.1.1 --> 192.168.2.1 netmask 0xffffffff

филиал2
Код: Выделить всё
gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        tunnel inet 10.10.10.22 --> 10.10.10.2
        inet 192.168.2.1 --> 192.168.1.1 netmask 0xffffffff
gif1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        tunnel inet 172.16.1.10 --> 172.16.1.2
        inet 192.168.2.1 --> 192.168.1.1 netmask 0xffffffff

Re: Freebsd два VPN канала

СообщениеДобавлено: 28 мар 2013, 13:03
lehisnoe
considered_this писал(а):разъясни пожалуйста момент с уникальной адресацией, то именно необходимо исправить, чтобы тунели нормально работали?

Должно быть что-то типа такого (обрати внимание на маску подсети на адресах туннелей: она не /32, как у тебя, а /30 - 0xfffffffc):
филиал1
Код: Выделить всё
gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        tunnel inet 10.10.10.2 --> 10.10.10.22
        inet 192.168.100.1 --> 192.168.100.2 netmask 0xfffffffc
gif1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        tunnel inet 172.16.1.2 --> 172.16.1.10
        inet 192.168.100.5 --> 192.168.100.6 netmask 0xfffffffc

филиал2
Код: Выделить всё
gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        tunnel inet 10.10.10.22 --> 10.10.10.2
        inet 192.168.100.2 --> 192.168.100.1 netmask 0xfffffffc
gif1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        tunnel inet 172.16.1.10 --> 172.16.1.2
        inet 192.168.100.6 --> 192.168.100.5 netmask 0xfffffffc


P.S. Пользуйся тегом Code при размещении вывода команд - это улучшает восприятие информации.

Re: Freebsd два VPN канала

СообщениеДобавлено: 28 мар 2013, 14:15
considered_this
ок, теперь, если я правильно понимаю, то после поднятия тунелей необходимо будет добавить такие маршруты:

Код: Выделить всё
route add -net 192.168.2.0/24 192.168.100.1 -interface gif0
route add -net 192.168.2.0/24 192.168.100.5 -interface gif1


и на втором роутере, соответственно:

Код: Выделить всё
route add -net 192.168.1.0/24 192.168.100.2 -interface gif0
route add -net 192.168.1.0/24 192.168.100.6 -interface gif1


и уже после балансировать с помощью пф, верно?

Re: Freebsd два VPN канала

СообщениеДобавлено: 28 мар 2013, 14:58
lehisnoe
Если 192.168.2.0/24 находится в филиале1, а 192.168.1.0/24 в филиале2, то да, добавление маршрутов корректное (только я бы не указывал интерфейсы - ни к чему это в данном случае).
lehisnoe писал(а):балансировать с помощью пф, верно?
В этом случае, тебе даже не нужно пересобирать ядро. Достаточно раунд-робином форвардить пакеты в разные туннели.