Pull to refresh

Comments 98

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

Тут можно не дополнительную программу, а просто статический маршрут на своем роутере на этот IP через ваш дефолт. Статика всегда победит динамику, если не принять для обратного специальных мер.
Я на антизапрете для 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-адреса с целью обхода блокировок, а также не создает проблем при частом обновлении адресов.
А как сервис переживает динамические IP-адреса у клиентов? Если вдруг оператор поменяет IP — все отвалится?
статью не читай — комментарии пиши ((
Да, bgp хочет связки с IP.
Можно, если vpn со статикой, делать пиринг прямо через туннель, с того адреса (для этого надо сначала статикой прописать маршрут на сервис через туннель). А вот если ни там, ни там — тогда печаль.
UPD. Уже исправлено, работает с динамикой, см. текст статьи.
Почему-то с роутера пингуется запрещенка, а с компьютера нет.
Что может быть?
Разобрался.
Заголовок спойлера
не все костыли убрал после «обычного списка ip и mangle правила, с проставлением routing mark».
В masquerade правиле был фильтр по routing mark.
Спасибо за сервис!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для таких клиентов, очевидно, выбирать, что именно анонсировать, не получится, поэтому для них будет дефолтный номер AS и дефолтный набор из суммаризованных хостов+подсетей.
Вроде бы и с динамических адресов теперь всё работает и можно пользоваться, смотрите апдейты по тексту статьи.
решение для динамических 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
В этом случае требуется, чтобы у вас был статический IP на VPS, где вы терминируете туннель. Мы обсуждали ситуацию, в которой собственной VPS нет, туннель берется у стороннего VPN-сервиса и там тоже выделяется серый адрес под NAT или динамика. В этом случае просто нет IP, который будет одинаков всё время существования стыка.
ну тогда потребуется маленький скрипт с вашей стороны
чтобы при поднятии туннеля дергать его с микротика например так:
/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 — но это решаемо
Я думаю, что описанный чуть выше в треде вариант — когда со стороны сервиса детектируется попытка присоединения и под нее создается конфиг — наиболее комфортен для использования большинству потенциальных пользователей. Попробую его реализовать, если не получится — можно будет перейти к сервису, аналогичному DDNS по принципу работы.
Всё хорошо, всё отлично, вот только при наличии 2-х и более провайдеров эта задумка не имеет смысла. Стандарт BGP требует минимум 2-х пиров для успешной реализации. Да, для обычного домашнего пользователя — ситема работать будет (немного подшпмпнить с фильтрами и вуаля), но для использования с несколькими провайдерами (у меня их 3 на входе и все с белыми IP) начинается переколбашивание сети. Необходимо подключать других пиров, но нельзя, так как со стороны antifiltr только одна AS.
Вы можете легко управлять маршрутизацией по провайдерам со своей стороны. Рассматривайте этот пир только как источник префиксов, но не как источник дестинейшнов. Для выбора дестинейшна можно устраивать на своем маршрутизаторе раут фильтры любой сложности, проверяя доступность и прочие параметры.

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

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

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

Вопрос про «несколько пиров» мне пока тоже непонятен, я не могу разобраться, что у вас не получается с одним пиром. Конечно, не разделяя контексты маршрутизации, вы не можете поднять к одному и тому же IP две одновременных сессии с двух разных адресов — но тут ключевое слово «одновременных», а в этом применении одновременность не особо важна, время схождения BGP можно и потерпеть. Мало того, если у вас один ovpn-туннель — вы можете просто поднимать сессию с внешнего адреса туннеля (у вас же там NAT), так что при перекладывании туннеля на другого оператора у вас даже BGP развалиться не успеет.
Вот моя конфа:
/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-х пируов — всё работает с маркировками.
Теперь я понял, вы пытаетесь совместить и классическую маршрутизацию, и маршрутизацию на уровне файрвола по раут маркам.
Поскольку это разные уровни модели — там надо внимательно просчитывать, в какой последовательности маршрутизатором будут приниматься решения о дестинейшне для пакета.
Так что вам лучше либо оставить эту схему и прогружать в нее адрес-листы с сайта через API микротика (тоже вполне себе решение), либо полностью переходить на маршрутизацию на L3 и делать балансировку вариацией nexthop в таблице маршрутизации.
Я про это и говорю, nexhop маршрутизация возможна при одинаковых каналах, но не при разных. Тут свои гемморы. Почему я и говорил, схема с BGP великолепна для домашнего использования. Просто идеальна, но в продакшене возникают нюансы, и, с учётом того что в продакшене обычно уже есть поднятые BGP сессии, то тут, к сожалению, микротик проигрывает. Хотя надежда есть, некоторые вещи они допиливают в нужную сторону.

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

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


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

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

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

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


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


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


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

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

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

Совершенно внезапно обнаружил, что в некоторых условиях Mikrotik не пытается восстановить разорванное BGP-соединение. Зависает в статусе open sent и требует перезапуска вручную.

Как оказалось, это известный баг. Ниже ответ саппорта Mikrotik:
Yes, it is a known problem, it tries multiple times except that with each try and failure interval between tries increase. Currently solution for this problem when interval becomes too high is only disable/enable. This will change in ROS v7.

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

Обещания изменения в ROS v7 — это как про наступление коммунизма. «Жаль только, жить в эту пору прекрасную...»
у меня такое поведение вообще сразу после перезагрузки. Приходится ручками перезапускать BGP, чтобы заработало. Подбешивает немного.
Если порт 179/tcp на in открыт — то теперь сервис сам будет стучаться к зарегистрированным. Это должно помочь для таких случаев.
Ну и можно, конечно, скриптовать передергивание пира при долгом зависании. Но всё это костыли. Единственное правильное решение — исправление бага в ROS.
А можно узнать как вы это реализовали на сервисе?
Если под «это „подразумевается
сервис сам будет стучаться к зарегистрированным
— то это банальное включение mode active в настройках пира.
Хорошие новости — вышла версия 6.44, в которой в changelog:
*) bgp — properly update keepalive time after peer restart;
Есть шанс, что проблема решена.
Коллеги, новости от сервиса antifilter, вряд ли достойные отдельной статьи — один из провайдеров поделился своим списком, который в том числе собирается и резолвингом. Для тех, кто использует список отдельных хостов, вероятно, этот вариант может оказаться удобнее и полезнее. Но в нем больше 160 тысяч записей, поэтому применять осторожно.

По дефолту в BGP не раздается, чтобы начать получать его — нужно удалить на сайте свои настройки и создать их заново через веб-интерфейс, выбрав при создании соответствующий чекбокс.
Спасибо большое за сервис.
Подскажите, чем этот список глобально отличается от вашего. И еще вопрос, вы не планируете добавить возможность сервису antifilter, а именно возможность пользователям подгружать свои кастомные списки IP, что бы они прилетали вместе с вашими списками?
Этот список создается провайдером (предполагаю, что для системы фильтрации абонентского трафика) и главное его достоинство — что IP-адреса в нем не только берутся из листа РКН напрямую, но и резолвятся через доменные имена в том же листе. Т.е. если, условно, РКН внес в лист какой-то порносайт с IP 2.2.2.2, а порносайт после этого переехал на адрес 3.3.3.3, то в основном списке антифильтра будет только 2.2.2.2, а в этом — и 2.2.2.2, и 3.3.3.3.

С кастомными списками, насколько я понимаю, очень узкая зона востребованности. Если делать подгружаемые списки «общими» — очень возрастает вероятность саботажа (например, подгрузить свой список с 0.0.0.0/0 и отправить всех пользователей сервиса в туннели полностью). Если делать их доступными только конкретному IP, с которого подгружается — тогда непонятно, зачем они вообще; этому человеку гораздо проще будет вести список на своем роутере, дописывая соответствующие записи статикой в таблицу маршрутизации.

Но если вы видите какой-то другой потенциально более полезный вариант — опишите, можно будет подумать, как его реализовать. В целом основная сложность внедрения лежит в необходимости некоего «личного кабинета пользователя», где будет заложена логика управления этими кастомными списками. Добавить анонсирование готовых списков к конкретным пирам нетрудно.
Как оказалось, там есть нюанс — сейчас дополнительный список в BGP может работать только в сочетании с основным (т.е. оба чекбокса — и «адреса хостов без суммаризации + резолвинг по листу РКН», и «адреса хостов без суммаризации» — должны быть включены). Проблема понятна, решение ищется.
А расскажите, пожалуйста, как вместо микротика использовать тот же самый bird? Я попытался сделать это так:

log stderr all;

router id 127.0.0.127;

protocol bgp antifilter {
    neighbor 192.3.134.152 as 65432;
    import all;
    export none;
    local as 64999;
    hold time 240;
    multihop;
    next hop self;
}

protocol kernel {
    import none;
    export all;
}


При этом я получаю во-первых:

# bird -d
2018-12-30 20:54:07 <INFO> Started
2018-12-30 20:54:07 <ERR> KRT: Received route 0.0.0.0/0 with unknown ifindex 4
2018-12-30 20:54:07 <ERR> KRT: Received route 192.168.32.0/20 with unknown ifindex 8


хотя я просил ничего из ядра не импортировать, а во-вторых ко мне в ядро экспортируются префиксы в таком виде:

# ip r
...
unreachable 13.56.0.0/14 proto bird 
unreachable 13.125.0.0/16 proto bird 
...


Подозреваю, что мне вместо next hop self нужно указать адрес, за которым стоит искать эти сети — но я не сумел в мануале bird найти подходящую опцию.
Укажите в протоколе antifilter вместо import all строку
import filter {bgp_next_hop=IP; accept};
подставив туда ваш некстхоп.

Первая ошибка, вероятно, решается через protocol direct, но ее наличие никак не должно влиять на работоспособность сервиса, ругнулся и работает.
Спасибо за идею с фильтром, взлетело в итоге вот так:

log stderr all;

router id 127.0.0.127;

protocol bgp antifilter {
    neighbor 192.3.134.152 as 65432;
    import all;
    export none;
    local as 64999;
    hold time 240;
    multihop;
}

protocol kernel {
    import none;
    export filter {
        gw = 10.0.0.17;
        accept;
    };
}

protocol device {
    scan time 0;
}
Раз уж я промахнулся с комментарием, а удалить нельзя, в этом комментарии я просто поздравлю всех с Новым годом :) Желаю всем, чтобы сервисы, подобные описанному, в новом году перестали быть нужны.
Эпизодически на микротике стало зависать на состоянии «open sent».
Примерно сутки работает, а потом ломается.
Попробовал списки с отдельными IP и с /24.
Помогает вручную выключить пира, а потом обратно включить.
О, спасибо, попробую им попользоваться.
У меня с оригинальным antifilter'ом как-то странно ведет 951й микрот — висит в established с нулем префиксов.
После ребута набирает 302 префикса, потом через 1 минуту их становится ~17к, а потом префиксы начинают убавляться примерно по 500-1000 штук раз в 5 секунд, доходит до нуля и всё, 10-20 минут можно ждать, все равно будет 0 префиксов (точнее пустое значение).
Коллеги, antifilter.download вчера в 03:09 UTC стал недоступен.

Саппорт хостера alpharacks.com сначала отвечал в стиле «мы делаем всё, что можем», сегодня ответили уже несколько более развернуто:
«We are still waiting for a reply from our DC Quadranet about this. We have seem to lost contact with them due an internal dispute in QN.
There is some info in the web about a criminal investigation or something like, about this we are not so sure about it. But what it's true is that our DC has locked our servers. So we dont have access thru VNC, SSH… nothing. We have tried to recreate nodes or instances and for now its not possible.»

Ну и на lowendtalk гуглится любопытный тред, с этим связанный.

Выглядит всё, мягко говоря, не очень оптимистично.

В связи с этим вопрос — как думаете, уже пора плюнуть на замороженные в сервисе $100+ донатов и поднимать его в другом хостере? Естественно, все бакапы есть, поэтому процедура миграции займет с час, включая поиск и регистрацию нового сервера. Минусом решения, кроме очевидных потерь финансов, является то, что каждому пользователю сервиса придется перенастраивать пиринг, поскольку поменяется IP-адрес сервера.
имхо, раз сервис лежит уже ровно 24 часа, если не больше, то можно искать альтернативы; btw, у меня есть место в Я.Облаке, но тут встает вопрос, какие ресурсы вам нужны)

можем пообщаться об этом, на общее благо готов отсыпать вам часть)
Спасибо за предложение. Но, несмотря на то, что сервис формально ничего не нарушает, я всё же не думаю, что размещать его внутри России будет хорошей идеей. Мало ли как оно повернется завтра.
Думаю, в течение завтрашнего дня что-то с ним произойдет в хорошем смысле.
да, вы правы… в россии даже если что-то не нарушает закон все равно его может нарушить)
так или иначе если вам что-то нужно будет — пишите)
Furriest на сколько я понял, ip адрес 192.3.134.152 не действительный? Поменял ip адрес на адрес, который указан на странице сайта antifilter.download
IP-адрес нашего сервиса

Но! Не могу достучаться до сервиса в режиме динамического ip адреса. У меня выделенный, но динамичекий ип адрес. Если я создаю пиринг со своим as, все работает. Если я в сервисе удаляю as и пробую в режиме динамического ип адреса (меняю as на 64999) и пытаюсь переподключиться, постоянно получаю зависания на `open sent`
Да, сервис был вынужден мигрировать в связи с Alpharacks-gate.
Поскольку сервис поднимался фактически с нуля (резервные копии делались, но не всё можно было скопировать напрямую), некоторые функциональные элементы могли повредиться в процессе.
Спасибо за информацию о том, что не работает автосоздание, исправим. Думаю, в течение ближайших 24 часов.
Furriest подскажите, может быть в курсе, в чем может быть дело. VPN работает норм, копирую несколько роутов /24, выключаю bgp peer. Все работает, трасировка с клиентов роутера идет куда и как надо. Если включаю bgp peer, то трасировка по адресам из роутов дальше моего роутера никуда не идет. Роутер по классике для дома hap ac. В списке роутов периодически появляется unreachable на всех роутах и пропадает. Более того, теряется сеть vpn, так-же нет возможности достучаться до внешнего ip vpn.
Вероятнее всего адрес, куда подключается VPN, попадает в прилетающие по BGP сети. Надо его статикой прописать через некстхоп провайдера.
Действительно, все было именно так :-) мой ип оказался соседним с заблоченным, а из-за округления ip адресов до подсетей /24 ип моего vpn попал в список маршрутов через vpn. Вышел рекурсивный роут.
Спасибо!
Я использую Dual WAN конфиг из этой статьи, вариант «3) Делим исходящий трафик, используя PCC (per connection classifier)».
Не хватает знаний, чтобы понять, как можно сделать роуты, полученные с помощью BGP, доступными для компьютеров в локальной сети.

Можно увеличить вес роутов для 0.0.0.0/0, сделав его больше 20, тогда эти роуты начинают работать для самого микротика. Можно прописать в Route Filter bgp_in «Set Routing Mark: rout_ISP1», тогда эти роуты начинают работать для одного из провайдеров.

Как сделать, чтобы полученные по BGP роуты были доступны пользователям обоих провайдеров?
Пока ничего другого, кроме как найти способ, чтобы соединения из LAN смотрели сначала в таблицу маршрутизации main, игнорируя другие, не придумывается. Разве что написать скрипт, который будет просто дублировать маршруты, проставляя Routing Mark второго провайдера.

Может есть идеи лучше?
Не очень изящный, но, вероятно, работающий способ — это просто поднять две сессии BGP с сервисом с каждого из внешних адресов и, соответственно, навешивать route mark в соответствии с сессией.
Таблица маршрутизации удвоится, но она тут в любом случае удвоится.

Изящнее вариант — это развести маршруты по разным vrf-lite. Т.е. bgp поднимается из того vrf, в котором клиенты, а дефолт из этого vrf смотрит в другой vrf, в котором уже внешние интерфейсы и маркинг. При этом сами коннекшны маркируются не на входе трафика в первый vrf, а на маршрутизации их из первого vrf во второй.
Чисто теоретически такая схема тоже может сработать, но это только концепция, ее надо внимательно думать. Внедрять не пробовал. Предыдущий же вариант сработает гораздо легче.
т.е. я правильно понимаю, что при наличии двух провайдеров (второй резервный, в т.ч. и для BGP), я не смогу использовать резервный канал для скачивания обновлений на WSUS, банально помечая трафик и маршрутизируя?
Маршрутизация по меткам в микротике всегда побеждает маршрутизацию по таблице. Т.е. если вы хотите всегда отправлять маркированный трафик в резервный канал вне зависимости от таблицы маршрутизации — это просто. Но вам надо постоянно держать в голове, что у вас две схемы маршрутизации, и далее конфигурировать устройство, исходя из этого знания. Расходится с kiss-принципом, но если вам так комфортно — почему нет.
Только вот что-то не работает — не выпускает наружу по резервному каналу с IP выданным провайдером, а не привязанной AS.
UFO just landed and posted this here
В списке заблокированных есть 46.17.105.2. Прочитайте, как формируется ipsum.lst.

Наиболее простое решение — прописать ее статикой через шлюз вашего провайдера, статика всегда победит. Чуть более сложное — доработать фильтр префиксов в BGP, чтобы не принимать такой префикс.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
OSPF — не очень подходящий протокол для такого объема префиксов. Даже RIPv2 будет лучше, кмк.
Я бы рекомендовал и на этом линке тоже использовать BGP.
UFO just landed and posted this here
И да, как написали в комментариях к вашей статье — BGP никак не мешает гонять через одну VPS неограниченное количество братьев и сватьев.
Ну ладно, ограниченное количеством сокетов linux, но вы гораздо быстрее в полосу упретесь, чем количество сокетов исчерпаете :)
Sign up to leave a comment.

Articles