На написание статьи меня сподвиг интересный Tutorial от Валерия Лутошкина с настройкой BGP и VPS на оборудовании MikroTik с подключением к проекту antifilter. Это решение натолкнуло меня на домашнюю практику с протоколами динамической маршрутизации. Попробовав его реализовать, я понял, что мой домашний провайдер не даёт манёвров для действий и блокирует порт TCP 179 по умолчанию. В дополнение к этому у меня нет белого IP адреса и я за NATом. В общем все прелести рядового пользователя. Текущая статья является у меня первой. Конструктивную критику и пожелания приветствую.

Предыстория

Для решения задачи по обходу блокировок в домашних условиях, я использовал вариант с покупкой VPS в свободной зоне глобальной сети. Установил на VPS CHR. Далее на домашнем MikroTik создал туннель через SSTP и отдельную Wi-Fi сеть со своим сегментом и бриджом. С использованием маркировки, статикой направлял пакеты в туннель до VPS. Netwatch контролировал наличие активного туннеля до VPS и активный маршрут в таблице маршрутизации на случай, если туннель упадёт, чтобы устройства во втором сегменте полностью не потеряли интернет.

Как выглядела настройка роутера MikroTik
На изображении home_bridge - это обычная сеть с Wi-Fi и home_vps_bridge - это второй сегмент с маркировкой трафика от устройств в сторону туннеля до VPS.
На изображении home_bridge - это обычная сеть с Wi-Fi и home_vps_bridge - это второй сегмент с маркировкой трафика от устройств в сторону туннеля до VPS.

Добавлено правило в 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

Схематичное изображение решения для доступа к сети интернет через VPS с использованием двух сегментов в домашней сети.
Схематичное изображение решения для доступа к сети интернет через VPS с использованием двух сегментов в домашней сети.

И всё бы хорошо, но решение было сделано на коленке и переключаться между 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 интерфейс был статичным и не исчезал при отключении клиента (домашнего роутера). В вашем случае это может быть и другой интерфейс.

Настраиваем статичный интерфейс для клиента (Home router)
Настраиваем статичный интерфейс для клиента (Home router)

Далее включаем у 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.

Пример статуса OSPF соседей на CHR. У Home router статус соседа должен быть аналогичный.
Пример статуса OSPF соседей на CHR. У Home router статус соседа должен быть аналогичный.

После этого в таблице маршрутизации CHR появятся маршруты до connected сетей домашнего роутера, а на Home router появится несколько десятков тысяч маршрутов в сторону CHR. У меня стоит HAPac2 и он вполне справляется с 11000 тыс. маршрутами и LSA в OSPF. Загрузка CPU и RAM в норме. Для дома это вполне хороший результат.

Загрузка CPU и RAM после получения всех LSA в OSPF
Загрузка CPU и RAM после получения всех LSA в OSPF
Общий список маршрутов прилетевший от CHR на домашний роутер
Общий список маршрутов прилетевший от CHR на домашний роутер

Финансы

По финансовым расходам у нас получается следующая картина:

  • Стоимость лицензии CHR около 3000 руб. либо используем бесплатную версию;

  • Стоимость арендной платы за VPS 300 руб./мес. Может чуть больше.

Заключение

Таким образом мы настроили довольно интересную связку. Наш Home router самостоятельно принимает решение куда отправлять пакеты. Вся информация через BGP прилетает на VPS и передаётся на наш домашний роутер по OSPF. Весь процесс максимально автоматизирован, чтобы настроить и комфортно пользоваться глобальной сетью дома. Вместо OSPF можно попробовать запустить другие протоколы IGP.

Комментарии (11)


  1. wazzard
    07.07.2022 11:16
    +1

    В теме вроде бы все раскрыто, но не будет ли проще такой вариант:
    - поднять на VPS wireguard
    - поднять на микротике туннель до VPS, через wireguard
    - воспользоваться все тем же скриптом по выгрузке списка заблокированных адресов от РКН
    - добавить правило на маркировку трафика из списка заблокированных адресов РКН
    - добавить правило на отправку маркированного трафика через туннель wireguard


    1. Hruke Автор
      07.07.2022 11:38

      Да. Можно и так. Скрипт с периодической загрузкой работает хорошо. Мне же хотелось попробовать BGP+OSPF для разогрева :-)


    1. umatrix
      08.07.2022 12:03

      Policy based routing плохо дружит с fasttrack connection, а иногда без него скорость передачи данных довольно сильно занижается.


      1. IgorGIV
        08.07.2022 14:42

        О какой именно проблеме речь? У меня как раз используется вышеописанная схема и прекрасно работает. Помню, были какие-то трудности в открытии некоторых ресурсов, но всё решилось добавлением опции routing mark=main (в моём случае это основной маршрут, не тот, который тунель к VPS) в правиле fasttrack connection и с тех пор больше не припомню сложностей.


    1. Manrus
      08.07.2022 23:55

      Готовые списки можно заменить вариантом с авто распознаванием блокировки. Если провайдер использует DPI и сбрасывает соединения анализируя sni то средствами микротика можно распознавать такие блокировки и автоматом добавлять ip в список. Дальше маркировка и заворачивание в туннель.

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


  1. axelk
    07.07.2022 12:24

    Если нужен вариант только удаленного доступа к домашнему серверу без публичного адреса и нет своей VPS я использую mikrotik с пакетом zerotirer из extra packages. Для домашнего сегмента куда нужен доступ добавил zerotier managed route, на конечные устройства дома ничего не надо устанавливать.


  1. DaemonGloom
    07.07.2022 12:55

    Есть только мелкая проблема — лицензию на CHR сейчас купить проблематично.


    Переходим к OSPF. Перед настройкой OSPF обязательно делаем статичным интерфейс на CHR через "SSTP Server Binding".

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


  1. f0xdr0
    07.07.2022 14:21

    Скажите, а почему вы решили использовать OSPF? На первый взгляд кажется что поднять вторую BGP сессию до home router проще и логичнее...


    1. Hruke Автор
      07.07.2022 14:45
      +1

      Думаю, что для читателя OSPF будет ближе, так-как есть много мануалов по его настройке на разном оборудовании. В целом, Вы правы. Для доставки маршрутов можно использовать и IBGP. По сходимости, не могу сказать кто быстрее будет, так-как маршрутов не так много. Работая внутри автономной системы, для меня ближе протоколы IGP. С одним из них и затеял связку. На практике, можно попробовать и другие протоколы динамической маршрутизации.


  1. SantaClaus16
    08.07.2022 11:50

    Микротик фу


  1. NikaLapka
    08.07.2022 20:04

    Пожалуйста не примите за критику, а просто несколько личных рассуждений.

    1. Я не знаю как купить VPS, если карты не принимаются. Не видел ни одной статьи на этот вопрос, за исключением "оплачиваем криптой", где автор немного умолчал, что для покупки на ... минимальная сумма от 5000-7000 руб с шансом "ваш платёж приостановлен, для возврата денег пришлите копию паспорта с вашей фотографией..".

    2. Так же я не понимаю зачем на VPS ставить CHR. Т.к. это а) платно, 3000 руб, б) лишает большинства преимуществ отдельного сервера в Интернете в) неподготовленный пользователь не сможет установить chr, если для установки потребуются хотя бы немножечко не тривиальные действия.

    3. На RouterOs 7 туннель wireguard работает(на удивление) очень хорошо, и более того очень хорошо работает с бесплатным wireguard от protonvpn, где даже недорогие младшие модели до hap ac lite включительно предоставляют 30-40 Мбит, что более чем достаточно для веб-сёрфинга.

    4. Вариант как маркировать, как маршрутизировать, всё же я бы оставил на усмотрение пользователя. Кому-то хочется 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 считает не безопасным..

    5. И сколько бы я не пытался понять, причём тут NAT так и не смог.