На написание статьи меня сподвиг интересный 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.
Комментарии (11)
axelk
07.07.2022 12:24Если нужен вариант только удаленного доступа к домашнему серверу без публичного адреса и нет своей VPS я использую mikrotik с пакетом zerotirer из extra packages. Для домашнего сегмента куда нужен доступ добавил zerotier managed route, на конечные устройства дома ничего не надо устанавливать.
DaemonGloom
07.07.2022 12:55Есть только мелкая проблема — лицензию на CHR сейчас купить проблематично.
Переходим к OSPF. Перед настройкой OSPF обязательно делаем статичным интерфейс на CHR через "SSTP Server Binding".
Или можно поднять OSPF на динамических интерфейсах и маршруты будут раздаваться любому клиенту подключенному. Хуже это не сделает, зато добавлять новых клиентов удобнее.
f0xdr0
07.07.2022 14:21Скажите, а почему вы решили использовать OSPF? На первый взгляд кажется что поднять вторую BGP сессию до home router проще и логичнее...
Hruke Автор
07.07.2022 14:45+1Думаю, что для читателя OSPF будет ближе, так-как есть много мануалов по его настройке на разном оборудовании. В целом, Вы правы. Для доставки маршрутов можно использовать и IBGP. По сходимости, не могу сказать кто быстрее будет, так-как маршрутов не так много. Работая внутри автономной системы, для меня ближе протоколы IGP. С одним из них и затеял связку. На практике, можно попробовать и другие протоколы динамической маршрутизации.
NikaLapka
08.07.2022 20:04Пожалуйста не примите за критику, а просто несколько личных рассуждений.
Я не знаю как купить VPS, если карты не принимаются. Не видел ни одной статьи на этот вопрос, за исключением "оплачиваем криптой", где автор немного умолчал, что для покупки на ... минимальная сумма от 5000-7000 руб с шансом "ваш платёж приостановлен, для возврата денег пришлите копию паспорта с вашей фотографией..".
Так же я не понимаю зачем на VPS ставить CHR. Т.к. это а) платно, 3000 руб, б) лишает большинства преимуществ отдельного сервера в Интернете в) неподготовленный пользователь не сможет установить chr, если для установки потребуются хотя бы немножечко не тривиальные действия.
На RouterOs 7 туннель wireguard работает(на удивление) очень хорошо, и более того очень хорошо работает с бесплатным wireguard от protonvpn, где даже недорогие младшие модели до hap ac lite включительно предоставляют 30-40 Мбит, что более чем достаточно для веб-сёрфинга.
Вариант как маркировать, как маршрутизировать, всё же я бы оставил на усмотрение пользователя. Кому-то хочется BGP\OSPF, кому-то достаточно
/ip firewall mangle add action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=mark_conn1 src-address=192.168.1.2
, кто-то сам antifiller считает не безопасным..И сколько бы я не пытался понять, причём тут NAT так и не смог.
wazzard
В теме вроде бы все раскрыто, но не будет ли проще такой вариант:
- поднять на VPS wireguard
- поднять на микротике туннель до VPS, через wireguard
- воспользоваться все тем же скриптом по выгрузке списка заблокированных адресов от РКН
- добавить правило на маркировку трафика из списка заблокированных адресов РКН
- добавить правило на отправку маркированного трафика через туннель wireguard
Hruke Автор
Да. Можно и так. Скрипт с периодической загрузкой работает хорошо. Мне же хотелось попробовать BGP+OSPF для разогрева :-)
umatrix
Policy based routing плохо дружит с fasttrack connection, а иногда без него скорость передачи данных довольно сильно занижается.
IgorGIV
О какой именно проблеме речь? У меня как раз используется вышеописанная схема и прекрасно работает. Помню, были какие-то трудности в открытии некоторых ресурсов, но всё решилось добавлением опции routing mark=main (в моём случае это основной маршрут, не тот, который тунель к VPS) в правиле fasttrack connection и с тех пор больше не припомню сложностей.
Manrus
Готовые списки можно заменить вариантом с авто распознаванием блокировки. Если провайдер использует DPI и сбрасывает соединения анализируя sni то средствами микротика можно распознавать такие блокировки и автоматом добавлять ip в список. Дальше маркировка и заворачивание в туннель.
Таким образом решается проблема с хранением огромных списков в озу и их обновлении.