На написание статьи меня сподвиг интересный Tutorial от Валерия Лутошкина с настройкой BGP и VPS на оборудовании MikroTik с подключением к проекту antifilter. Это решение натолкнуло меня на домашнюю практику с протоколами динамической маршрутизации. Попробовав его реализовать, я понял, что мой домашний провайдер не даёт манёвров для действий и блокирует порт TCP 179 по умолчанию. В дополнение к этому у меня нет белого IP адреса и я за NATом. В общем все прелести рядового пользователя. Текущая статья является у меня первой. Конструктивную критику и пожелания приветствую.
Предыстория
Для решения задачи по обходу блокировок в домашних условиях, я использовал вариант с покупкой VPS в свободной зоне глобальной сети. Установил на VPS CHR. Далее на домашнем MikroTik создал туннель через SSTP и отдельную Wi-Fi сеть со своим сегментом и бриджом. С использованием маркировки, статикой направлял пакеты в туннель до VPS. Netwatch контролировал наличие активного туннеля до VPS и активный маршрут в таблице маршрутизации на случай, если туннель упадёт, чтобы устройства во втором сегменте полностью не потеряли интернет.
Как выглядела настройка роутера MikroTik
Добавлено правило в firewall mangle:
/ip firewall mangle
add action=mark-routing chain=prerouting disabled=yes new-routing-mark=
browser_mark passthrough=yes src-address=192.168.8.128/25
Добавлен маршрут для маркированных пакетов:
/ip route
add disabled=yes dst-address=0.0.0.0/0 gateway=172.15.1.1 routing-table=
browser_mark suppress-hw-offload=no
И всё бы хорошо, но решение было сделано на коленке и переключаться между Wi-Fi сетями не совсем удобно. Хочется сделать так, чтобы роутер сам определял маршрут следования с использованием обычной домашней сети без разделения сегментов. В любом случае, мы должны прийти к динамической маршрутизации, либо использовать способ с автозагрузкой списка РКН через скрипт в Address list. Казалось бы просто, но мне захотелось, чтобы всё было ещё чуть изящнее. Отключаем старую реализацию с разделением сегментов и приступаем к постановке задачи.
Постановка задачи
Имеется инструкция как подключиться по BGP, обозначенная в начале статьи. А что делать если провайдер всё блокирует или вы находитесь за NAT? Всё верно. Можно попробовать поднять BGP сессию на VPS, а чтобы маршруты через туннель долетали до домашнего роутера, доставить их туда одним из протоколов IGP, например, используя OSPFv2, который включается на MikroTik очень легко. Схематично обозначим нашу цель.
Исходные данные
Нам необходим VPS хостинг на ваш вкус и цвет в свободной зоне интернет. Не привязываюсь к конкретному, так-как у всех разные предпочтения;
CHR установленный на VPS. С установкой можно ознакомиться в следующих статьях: Пример1, Пример2, Пример3. Настройка может быть индивидуальна для каждого хостинга, но в целом подход одинаков. Можно попробовать поднять на VPS и другой образ системы. Главное чтобы была поддержка работы с BGP и OSPF. Я использую CHR из-за минимального количества выделяемых для него ресурсов. Как следствие, минимальный тарифный план;
Лицензия CHR. При использовании бесплатной версии скорость на портах CHR будет всего 1 Мбит/сек. Как получить лицензию бесплатно можно ознакомиться здесь. Стоимость самой лицензии на момент написания статьи около 3000 руб.;
Любой туннель IPIP для связи Home router и VPS. Главное чтобы мы смогли взаимодействовать по порту TCP 89 для OSPF. Подразумевается, что туннель у вас уже настроен. В примере я использую SSTP (на нестандартном порту). Статикой на сервере VPN (в нашем случае это CHR) настроены параметры IP, которые выдаются всего одному клиенту (домашний роутер);
Предполагается, что между CHR и Home router нет NAT и запрещающих правил для OSPF. Правила фильтрации на роутерах для WAN интерфейсов настроены на необходимом уровне и на CHR нет запрещающих правил для BGP;
В примере на домашнем роутере и CHR версия прошивки 7.3.1 stable. В целом, всё "взлетит" и на 6-ой версии с небольшим отличием в командах и интерфейсе Winbox.
Настройка
Для поднятия BGP сессии на VPS используем статью от Валерия Лутошкина. Он достаточно подробно описал процесс. С белым IP адресом на CHR у вас не возникнет "подводных камней" в настройке. По BGP в таблицу маршрутизации прилетит всё что нужно.
Переходим к OSPF. Перед настройкой OSPF обязательно делаем статичным интерфейс на CHR через "SSTP Server Binding". Нужно это для того, чтобы SSTP интерфейс был статичным и не исчезал при отключении клиента (домашнего роутера). В вашем случае это может быть и другой интерфейс.
Далее включаем у CHR протокол OSPF на статическом интерфейсе sstp-in1, который смотрит в сторону Home router. Обратите внимание, что со стороны CHR мы анонсируем маршруты, полученные только по BGP.
/routing ospf instance
add disabled=no name=ospf-instance-1 originate-default=never redistribute=bgp
routing-table=main
/routing ospf area
add disabled=no instance=ospf-instance-1 name=ospf-area-1
/routing ospf interface-template
add area=ospf-area-1 disabled=no instance-id=1 interfaces=sstp-in1
Теперь включаем у Home router протокол OSPF на интерфейсе MT-EXTERNAL, который смотрит в сторону CHR. Обратите внимание, что со стороны Home router мы анонсируем маршруты только со статусом connected. Это необходимо, чтобы наш CHR знал сегменты на домашнем роутере.
/routing ospf instance
add disabled=no name=ospf-instance-1 originate-default=never redistribute=
connected routing-table=main
/routing ospf area
add disabled=no instance=ospf-instance-1 name=ospf-area-1
/routing ospf interface-template
add area=ospf-area-1 disabled=no instance-id=1 interfaces=MT-EXTERNAL
Дополнительные настройки OSPF можно подкрутить по желанию. Ожидаем определения bdr и dr статуса на роутерах. В разделе OSPF=>Neighbors ожидаем конечного статуса "FULL" на CHR и Home Router соответственно. Если с настройкой OSPF возникнут проблемы, возможно поможет статья из wiki MikroTik.
После этого в таблице маршрутизации CHR появятся маршруты до connected сетей домашнего роутера, а на Home router появится несколько десятков тысяч маршрутов в сторону CHR. У меня стоит HAPac2 и он вполне справляется с 11000 тыс. маршрутами и LSA в OSPF. Загрузка CPU и RAM в норме. Для дома это вполне хороший результат.
Финансы
По финансовым расходам у нас получается следующая картина:
Стоимость лицензии CHR около 3000 руб. либо используем бесплатную версию;
Стоимость арендной платы за VPS 300 руб./мес. Может чуть больше.
Заключение
Таким образом мы настроили довольно интересную связку. Наш Home router самостоятельно принимает решение куда отправлять пакеты. Вся информация через BGP прилетает на VPS и передаётся на наш домашний роутер по OSPF. Весь процесс максимально автоматизирован, чтобы настроить и комфортно пользоваться глобальной сетью дома. Вместо OSPF можно попробовать запустить другие протоколы IGP.