Р. Жуков
Друзья!
Что-то давно я ничего не писал на тему микротика?
Отчасти это связано с текущей ситуацией. Купить микротик стало сложно и дорого.
К сожалению, основное конкурентное преимущество в виде цены, микротик сейчас потерял.
Точнее, цена стала не очень подъемной, хотя он по прежнему будет выгодной покупкой по сравнению с другими вендорами.
Это все лирика, конечно. Уж простите.
Сегодня в этой небольшой статье постараюсь рассмотреть вопрос настройки BGP в ROS 7.
Сразу скажу, что ROS7 я только начинаю изучать и использовать. Поэтому не знаю всех фишек и возможностей.
Если буду писать чушь, то не стеснитесь, поправляйте. А я буду вносить коррективы в текст.
Итак, задача:
получить список сетей (IP адресов) через BGP и трафик к ним отправить по другому маршруту.
Для чего это все?
Я не буду вдаваться в тонкости использования BGP. Не всегда эта функция нужна для очевидных вещей, ее можно использовать для других целей маршрутизации.
Информацию по "очевидному" использованию BGP читайте на ресурсах в Интернете, например, https://antifilter.download/ или https://antifilter.network/
Почему все не так просто?
С одной стороны, кажется, что все очень просто. Берем список, загружаем его в роутер и пользуемся. Но при первом же рассмотрении проблемы более детально, начинаешь понимать, что список адресов очень большой.
На 15.10.2022 список насчитывает более 120 тысяч строк. Представляете себе таблицу маршрутизации из такого количества строк.
Роутеры, которые смогут "пережЕвать" и потом продолжить работу можно пересчитать по пальцам.
Авторы вышеупомянутых ресурсов хорошо понимают эти проблемы, и они проделали большую работу по объединению адресов в подсети разной глубины.
Понятно, что в таком случае в список может попасть IP не заблокированного ресурса, но управлять такими списками, конечно, легче. В целом, чем короче список, тем легче роутеру и человеку, но тем больше вероятность, что в список попадет ресурс, который
не заблокирован или, того хуже, этот ресурс не открывается через VPN. Такую проблему и пути ее решения мы ниже рассмотрим.
Далее в тексте я буду делать примеры, предполагающие использование https://antifilter.download. Переделать под другого постащика, я думаю, проблем не составит.
Итак, начнем.
1. Вы уже обновили ваш роутер до самой последней версии ROS7.
2. Вы подключили VPN, ну или альтернативный маршрут. И если у вас это VPN, который не формирует в ROS отдельного интерфейса, то вы и сами лучше меня все это знаете. Данный мануал рассчитан на новичка.
3. Вы проверили, у вас все работает. Работает и интернет, и VPN.
4. Вы используете публичный DNS. Не важно где он у вас настроен. На конкретном устройстве или на микротике и вы его раздаете по DHCP. Это все не важно. Главное, чтобы он у вас был. Вы также понимаете, что публичные, особенно импортные DNS могут совсем не
резольвить или резольвить неправильно некоторые важные отечественные сайты. Например, сайты Госуслуг или Сбера. Тут уж придется выбирать и искать. В целом Yandex DNS резольвит все верно и пока он не был замечен в каких либо блокировках импортных ресурсов, но вы должны помнить, что Yandex DNS совсем не анонимный.
5. В принципе настройка BGP - это одна строчка в конфиге.
Код: Выделить всё
/routing bgp connection
add as=64514 disabled=no hold-time=4m input.ignore-as-path-len=yes keepalive-time=1m local.address=192.168.220.220 .role=ebgp multihop=yes name=bgp1 remote.address=45.154.73.71/32 .as=65432 routing-table=main
45.154.73.71 - это IP адрес сервиса BGP antifilter.download
65432 - номер автономной системы antifilter.download
Последние два параметра жестко выдает ресурс, который предоставляет сервис BGP. Ищите эту информацию на сайте сервиса. На https://antifilter.download/ эта информация расположена внизу главной страницы.
64514 - это номер вашей автономной системы, который вы придумаете сами так, чтобы он был из диапазона от 1 до 65534 и отличался от номера встречной системы, то есть использовать 65432 нельзя.
Правда, согласно рекомендациям RFC6996 диапазон для частного использования вот такой 64512-65543, но это пока только рекомендация.
Вот так это выглядит в виде скринов:
Routing-BGP-синий плюсик.
И...
Надо немного подождать. По разному, от нескольких секунд, до нескольких минут.
Далее заходим в IP-Routes и видим следующую картину.
Обратите внимание на количество маршрутов внизу в строке статуса. Цифры у всех будут разные. Во-первых, сам BGP список постоянно меняется, а во-вторых, у вас же были свои маршруты, которые вы использовали до этого.
Щелкните дважды любой из вновь созданных маршрутов:
Обратите внимание, микротик создавая маршрут сам попытался подобрать для него шлюз и поставил дистанцию 20. В некоторых конфигурациях (особенно, если у вас настроен Wireguard), микротик правильно выбирает в качестве шлюза именно интерфейс ВПН. Но, будет лучше, чтобы вы сами контролировали это процесс. Как это можно сделать в микротике?
Теоретически, на вкладке Extra в настройках BGP можно выбрать таблицу маршрутизации, которую вы специально создадите для этого. Но проблема в том, что как бы я не пробовал менять параметры на этой вкладке - эти параметры не применяются микротиком. Говорят, что разработчики знают об этом, и процесс разработки идет постоянно. Когда-то точно доделают.
Единственный параметр, который работает - это Input Filter на вкладке Filter.
Фильтр создается в Routing-Filters вкладка Rule. Синий плюсик.
В поле Chain впишите название вашего фильтра (придумайте сами).
А в поле Rule впишете текст:
Код: Выделить всё
set gw wireguard1; accept
Вам нужно вписать имя своего интерфейса ВПН, естественно.
В качестве шлюза можно использовать его IP адрес. Не буду вдаваться в подробности, чаще всего это IP адрес удаленной стороны в туннеле.
Терминальная команда выглядит так:
Код: Выделить всё
/routing filter rule
add chain=bgp2 disabled=no rule="set gw *0x9; accept"
Поправят, наверное, когда-нибудь.
Осталось в созданной записи BGP выбрать фильтр. Routing-BGP, далее щелкните дважды нужную строчку с параметрами BGP подключения. Перейдите на вкладку Filter. В поле Input Filter выберите нужный фильтр.
Обратите внимание, что шлюз в маршрутах уже поменялся.
Ну, собственно, все!
Можно проверять работу маршрутов.
6. Замечание первое.
Сам BGP ресурс, к которому мы подключается, может быть тоже заблокирован. Поэтому маршрут до него тоже может быть проложен через ВПН.
/ip route add dst-address=45.154.73.71/32 gateway=wireguard1
Обратите внимание, в поле Gateway нет раскрывающего списка, в котором можно было бы выбрать подходящий интерфейс, придется его название вписывать вручную. Естественно, можно использовать IP адрес.
Ну, и конечно же, вы понимаете, что за этим надо следить, и если IP адрес поменяется, его придется менять вручную.
7. Как обойти BGP маршруты?.
Что же делать, если в префиксы попали ресурсы, которые не открываются через ВПН?
Их надо в ручном режиме отправить по обычному маршруту.
И это в принципе не сложно, но это ручной труд, то есть нужный ресурс (домен) с его поддоменами (если есть) придется вручную добавлять в соответствующий адрес лист.
Сначала создадим адрес лист.
Нажмите IP-Firewall-Address List. Затем синий плюсик.
В поле Name впишите название адрес листа. У меня mimobgp.
В поле Address - URL нужного сайта.
Добавьте таких записей столько, сколько вам нужно.
Создайте новую таблицу маршрутизации. Для этого выберите Routing-Tables. Затем синий плюсик.
В поле Name введите название таблицы. Галочка FIB должна стоять.
Ок. Осталось совсем немного.
Нажмите IP-Firewall вкладка Mangle, синий плюсик.
В поле Chain выберите prerouting. В поле Dst. Address List в раскрывающемся выберите название адрес листа, который вы недавно создали.
На вкладке Action в поле Action выберите mark routing, а в поле New Routing Mark из списка выберите называние таблицы маршрутизации из предыдущего шага.
Ок.
Ну и последний шаг.
Нажмите IP-Routes. Синий плюсик.
В поле Dst. Address введите 0.0.0.0/0 (то есть весь интернет).
В поле Gateway введите вручную название вашего Wan интерфейса или IP адрес шлюза. Подсмотрите его на похожем правиле с Dst. Address 0.0.0.0/0.
В поле Routing Table из списка выберите название таблицы маршрутизации, которую создали чуть ранее.
Вот и все, можно проверять.
Что делать, если обход BGP маршрутов не работает? Убедитесь, что в Firewall-Mangle нужные вам сайты не попадают в другие правила маркировки. Это нужно исключить. Если разобраться будет трудно, то поднимите (перетащите) нужное правило в самый верх, а на вкладке Action отключите галочку Passthorough. Правда, если у вас много правил маркировки, не думаю, что вы нуждаетесь в моих подсказках.
Еще стоит убедиться в том, что шлюз указан верно, еще раз сверьте его с правилом, которое у вас работало как "основной шлюз" до всех наших манипуляций.
8. Замечание второе.
Вы можете поглядеть статус подключения BGP на вкладке Sessions в Routing-BGP.
Но есть ряд нехорших "но".
Поглядите на скрин. То, что обведено красным. Мы получили более 10000 префиксов, а в таблице написано 0, и Uptime не может быть таким большим, я за последний час много раз включал и выключал сессию BGP, а у нее написано 496 дней.
Пока эта строчка не очень-то информативна. Хотя в целом, если она здесь появилась, а левом столбце есть буква E (established), то можно говорить, что соединение с BGP системой установлено.
9. Ну и последнее.
Вы уже поняли, что на сегодняшний день (час) мы получаем более 10000 префиксов. Напомню, что это не конкретные адреса, а целые подсети. Понятно, что для большинства задач этот список избыточный. Там много всего лишнего и редко используемого. Стараниями спецов https://antifilter.download был создан телеграм канал, где пользователи сами предлагают добавить тот или иной адрес в список и открывается голосование. Если наберется более 15 голосов "за", то адрес будет добавлен в список. На сегодня там около 700 записей. Так сказать, только самое необходимое. Все ссылки, вы найдете на странице https://antifilter.download
Осталось разобраться, как получить по BGP только этот список.
Сразу скажу, что на сегодняшний день (ноябрь 2022 года) штатным образом эта функция в микротике не работает, но есть обходные пути.
Префиксы в таблице BGP могут быть помечены специальной меткой - bgp community. В данном случае метка имеет значение 500, то есть нужный нам список имеет полный индекс 65432:500.
Отфильтруем эту комюнити, а другие префиксы проигнорируем. Делать это будем через Routing-Filters. На вкладке Rule мы уже ранее создали фильтр для нашего списка. Поправим его. Щелкните на него дважды и измените поле Rule.
Код: Выделить всё
set gw wireguard1;
if (bgp-communities includes 65432:500) { accept; } else { reject; }
И он их игнорирует, но делает это по своему. Он все равно загружает полный список правил, но те, которые он "игнорирует" он исключает из маршрутизации и помечает их в WinBox красным цветом.
Возможно такое поведение полностью правильное. Для обеспечения целостности списка роутер загружает его полностью. А возможно, функционал просто не доделан. Посмотрим, может разработчики что-то поправят.
На этом пока все!