Используем несколько провайдеров

FreeBSD
Предыстория
Жила-была одна локальная сеть (ЛВС2) и использовала одно подключение к Интернет, все были счастливы. Но жизнь продолжается, потребности возрастают, и этой ЛВС (подключенной к «Прокма-Телеком») захотелось использовать ресурсы провайдера «ЛанТа».
Не проблема. В связи с отсутствием «ЛанТа» в родном районе, был добавлен «Домолинк», который как известно имеет пиринг с «ЛанТа». Вроде все прекрасно, все работает, все довольны.
Но в другом районе города, жила другая локальная сеть (ЛВС1), которая была подключена к «МКС». Тоже, захотелось людям использовать ресурсы «ЛанТа», и был проведен туда это провайдер. И снова все счастливы.

И вот, после недолгих размышлений, захотелось предоставить ЛВС2 доступ к ресурсам «МКС», и, соответственно участникам ЛВС1 предоставить доступ к ресурсам «Прокма-Телеком».

Доступ ЛВС1 к Интернет предоставляет маршрутизатор krabe, доступ ЛВС2 к Интернет предоставляет маршрутизатор mira. Два этих маршрутизатора принадлежат сетям 2-х разных провайдеров: «ЛанТа» и «Домолинк». Как известно, между этими провайдерами существует пиринг, т.е. трафик между этими сетями не тарифицируется, и, что самое приятное не ограничивается по скорости.
Сразу приходит мысль: а нельзя ли сделать так, чтобы при обращении из ЛВС1 к ресурсам «Прокма-Телеком» трафик шел не через Интернет, а через mira? И обратное, при запросе из ЛВС2 к ресурсам «МКС» трафик шел не через Интернет, а через krabe?
Ну и зарисуем нашу схему:

kote будет рассмотрен в самом конце, он будет участвовать только в балансировке трафика.
Сразу хочу оговориться — что на текущий момент схема состоит из 6 маршрутизаторов — 3 из которых для балансировки трафика.

Проектирование
Что хотим сделать — определились. Теперь надо решать как это делать?
Сначала надо как-то соединить между собой маршрутизаторы mira и krabe, т.е. построить между ними свой канал. Здесь выбор довольно широк: это и gre, и ipip, и l2tp, и pptp и тд и тп.
gre и основанные на нем протоколы были отсечены сразу — ну не нравится мне он, и все. Сначала думал использовать l2tp, по немного порассуждав — решил, что не подходит, ибо сеть будет в дальнейшем расширяться, и протокол точка-точка для этого не совсем подходит. Да и мне потребуется широковещательная рассылка внутри соединения маршрутизаторов. OpenVPN с этим прекрасно справляется, на нем и остановимся. Итак, маршрутизаторы будут коммутироваться в виртуальный ethernet-сегмент с помощью OpenVPN. В качестве сервера доступа, по ряду причин, будет использоваться mira.

Теперь следующий момент, а как прописывать маршруты? Пока известный два способа — статическая маршрутизация и динамическая маршрутизация. Статическая — администраторы сами руками прописывают маршруты, динамическая — маршрутизаторы сами обмениваются маршрутами между собой.
Со статической все просто — могли бы просто на krabe, что для доступа к ресурсам «Прокма-Телеком» нужно ходить через mira, ну и на mira обратное. Но, тут есть подводные камни — если теряется соединение между маршрутизаторами — то ресурсы этих сетей становятся недоступными. Это не совсем устраивает.
С динамической — проще. Маршрутизаторы сами договариваются между собой — какие маршруты использоваться, и, разумеется, при пропадании одного из маршрутизаторов — просто его маршруты вычеркиваются из таблицы маршрутизации. Это то, что нам надо. В качестве протокола динамической маршрутизации был выбран OSPF.

В принципе, проектировать больше нечего. Вся работа сводится к 2 пунктам:
— настроить соединение между маршрутизаторами;
— настроить протокол динамической маршрутизации между маршрутизаторами.

Настраиваем OpenVPN
Процесс сборки и генерации ключей OpenVPN рассматривать не буду, ибо все стандартно.
Итак, мы имеем установленный OpenVPN на всех участниках.

Перейдем к настройке mira, именно к нему будут подключаться остальные маршрутизаторы.
И сразу рабочий конфиг для mira:
[21:02 dk@mira ~]> cat /usr/local/etc/openvpn/vpn.conf
#
cd /usr/local/etc/openvpn/vpn

#
dev tap0
ifconfig 192.168.130.1 255.255.255.0

#
port 1237
proto udp

#
mssfix

#
mode server
tls-server

# security
ca rsa/keys/ca.crt
cert rsa/keys/server.crt
key rsa/keys/server.key
dh rsa/keys/dh1024.pem
keysize 32

#
keepalive 30 120

# The persist options will try to avoid
# accessing certain resources on restart
# that may no longer be accessible because
# of the privilege downgrade.
persist-key
persist-tun
persist-local-ip

# drop privileges
user ovpn_vpn
group ovpn_vpn

# log
verb 3
status /var/log/openvpn/vpn.status

#
client-to-client

#
duplicate-cn

В качестве виртуального адаптера будет использоваться tap0. IP-подсеть маршрутизаторов — 192.168.130.0/24. Адрес mira — 192.168.130.1. duplicate-cn — разрешает подключаться нескольким участникам с одинаковыми сертификатами (да-да, борцы за безопасность могут извергать фонтаны говен, но мне чисто лень генерировать на каждого свой сертификат, тем более всем участникам я доверяю). client-to-client — разрешаем внутри сегментам всем общаться между собой, а не только клиент-сервер. Остальные настройки стандартны и не требуют рассмотрения.

Продолжение следует ...

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.