Настройка BGP для обхода блокировок, версия 3, без VPS

  • Tutorial

Зачем всё это делается в принципе и как оно устроено логически — описано в первой и второй статьях.


После их публикации я получил несколько вопросов от людей, которые пользуются VPN с не принадлежащих им ресурсов (например, приобретающих коммерческую услугу VPN). Этим людям раньше я советовал завести VPS для развертывания BGP-сервиса или каким-то еще образом получить доступ к серверу на Linux.


Но с сегодняшнего дня для них (и для всех остальных) есть более удобный вариант — на бесплатном сервисе antifilter.download появилась возможность автоматически настраивать BGP-сессию с вашим маршрутизатором.


Для его использования вам необходимо иметь всего лишь:


  • фиксированный маршрутизируемый IP-адрес (т.н. "белый". Он может выделяться динамически, но должен быть всегда одним и тем же); UPD. Уже не важно, см. ниже по тексту.
  • маршрутизатор с поддержкой протокола BGP (в статье, традиционно, пример построен на базе RouterOS маршрутизаторов Mikrotik);
  • уже настроенный туннель VPN с этого маршрутизатора.

Умолчания в тексте статьи


  • имя интерфейса туннеля на маршрутизаторе — gre-tunnel1
  • номер автономной системы с вашей стороны — 64512 (выбираете сами в соответствии с RFC6996 — из диапазона 64512-65534 включительно).
  • внешний IP-адрес вашего маршрутизатора — 81.117.103.94

Последовательность действий, если вы хотите управлять сервисом и у вас есть фиксированный маршрутизируемый IP-адрес


Делаем раз


заходим из вашей сети (это важно) на сайт antifilter.download, проматываем до раздела BGP, нажимаем "Активировать управление BGP".


Делаем два


проверяем, что сайт показывает именно наш IP, вводим выбранный номер своей автономной системы, помечаем чекбоксы, какие именно маршруты отдавать, подтверждаем капчу, нажимаем "Создать пиринг". После этого сайт покажет, что для вашего адреса настройки существуют. Время применения настроек в сервисе — не более 5 минут.


Делаем три


заходим на свой маршрутизатор Mikrotik и настраиваем на нем BGP-пиринг с сервисом:


/routing bgp instance set default as=64512 ignore-as-path-len=yes router-id=81.117.103.94
/routing bgp peer add in-filter=bgp_in keepalive-time=30s multihop=yes name=antifilter remote-address=192.3.134.152 remote-as=65432 ttl=default
/routing filter add action=accept chain=bgp_in comment="Set nexthop to VPN" set-in-nexthop-direct=gre-tunnel1

Не забываем поменять умолчательные AS, IP и имя интерфейса на ваши. В вышеприведенных командах должно быть сделано три замены — не больше и не меньше.


… и всё работает


Если с момента нажатия кнопки "Создать пиринг" прошло более 5 минут и вы всё правильно настроили — у вас уже всё работает.


Если вы захотели поменять список выгружаемых в вашу сторону префиксов — это делается через удаление настроек на веб-странице и создание их вновь, благо — из настроек там одно число и три галочки.


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


Настоятельно не рекомендую подключать список одиночных IP — даже топовым SOHO-маршрутизаторам Mikrotik от него не очень хорошо, а средние, например hAP lite, ведут себя крайне непредсказуемо.


UPD. Последовательность действий, если у вас нет фиксированного IP или вас устраивают настройки по умолчанию


Делаем раз


заходим на свой маршрутизатор Mikrotik и настраиваем на нем BGP-пиринг с сервисом:


/routing bgp instance set default as=64999 ignore-as-path-len=yes router-id=81.117.103.94
/routing bgp peer add in-filter=bgp_in keepalive-time=30s multihop=yes name=antifilter remote-address=192.3.134.152 remote-as=65432 ttl=default
/routing filter add action=accept chain=bgp_in comment="Set nexthop to VPN" set-in-nexthop-direct=gre-tunnel1

Не забываем поменять умолчательные router-id и имя интерфейса на ваши. В вышеприведенных командах должно быть сделано две замены — не больше и не меньше. В качестве router-id можете написать в принципе любое тридцатидвухбитное число в формате IP-адреса, но чтобы не вызвать спецэффектов при совпадении, я бы рекомендовал использовать ваш текущий внешний IP-адрес. При его изменениях менять его необходимости не будет.
Номер AS в этом случае фиксированный, 64999, как и набор анонсируемых префиксов (ipsum+subnet), если кому-то этого чересчур много — всегда можно при приеме фильтровать по комьюнити или другими способами манипулировать анонсами.


… и всё работает


Если после активации настроек на вашем роутере прошло более 5 минут и вы всё правильно настроили — у вас уже всё работает.
При смене IP-адреса сессия будет восстанавливаться ориентировочно в течение 5 минут.


Заключение


Да, я понимаю, что уже "горшочек, не вари", и надеюсь, что на этом для меня тема обхода блокировок закрыта.


На вопросы в комментариях, традиционно, отвечу, с настройкой помогу.

Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 57
    0
    Сколько памяти займут 13 тысяч префиксов на микротике?
      0
      на hap ac2 у меня после подключения BGP свободная оперативка уменьшилась на мегабайт 40. Правда после перехода на полную выгрузку дополнительно ушло лишь 10.
        0
        На hap ac у меня сейчас свободно 51.1 MB из 128. При задизабленном BGP (т.е. процесс в памяти, но префиксы не подгружены) — 53.8 свободно. Так что не в памяти там проблемы :)
        0
        Спасибо!
        Выбрал полный список, прилетело 100к+ маршрутов. Mikrotik CCR1009 впал в ступор(с отвалом WinBox) на 2 минуты потом полет нормальный.
          0
          Пожалуйста.
          Там, кстати, неочевидно — список subnet в любом случае имеет смысл забирать тоже, пусть вместе со списком хостов. Потому что они не полностью взаимно перекрыты. Т.е. в вашем случае лучше ставить первую и третью галки.
            0
            Кстати, ввиду последней тактики РКН «забанил 1000 ip, а потом через 15 минут разбанил почти всё» имеет смысл юзать список с /24 подсетями, а не со 100к единичных ip.
            Там все равно баны и разбаны по одним и тем же подсетям идут, к тому же не известен «лаг провайдера», как быстро он получает и применяет правила.
              0
              Да, можно и так. Но тут еще могут некоторые ограничения вылезти. Например, IP моего VPS забанен на одном нужном ресурсе (к сожалению, обнаружил слишком поздно). А IP ресурса попадает как раз в одну из /24 подсетей… А желания писать дополнительную программу, которая будет исключать из списка подсетей эти IP у меня нет. Тут-то полная выгрузка и помогает.

                0
                Тут можно не дополнительную программу, а просто статический маршрут на своем роутере на этот IP через ваш дефолт. Статика всегда победит динамику, если не принять для обратного специальных мер.
                  +1
                  Я на антизапрете для VPN сделал собственный DNS-сервер, который, при попытке резолва зоны заблокированного домена, добавляет в iptables соответствие (маппинг) свободного адреса из внутреннего выделенного диапазона в настоящий IP-адрес, и отдает клиенту адрес из внутреннего диапазона.
                  Т.е.
                  Клиент: rutracker.org?
                  Сервер: rutracker.org? 195.82.146.214! 10.224.0.1→195.82.146.214
                  Клиент: rutracker.org→10.224.0.1

                  Такой способ работает с «неправильными» DPI, которые блокируют всю доменную зону целиком, а не только заблокированный домен (блокируется *.domain.com, если в реестре есть только domain.com, такое, например, у Yota), работает с доменами, которые ротируют IP-адреса с целью обхода блокировок, а также не создает проблем при частом обновлении адресов.
              –1
              А как сервис переживает динамические IP-адреса у клиентов? Если вдруг оператор поменяет IP — все отвалится?
                +1
                статью не читай — комментарии пиши ((
                  0
                  Да, bgp хочет связки с IP.
                  Можно, если vpn со статикой, делать пиринг прямо через туннель, с того адреса (для этого надо сначала статикой прописать маршрут на сервис через туннель). А вот если ни там, ни там — тогда печаль.
                    0
                    UPD. Уже исправлено, работает с динамикой, см. текст статьи.
                  0
                  Почему-то с роутера пингуется запрещенка, а с компьютера нет.
                  Что может быть?
                    0
                    Разобрался.
                    Заголовок спойлера
                    не все костыли убрал после «обычного списка ip и mangle правила, с проставлением routing mark».
                    В masquerade правиле был фильтр по routing mark.
                    0
                    Спасибо за сервис!

                    А вот зачем загружать себе список отдельных IP — «шоб было», because I can?

                    Технически даже если, скажем, в черном списке один адрес из /24 подсети, а трафик полетит через ВПН для всей этой подсети, сильно большой проблемы, наверняка, не будет. Зато маршрутизатору будет полегче, факт.

                    Хотя я понимаю владельцев CCR1009 железок: имея (при такой-то цене!) 2 Гб ОЗУ, прямо уже не знаешь, на что их потратить еще (там FV помещается много десятков раз, не то что список блокировок. Но — чем больше список, тем больше вынужден «думать» над ним ЦП роутера, а это не всегда то, за чем следует гнаться).

                    Пользуясь случаем: никто не знает, что за туннельный брокер ipv6.ip4market.ru? Очень они вовремя появились!
                      0
                      У каждого свои хотелки по дискретности, потому что свои модели использования. Большой список можно суммаризовать и фильтровать по желанию на своем конце, а из суммаризованного отдельные уже не выковыряешь. Поэтому пусть будут возможности для всех.

                      Про брокера — есть такая компания, торгует адресами по ценам повыше рынка. На хайпе решили использовать часть своего пула IPv6 для такого вот сервиса. У всех брокеров 6in4 не рядом с тобой одна проблема — резкий рост латентности, потому что оно сначала должно по v4 до него долететь, а уже потом начинается выбор оптимальных маршрутов и прочие вкусности. Если вы недалеко от их точки терминации — удобно. Мне 75 мс до них, долго.
                        0
                        Потому и спросил, что мне до них «ближе», чем до he.net-овских точек приземления. С другой стороны, he.net работает давно и надежно, а здесь нет уверенности, что сервис не сдуется деградирует, когда на него зацепятся не 5, а 50000 клиентов, и каждый из них начнет не тестовый пинг по туннелю гонять, а, спасибо слову из трех букв, через туннель будет работать со своими обычными сайтами (с теми из них, кто уже смог стать dual-stack). Что актуально, как раз самые посещаемый сайты (как Гугл, так и ВК с FB) давно уже сделали поддержку IPv6, так что на туннель может лечь приличный % от обычного потребления трафика клиентов (от профиля потребления каждого, конечно, зависит), так что как бы не оказалось, что канал(ы) брокера такой трафик просто не осилят.

                        Посмотрим, конечно. Тут иначе как опытом не проверить.
                          0
                          Я давно завел себе v6, но серьезных всплесков трафика по нему не наблюдаю. Единицы мегабит в 5-минутном усреднении. Правда, торрент-машина у меня не дуалстек, возможно когда я рискну и туда затащить v6 — потребление подрастет.
                            0
                            Я проверки ради конторский прокси сделал dual-stack, и наблюдаю, что чуть не 70% входящего трафика теперь приходится на IPv6. Это, конечно, от юзеров и их профиля использования зависит, но целый немаленький офис сидит.
                        0

                        Кстати, недавно вышедший hap ac2 тоже прекрасно справляется с более 100 тыс. префиксов. Загрузка процессора кроме момента обновления префиксов (около 6 секунд) стабильно в районе нуля. А еще списки 1+3 при честной суммаризации дают уже ~84 тыс. префиксов = почти 20% сжатие «без потерь», что тоже несколько ресурсы разгружает

                          0
                          Так Микротик отлично держит BGP как протокол, вопрос только, что на слабых машинках расчет занимает мно-о-ого времени (ну и нет в нем многих мелких фич, которые помогают в ПО крупных вендоров — нам на такой задаче они и не нужны). Ну и смысл держать «в голове» столько лично мне не ясен, если вы только не провайдер и не имеете много аплинков. Как по мне, для простых применений проще грубо агрегировать таблицу в меньшее число менее точных маршрутов.

                          У Микротиков BGP обрабатывается одним ядром, так что, грубо говоря, важна не многоядерность, а именно «тупая» вычислительная сила одного ядра. В hAP AC2 в проце 4 ядра, на частоте 716 Мгц, и 128 Мб ОЗУ, а у более старых моделек было одно ядро и 600 Мгц частоты, и 128 же Мб ОЗУ — в этом смысле hAP не сильно быстрее старых машинок (если не учитывать, возможно, разную архитектуру процов и скорость ОЗУ). По практике так и есть, 951 девайс жует таблицу те же несколько секунд.
                        0
                        У меня на RouterOS v6.42.2 (stable) почему-то долго висит в состоянии Connect. С чем может быть связано? Вроде все правильно делал. Все перерыл.
                          0
                          Возможно, у вас ip firewall настроен так, что не выпускает пакеты на неизвестный порт от роутера. Попробуйте 1) попинговать с роутера 192.3.134.152 (должен отзываться) и 2) прислать мне в личку ваш IP-адрес — можно посмотреть, что там с настройками и доступностью.
                          0
                          Очень интересная идея, вот прямо супер-мега, спасибо.
                          Попробовал, действительно всё поднялось почти мгновенно.

                          Единственное, что расстраивает — на микротике все эти адреса идут вперемешку с собственными маршрутами и банально мешаются. Да, можно отфильтровать BGP маршруты, но это тоже не то.
                          Сейчас на микротике использую AddressList, mark routing/connection + routing mark в таблице маршрутизации. Но у меня в bypass'е в VPN настроено буквально десяток адресов тех ресурсов, которые мне нужны.

                          Никто не в курсе, насколько вариант с маркировкой mark connection кушает больше ресурсов по сравнению с прогрузкой таблицы маршрутизации для VPN bypass'а? У меня относительно старый RB951G, но его до сих пор хватает на все задачи (кроме WiFi 5G, которого у него нет).

                            0
                            Роутер 951G-2HnD. 13+к BGP маршрутов держит играючи, сильного потребления оперативки не замечено, лагов с установлением соединения не наблюдается. В целом это более удачное решение (BGP) чем Layer 7 -> Address list -> mark connection -> mark routing -> route routing mark
                            0
                            Есть предложение по улучшению сервиса и отвязки от необходимости иметь статический IP адрес на стороне клиента:
                            Поднять VPN сервер, на нём выдавать статические серые IP адреса и поднимать пиринг с этими адресами. Через VPN пропускать только BGP трафик до роутера.

                            В этом случае клиент с динамическим белым или даже с динамическим серым IP сможет воспользоваться этим сервисом:
                            — одна VPN сессия для поднятия BGP сессии
                            — вторая VPN сессия для терминации трафика через альтернативный маршрут
                              0
                              Проблему владельцев динамики этот вариант решит, да. Но не уверен, что она настолько массовая, чтобы строить такие конструкции. Неизящно и много шевелений с клиентской стороны требует, а значит и квалификации.

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

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

                                Очень даже массовая. Физикам крайне редко бесплатно дают статические белые IP адреса. Либо плати денежку, либо опция вообще не предусмотрена.
                                Дома я плачу 150 руб/мес за статический IP, у родителей провайдер вообще не предоставляет такой опции.

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

                                Можно сделать финт — ловить все попытки установления сессии (да хоть wireshark'ом декодировать пакет) и на их основе прописывать пира в конфиге bird'а.
                                  0
                                  Про финт понимаю, возможно. Но для его реализации в продакшн всё равно нужно реализовывать какой-то проксирующий сервис. Если даже принимать сессии можно через netcat, то всю остальную обработку реализовать (если нет конфига — создать, если есть — просунуть сессию в bird) я так сходу и не придумаю как. Без кодера не обойтись.
                                    +1
                                    Зачем проксировать?
                                    Клиент же постоянно делает повторные попытки переподключения.

                                    В пассивном режиме прослушивать трафик tshark'ом и им же декодировать в любом удобном формате (можно нужные поля в тексте, можно даже в JSON'е).
                                    Отдельным скриптом-демоном принимать входящий поток, вытаскивать оттуда IP адрес пира и проверять наличие пира в конфиге bird'а. Если пира нет, то добавлять в конфиг и делать bird'у reload.

                                    Сейчас у вас уже есть скрипт, который добавляет пира в конфиг bird'а на основе HTTP запроса на страницу, нужно будет его буквально совсем чуть-чуть модифицировать и всё готово :)
                                      0
                                      Спасибо за идею, натолкнула на мысль покопаться в дебаге bird'а. Как найду пару часов (вероятнее всего на ближайших выходных) — попробую реализовать схему.

                                      Для таких клиентов, очевидно, выбирать, что именно анонсировать, не получится, поэтому для них будет дефолтный номер AS и дефолтный набор из суммаризованных хостов+подсетей.
                                        0
                                        Вроде бы и с динамических адресов теперь всё работает и можно пользоваться, смотрите апдейты по тексту статьи.
                                  0
                                  решение для динамических IP, опробовано на hac2 сегодня

                                  /ip route
                                  # роутить трафик до своего VPS напрямую (мой случай когда VPS не заблокирован, но прилетает подсеть /19 от BGP)
                                  add distance=1 dst-address=YOU_VPS_IP/32 gateway=rostelecom
                                  # путь до antifilter.download чтобы зарегить пир BGP
                                  add comment=antifilter distance=1 dst-address=192.3.134.152/32 gateway=ovpn-linode

                                  # добавить hold-time=4m для соответствию удаленному пиру и чтобы в лог ошибки не валились
                                  /routing bgp peer
                                  add hold-time=4m in-filter=bgp_in multihop=yes name=antifilter remote-address=192.3.134.152 remote-as=65432 ttl=default
                                    0
                                    В этом случае требуется, чтобы у вас был статический IP на VPS, где вы терминируете туннель. Мы обсуждали ситуацию, в которой собственной VPS нет, туннель берется у стороннего VPN-сервиса и там тоже выделяется серый адрес под NAT или динамика. В этом случае просто нет IP, который будет одинаков всё время существования стыка.
                                      0
                                      ну тогда потребуется маленький скрипт с вашей стороны
                                      чтобы при поднятии туннеля дергать его с микротика например так:
                                      /tool fetch antifilter.download/add_me_to_peers/?list=2&list=1&key=blabla
                                      и добавлять IP в пиры bird

                                      а в самом микротике при поднятии vpn
                                      /routing bgp instance set default router-id=VPN-IP

                                      конечно тут нужно отслеживать поднятие туннеля и поиск VPN-IP — но это решаемо
                                        0
                                        Я думаю, что описанный чуть выше в треде вариант — когда со стороны сервиса детектируется попытка присоединения и под нее создается конфиг — наиболее комфортен для использования большинству потенциальных пользователей. Попробую его реализовать, если не получится — можно будет перейти к сервису, аналогичному DDNS по принципу работы.
                                  0
                                  Всё хорошо, всё отлично, вот только при наличии 2-х и более провайдеров эта задумка не имеет смысла. Стандарт BGP требует минимум 2-х пиров для успешной реализации. Да, для обычного домашнего пользователя — ситема работать будет (немного подшпмпнить с фильтрами и вуаля), но для использования с несколькими провайдерами (у меня их 3 на входе и все с белыми IP) начинается переколбашивание сети. Необходимо подключать других пиров, но нельзя, так как со стороны antifiltr только одна AS.
                                    0
                                    Вы можете легко управлять маршрутизацией по провайдерам со своей стороны. Рассматривайте этот пир только как источник префиксов, но не как источник дестинейшнов. Для выбора дестинейшна можно устраивать на своем маршрутизаторе раут фильтры любой сложности, проверяя доступность и прочие параметры.

                                    Если же вы про то, что при падении одного провайдера вам нужно пириться с другого — так и тут все элементарно просто. Наличие одной AS с противоположной стороны никоим образом не мешает, просто вам нужно последовательно настроить отдельные сессии с каждого из ваших IP (например, перекладывая статику на antifilter в разные интерфейсы). Тогда одна из сессий всегда будет поднята. Только включайте периодически другие адреса (опять же, можно статикой), потому что настройки пиров, с которыми сессий не было более 3 месяцев, будут удаляться.
                                      0
                                      В моей конфигурации, когда используется loadbalancing на двух одинаковых каналах и третий как резервный (через него только при падении двух основных) Данная схема нереализуема без появлкния нормальных пиров. Источник префикса, повторюсь, хорош для одного прова, для двух и более — только адресслист. Да и нагрузка меньше. Плюс, каким образом вы промаркируете маршруты с одной BGP сессии на второго провайдера. Это не реально, сам протокол этого не позволяет. Только несколько пиров позволит нормально маркировать маршруты и пользователь сможет ходить.
                                      Я не говорю что данная конфигурация не жизнеспособна. Она не жизнеспособна в моём конкретном случае.
                                        0
                                        Я не понимаю, что конкретно вы не можете реализовать с одним источником? Вам в любом случае надо заворачивать трафик на эти адреса в туннель — у вас несколько туннелей или один перестраивается через разных провайдеров? В обоих случаях можно реализовать их использование. В первом случае вам, например, поможет рекурсивный роут на некстхоп, во втором вообще ничего дополнительного реализовывать не надо.
                                        Опишите подробнее пример, какая именно ситуация у вас не реализуется?
                                          0
                                          Схема в двух словах:
                                          3 uplink
                                          1 ovpn tunnel
                                          Это основной маршрутизатор.
                                          За ним клиенты будут ходить по Вашей схеме — почти без проблем, ну некоторые адреса всё равно не открываются. Мелочи, подмену DNS в этом случае ни кто не отменял (при условии глубокого dpi)
                                          Но, при вашей схеме сам рутер не может отрезолвить нужные параметры и уйти через нужные маршруты, ибо в прерутинге нет понятия префикса. Через адреслист — проблем нет, прерутинг работает. И ни одного сбоя по проблемным сайтам. Заворачивает как надо. Причём, я смотрю лог маршрутизации, да, он уходит куда надо, в нужный интерфейс, но тут-же прилетает ответ от провайдера, что ресурс закрыт. При использовании адреслиста такой проблемы нет.

                                          Ради хохмы (чтоб убедиться что я не накосячил) поднял разные BGP сессии на свои сервера. И, как я и говороил, при наличии 2-х и более провайдеров просто необходимо использовать несколько пиров. Просто так префиксы не передать. И сам маршрутизатор не будет ходить на заблокированные адреса.
                                            0
                                            Всё равно не совсем понимаю. Вы про то, что рутер не может обнаружить, что какие-то адреса не открываются, несмотря на то, что трафик на них уходит в туннель, и перемаршрутизировать их в другое место (какое другое, другой туннель?)? Что вы подразумеваете под «отрезолвить нужные параметры»? Какие параметры нужные — опишите, пожалуйста, подробнее.

                                            Проблемы с операторской подменой DNS решаются использованием внешних DNS-серверов (гугл, cf и т.п.) и обязательным заворачиванием их в туннель, прямо статикой.

                                            Вопрос про «несколько пиров» мне пока тоже непонятен, я не могу разобраться, что у вас не получается с одним пиром. Конечно, не разделяя контексты маршрутизации, вы не можете поднять к одному и тому же IP две одновременных сессии с двух разных адресов — но тут ключевое слово «одновременных», а в этом применении одновременность не особо важна, время схождения BGP можно и потерпеть. Мало того, если у вас один ovpn-туннель — вы можете просто поднимать сессию с внешнего адреса туннеля (у вас же там NAT), так что при перекладывании туннеля на другого оператора у вас даже BGP развалиться не успеет.
                                              0
                                              Вот моя конфа:
                                              /ip firewall mangle
                                              add action=mark-routing chain=prerouting dst-address-list=ddosed new-routing-mark=ddoser-route-mark passthrough=no src-address-list=ddoser
                                              add action=mark-routing chain=output comment="Telegram (router) throuth Tor" dst-address-list=tor-traff log-prefix=telega new-routing-mark=to_tor passthrough=no
                                              add action=mark-routing chain=prerouting comment="Email throuth ISP1" dst-port=25 in-interface=WiFi+LAN log-prefix=email new-routing-mark=route_isp_01 passthrough=no protocol=tcp
                                              add action=mark-routing chain=prerouting comment="throuth Tor" dst-address-list=tor-traff log-prefix=tor new-routing-mark=to_tor passthrough=no
                                              add action=mark-routing chain=prerouting comment="throuth Tor" dst-address-list=blocked-addr log-prefix=tor new-routing-mark=to_tor passthrough=no
                                              add action=accept chain=prerouting dst-address=192.168.7.0/24
                                              add action=accept chain=prerouting dst-address=192.168.0.0/24
                                              add action=accept chain=prerouting dst-address=198.51.100.1
                                              add action=mark-connection chain=input comment=PCC connection-state=new in-interface=00.pppoe-ISP01 new-connection-mark=conn_isp_01 passthrough=yes
                                              add action=mark-connection chain=input connection-state=new in-interface=00.pppoe-ISP02 new-connection-mark=conn_isp_02 passthrough=yes
                                              add action=mark-connection chain=input connection-state=new in-interface=09.SXT new-connection-mark=conn_backup passthrough=yes
                                              add action=mark-connection chain=prerouting connection-state=related in-interface=00.pppoe-ISP01 new-connection-mark=conn_isp_01 passthrough=yes
                                              add action=mark-connection chain=prerouting connection-state=related in-interface=00.pppoe-ISP02 new-connection-mark=conn_isp_02 passthrough=yes
                                              add action=mark-connection chain=prerouting connection-state=related in-interface=09.SXT new-connection-mark=conn_backup passthrough=yes
                                              add action=mark-routing chain=output connection-mark=conn_isp_01 new-routing-mark=route_isp_01 passthrough=yes
                                              add action=mark-routing chain=output connection-mark=conn_isp_02 new-routing-mark=route_isp_02 passthrough=yes
                                              add action=mark-routing chain=output connection-mark=conn_backup new-routing-mark=route_backup passthrough=yes
                                              add action=mark-connection chain=prerouting dst-address-type=!local new-connection-mark=IT39_PCC_1 passthrough=yes per-connection-classifier=both-addresses:2/0 src-address-list=BOGONS
                                              add action=mark-connection chain=prerouting dst-address-type=!local new-connection-mark=IT39_PCC_2 passthrough=yes per-connection-classifier=both-addresses:2/1 src-address-list=BOGONS
                                              add action=mark-routing chain=prerouting connection-mark=IT39_PCC_1 new-routing-mark=IT39_1 passthrough=yes src-address-list=BOGONS
                                              add action=mark-routing chain=prerouting connection-mark=IT39_PCC_2 new-routing-mark=IT39_2 passthrough=yes src-address-list=BOGONS
                                              add action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=oTher passthrough=yes

                                              /ip route
                                              add comment="Local IP throught Tor" distance=1 gateway=00.to-Pi routing-mark=to_tor
                                              add distance=1 routing-mark=ddoser-route-mark type=blackhole
                                              add check-gateway=ping comment=PCC distance=1 gateway=00.pppoe-ISP01 routing-mark=route_isp_01
                                              add check-gateway=ping distance=1 gateway=00.pppoe-ISP02 routing-mark=route_isp_02
                                              add check-gateway=ping comment=BACKUP distance=1 gateway=198.51.100.1 routing-mark=route_backup
                                              add check-gateway=arp distance=1 gateway=00.pppoe-ISP01 routing-mark=IT39_1
                                              add check-gateway=arp distance=2 gateway=00.pppoe-ISP02 routing-mark=IT39_1
                                              add check-gateway=arp comment=BACKUP distance=3 gateway=198.51.100.1 routing-mark=IT39_1
                                              add check-gateway=arp distance=1 gateway=00.pppoe-ISP02 routing-mark=IT39_2
                                              add check-gateway=arp distance=2 gateway=00.pppoe-ISP01 routing-mark=IT39_2
                                              add check-gateway=arp comment=BACKUP distance=3 gateway=198.51.100.1 routing-mark=IT39_2
                                              add comment="Local IP to backuplink" distance=1 gateway=198.51.100.1 routing-mark=to_backuplink
                                              add check-gateway=arp distance=1 gateway=00.pppoe-ISP01
                                              add check-gateway=arp distance=2 gateway=00.pppoe-ISP02
                                              add check-gateway=arp distance=3 gateway=198.51.100.1
                                              add distance=1 dst-address=198.51.100.0/24 gateway=198.51.100.1 pref-src=198.51.100.254 scope=10
                                              /ip route rule
                                              add action=lookup-only-in-table dst-address=149.154.167.220/32 interface=00.to-Pi routing-mark=to_tor table=main
                                              add action=lookup-only-in-table routing-mark=ISP1 table=ISP1
                                              add action=lookup-only-in-table routing-mark=ISP2 table=ISP2

                                              При такой конфигурации работает всё.
                                              Когда переделываю на получение префиксов от BGP то работает всё только через того провайдера, на котором поднята BGP сессия, не смотря на то, что я маркирую пакеты от на конкретный маршрут. При поднятии 2-х пируов — всё работает с маркировками.
                                                0
                                                Теперь я понял, вы пытаетесь совместить и классическую маршрутизацию, и маршрутизацию на уровне файрвола по раут маркам.
                                                Поскольку это разные уровни модели — там надо внимательно просчитывать, в какой последовательности маршрутизатором будут приниматься решения о дестинейшне для пакета.
                                                Так что вам лучше либо оставить эту схему и прогружать в нее адрес-листы с сайта через API микротика (тоже вполне себе решение), либо полностью переходить на маршрутизацию на L3 и делать балансировку вариацией nexthop в таблице маршрутизации.
                                                  0
                                                  Я про это и говорю, nexhop маршрутизация возможна при одинаковых каналах, но не при разных. Тут свои гемморы. Почему я и говорил, схема с BGP великолепна для домашнего использования. Просто идеальна, но в продакшене возникают нюансы, и, с учётом того что в продакшене обычно уже есть поднятые BGP сессии, то тут, к сожалению, микротик проигрывает. Хотя надежда есть, некоторые вещи они допиливают в нужную сторону.

                                                  ИМХО:
                                                  Идеально было-бы допилить сайт на выдачу скрипта для микротика :) Но это для совсем уж нубов :)
                                    0
                                    Расскажите пожалуйста поподробней про настройки. Почему рекомендуются суммаризованные хосты+подсети? Подсети не перекрывают и расширяют суммаризованные хосты?
                                      0
                                      Подсети — это отдельная сущность в блеклисте РКН, они специально для этого изобрели новый тэг в своем xml. В какой-то момент им просто захотелось банить сразу подсетями.
                                      Хостовые адреса — это те, которые РКН пишет в соответствующем поле рядом с доменными именами. Тут есть нюанс, что если у вас этот же хост разрезолвится в другой адрес — трафик к нему пойдет не через туннель и, соответственно, попадет в фильтры вашего провайдера. Но пытаться решить эту проблему на L3 — неэффективно, она уже решается через доступ к хостам через прокси в браузере (всякие там SwitchyOmega и подобные плагины).
                                      0

                                      Большое спасибо автору, отличный способ!


                                      Единственное: я, конечно, сделал бэкап, но не отказался бы от инструкции по возврату в изначальное состояние.

                                        +1
                                        Чтобы «всё работало как раньше», достаточно всего лишь задизаблить BGP-пир на вашем роутере из интерфейса winbox (Routing — BGP — Peers).
                                        Чтобы «вообще всё удалить» — соответственно, удалить пир, удалить процесс (там же на закладке instances) и удалить фильтр (Routing — Filters).

                                        Для чистоплотности еще не помешает зайти на сайт и удалить свои настройки, но они и так автоматически удалятся после месяца (в случае ручного создания) или 3 дней (в случае автоматического) простоя.
                                        0
                                        Коллеги, пожалуйста, дайте обратную связь по работе сервиса с динамическими IP. Очень интересно.
                                          0
                                          А как проверить можно, что завелось? Микротик настроил, но тот же web.telegram.org недоступен.
                                            0
                                            На микротике на закладке Routing — BGP — Peers должен быть пир (вероятно, один), у которого в столбце State справа должно быть написано Established, а в предыдущем столбце prefix count — какое-то число (прямо сейчас 13808).
                                            На закладке IP — Routes должно быть больше этого числа маршрутов, у большинства из которых в столбце Gateway написано «имя вашего интерфейса reachable».
                                              0

                                              Спасибо. Первая проблема была в State справа должно быть написано Established, сижу на интернете от МГТС, имею прослойку в виде их роутера, где нужно было прокинуть порт 65432. После этого соединение established и роуты reachable.


                                              Но горшочек не варит :) Например, полностью отваливается https://usher2.club/ и http://isitblockedinrussia.com, discordapp.com, ну и веб-версия Телеграма само собой тоже не работает.


                                              В качестве впн-сервера использую https://github.com/hwdsl2/docker-ipsec-vpn-server, traceroute до чего-либо с микротика через интерфейс впн, показывает, что он в принципе работает.


                                              Буду смотреть дальше.

                                                0
                                                Нет, порт 65432 точно ни при чем — в данной схеме это номер автономной системы, а не порт. Пробрасывать надо порт 179/tcp.

                                                А что отваливается — тем более странно, isitblockedinrussia.com, например, вообще не попадает под список.
                                                Возможно адрес вашего впн-сервер попадает сам под списки адресов — тогда нужно вручную на него прописать маршрут не в туннель на Микротике.
                                          0
                                          Извините за глупый вопрос, а как настроить BGP на OpenWrt?

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

                                        Самое читаемое