Настройка BGP для обхода блокировок, версия 2, «не думать»

  • Tutorial

Перечитал я трезвым взглядом свой предыдущий пост и понял, что новичкам через все эти нагромождения апдейтов и обсуждений в комментариях (которые местами были даже полезнее, чем сам пост) продираться будет затруднительно.


Поэтому здесь я приведу сжатую пошаговую инструкцию, как обходить блокировки, если у вас есть:


  • линукс-машина (ubuntu) вне поля блокировок;
  • роутер Mikrotik, на который вы уже подняли VPN-туннель до этой линукс-машины;
  • настроенный NAT на этом туннеле, позволяющий вам работать через него;
  • желание.

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


Те, кто уже всё сделал по мотивам предыдущего поста, в этом полезной информации не почерпнут.


TL;DR


Автоматизируем доступ к ресурсам через существующий у вас туннель, используя готовые списки IP-адресов, базирующиеся на реестре РКН, и протокол BGP. Цель — убрать весь трафик, адресованный заблокированным ресурсам, в туннель.


Исходные данные



IP-адреса внутри туннеля 172.30.1.1 — Linux, 172.30.1.2 — Mikrotik.
Интерфейс VPN-туннеля со стороны Linux-машины называется tun0.
В этой редакции поста жестко подразумевается, что туннель и bgp-сервер работают на одной и той же Linux-машине.
Настройки на Linux выполняем от root (т.е. перед началом настройки выполняем команду sudo su -).
Исходные списки IP-адресов будем получать с нового сервиса antifilter.download.


Кратко — логика решения


  1. Устанавливаем и настраиваем сервис маршрутизации
  2. Получаем и регулярно обновляем списки IP-адресов, создаем на их основании настройки сервиса маршрутизации
  3. Подключаем роутер к сервису и настраиваем отправку всего трафика через туннель.

Решение


Установка и настройка сервиса маршрутизации


На linux-машине добавляем в систему официальный PPA разработчиков ПО и устанавливаем bird.


add-apt-repository ppa:cz.nic-labs/bird
apt update
apt install bird

Отключаем bird для IPv6 и останавливаем пока bird для IPv4.


systemctl stop bird6
systemctl disable bird6
systemctl stop bird

Сохраняем файл /etc/bird/bird.conf со следующим содержимым:


log syslog all;
router id 172.30.1.1;

protocol kernel {
        scan time 60;
        import none;
        export none;
}

protocol device {
        scan time 60;
}

protocol static static_bgp {
    include "subnet.txt";
    include "ipsum.txt";
}

protocol bgp OurRouter {
        description "Our Router";
        neighbor 172.30.1.2 as 64999;
        import none;
        export where proto = "static_bgp";
        next hop self;
        local as 64999;
        source address 172.30.1.1;
        passive off;
}

Получаем и компилируем списки IP-адресов


Создаем папку /root/blacklist и подпапку list в ней


mkdir -p /root/blacklist/list
cd /root/blacklist

Создаем файл /root/blacklist/chklist со следующим содержимым:


#!/bin/bash
cd /root/blacklist/list
wget -N https://antifilter.download/list/ipsum.lst https://antifilter.download/list/subnet.lst
old=$(cat /root/blacklist/md5.txt);
new=$(cat /root/blacklist/list/*.lst | md5sum | head -c 32);
if [ "$old" != "$new" ]
then
cat /root/blacklist/list/ipsum.lst | sed 's_.*_route & reject;_' > /etc/bird/ipsum.txt
cat /root/blacklist/list/subnet.lst | sed 's_.*_route & reject;_' > /etc/bird/subnet.txt
/usr/sbin/birdc configure;
logger "RKN list reconfigured";
echo $new > /root/blacklist/md5.txt;
fi

Делаем файл выполняемым и запускаем один раз для проверки, после этого в папке /etc/bird появятся нужные файлы и можно будет запустить bird.


chmod +x /root/blacklist/chklist
/root/blacklist/chklist
systemctl start bird

Добавляем через crontab -e выполнение файла раз в полчаса


*/30 * * * * bash /root/blacklist/chklist

После этого сервис маршрутизации работает и по команде birdc show route показывает длинный набор маршрутов на запрещенные ресурсы.


Настраиваем Mikrotik из командной строки


Выполняем на устройстве в окне терминала следующие команды (помните, что прямая копипаста может не сработать, поскольку отработает автодополнение):


/routing bgp instance set default as=64999 ignore-as-path-len=yes router-id=172.30.1.2
/routing bgp peer add name=VPS remote-address=172.30.1.1 remote-as=64999 ttl=default

Через несколько секунд после выполнения этих команд в ваш роутер Mikrotik прилетит чуть более 13 тысяч маршрутов, указывающих на некстхоп внутри туннеля. И всё заработает.


Заключение


Надеюсь, что получилось коротко и понятно.


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

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

Ну. И что?
Реклама
Комментарии 103
  • 0
    А, ещё есть прикол — если удалённая машина входит в подсеть блокировок,
    нужно добавить маршрут до ip сервера статический через своего провайдера, а то получается петля.
    У меня так сервер на ДО, входит по ip в одну из заблокированных подсетей, но доступ до него от провайдера есть.
    • 0
      Ну вообще это стандартная практика — добавлять /32 маршрут до адреса второй стороны VPN-сервера через свой гейт. Скажем, strongswan так делает, только маршруты не в общую кучу кладет, из-за этого может быть приоритет прилетевших маршрутов через ip rule. Обойти можно, добавив lookup-правило на таблицу с VPN-маршрутами раньше по списку.
    • 0
      Позвольте слегка поофтопить. Посоветуйте роутер Mikrotik?
      В прошлой статье говорилось про Mikrotik hAP ac, но судя по отзывам — слабоват для 100+ мбит. У меня от провайдера приходит 200 мбит интернет, так что видимо мне надо что-то другое.
      Роутер для домашнего использования (пара компов, мобильники). Желательно (но не обязательно) наличие вайфай.
      • 0
        Не путайте hAP ac с hAP ac lite, который активно обсуждают.
        hAP ac, он же RB962UiGS-5HacT2HnT — это дорогая ($129) гигабитная двухдиапазонная железка, ваши 200 Mbps она пропустит, не задумываясь.
        Сейчас есть версия попроще — hAP ac2 (RBD52G-5HacD2HnD-TC) — $69, без SFP и еще с парой мелких drawback, но под ваши задачи тоже подойдет безусловно.
        • 0
          Читал на него на маркете. Не он?
          Пишут
          Слабый процессор прошлого поколения. Способен прогонять через себя провайдерские 100 мбит только в месте c костылем Fastrack. Либо с минимальным количеством правил в фаирволе. В режиме серверов L2TP (c ipsec), OVPN или SSTP больше 30 мбит/с шифровать не способен.
          • 0
            100 мегабит без шифрования — легко. IPsec c AES256 — порядка 30 мегабит. Hardware offload отсутствует. Если не нужен WiFi, рекомендую RB750Gr3. Если нужен, присмотритесь к новой AC² железке.
            • 0
              Интересует 200 мегабит с правилами на файрволле, типа отрезания рекламы и прочего.
              • 0
                Посмотрите тесты железок. И можно написать в поддержку Mikrotik, отвечают может и не быстро, но детально.
                • 0
                  Ставьте шлюзом RB750Gr3, за него hAP AC (RB962UiGS-5HacT2HnT) как точку доступа и гигабитный свич.
                  • 0
                    Только не забывайте смотреть на блочные диаграммы устройств. У 750гр3 очень своеобразный коммутатор, но как роутер он весьма неплох.

                    • 0
                      у rb750gr3 по сути нет свича, все порты к процессору подключены и свич у него софтовый, что с лихвой компенсируется двумя ядрами с неким аналогом hyper threading, в итоге получается 4 потока.
              • 0
                > через себя провайдерские 100 мбит только в месте c костылем Fastrack.
                Чушь, 40-50 MiB в секунду проходят легко и непринужденно (NAS при этом упирается в дисковый iops на торрентах быстрее). Вот speedtest с NAS, стоящего за AC — image

                По openvpn с дефолтным шифрованием — 70-100 mbps в зависимости от погоды на луне.

                По wifi с WPA2 — 100-120 (это во время того, когда торренты качаются на NAS).

                Проц не фонтан, конечно, но для текущих домашних скоростей его за глаза. Под гигабит по IPoE должен держать.
                • 0
                  Ещё раз: В цитате говорится про 100 мегабит, я говорю про 200 мегабит, вы говорите про 50 мегабит… У вас на файрволле есть правила? Это с ним у вас 360?
                  • 0
                    Я говорю про 50 мегаБАЙТ. Или 360 мегаБИТ на спидтесте — торренты утилизируют канал лучше (сам канал — 400 mbps).

                    > У вас на файрволле есть правила
                    Правил там особенно нет — фильтр доступа снаружи, форвард https/ssh на NAS, дефолтный nat. Ну и роутинг в oVPN для некоторых адресов/подсетей.
                    Грамотно настроенный FW почти не влияет на скорость, впрочем. Вы же туда не десятки тысяч правил загружать собираетесь.
                • 0
                  Дефолтное шифрование на OVPN там SHA1/BF128, что уже считается небезопасным.
                  • 0
                    Ну пока провайдер не научился влезать внутрь такого шифрования на лету и фильтровать по чёрному списку прямо там — пусть будет =)
                    • 0
                      Тогда в некоторых случаях и это лишнее, многие операторы даже просто GRE без шифрования не разбирают :)
                      • 0
                        Угу, многие операторы GRE не разбирают, а просто режут на корню =)
                        Особенно те, которые PPTP/pppoe.
                        • 0
                          Вот в РФ пока не встречал операторов с SFP домой, как и режущих GRE. Кстати, если это резать, будут вопли со стороны бизнеса, ибо GRE over IPsec — по сути, enterprise стандарт.
                          • 0
                            > Вот в РФ пока не встречал операторов с SFP домой
                            Дык, не «домой» а «в квартиру». В квартиру SFP банально неудобно и дорого тянуть, а больше гигабита всё равно пока никто не готов давать, меди хватает.
                            В офисах и частном секторе картина другая.

                            > как и режущих GRE
                            Бизнесу никто ничего и не режет, а кто режет — быстро вылетают из бизнеса, если это не монополия в БЦ. Билайн (ещё со времен корбины) по l2tp точно резал из крупняка на домашних каналах. Да и думаю многие, кто туннелями интернет приносит, «режут», потому что для проброса gre через любой туннель нужны телодвижения на стороне провайдера.
                            С IPoE проще, там gre если и режут, то специально, таких и правда в районе нуля.
              • 0

                Там процессор другой архитектуры, то есть она чисто "маркетологически" в этом промежутке. На самом деле, на IPsec она даже быстрее, так что для дома действительно оптимальный вариант если нет задачи максимально производительного вайфая (в ней MIMO 2x2, а в ac 3x3).

                • 0
                  А что если совсем «снищебродить» и развернуть образ Mikrotik-a на каком-нибудь гипервизоре? Если мне не изменяет память — Miktotik предлагает образы даже для Hyper-V.
                  • 0
                    Запросто можно развернуть в виртуалке, отдельный железный в общем-то не обязателен. Чтобы не править таблицу маршрутизации на винде, я бы посоветовал подключаться VPN с хоста на виртуалку RouterOS и далее всё как в статье.
                    У себя я запустил RouterOS в виртуалке Proxmox на основном домашнем роутере(маленький x86 c Али), что гораздо удобнее чем иметь саму железку от Микротик — можно запускать дополнительные сервисы итд.
                    Более того, линуксовый сервер (который в интернете) тоже можно заменить на виртуальный микротиковский, на Amazon EC2 есть образы RouterOS и они подходят для Free Tier на год.
                    • 0
                      И лицензии. Иначе надо покупать за 40$
                      • 0
                        25 долларов стоит лицензия на гигабитный CHR. Жалко денег? Экспортируйте конфиг и разворачивайте из образа раз в два месяца, делов на пару минут. При желании всё автоматизируется до нескольких кликов.
                        • 0
                          Может создадите пост по данному топику — думаю людям будет очень интересно. Если нет желания — можете мне в личку скинуть step-by-step howto, буду очень благодарен. Давно хотел закрыть пробел в RouterOS каким-нибуть практическим кейсом.
                • 0
                  hAP AC сейчас «флагман» для дома.
                  • 0
                    Не соглашусь. Например, SFP в железке лишний в реалиях РФ, а процессор уже староват для нынешних скоростей, тем более когда речь заходит о шифровании. Вот новый RBD52G-5HacD2HnD-TC больше похож на «флагмана» для дома.
                    • 0
                      SFP домой бывает уже давно.
                      Без POE-out очень грустно.
                      Без metarouter — ещё грустнее.
                      Процессоры — сравнимы, ещё и глюки перехода на ARM будут некоторое время всплывать. Никакого революционного прорыва там нет — по IPoE и тот, и тот справлялись с гигабитом, по pptp всё так же упирается в одно ядро на примерно одинаковых скоростях (+\- 10%).

                      Единственное, в чём AC2 выигрывает однозначно — это wifi, там железка под это лучше заточена. Но у АС без подрезания мощности передачи бешеная зона покрытия (10 этажей вниз и ещё метров 100 в сторону), а у АС2 — нет.

                      Так что тут кому что нужнее. По возможностям АС однозначно далеко впереди, проигрывая 10-20% по скорости.
                      • 0
                        Хочу обсудить по-пунктно :)

                        1. Какие операторы предоставляют SFP домой?
                        2. Что вы реально крутите на Metarouter, что оно не виснет и реально работает?
                        3. PPTP — абсолютно старый и небезопасный протокол, его использование вызывает большие сомнения.
                        4. По WiFi разницы вообще не заметил. Хотя, возможно, дело в том, что настроен «роуминг» на трех железках.
                        • 0
                          > 1. Какие операторы предоставляют SFP домой?
                          Почти любой в частных секторах. Их же, думаю, можно задолбать и попросить притащить в квартиру (хотя по забитым стоякам оптику не тянут).

                          > 2. Что вы реально крутите на Metarouter, что оно не виснет и реально работает?
                          habr.com/post/354710

                          > 3. PPTP — абсолютно старый и небезопасный протокол, его использование вызывает большие сомнения.
                          TCP/IP — абсолютно старый и небезопасный протокол, его использование вызывает большие сомнения. Однако все пользуются.
                          На самом деле неважно, l2tp, openvpn и pppoe ровно так же упираются в одно ядро. Если же говорить про производительность в sha256, то она грустная и на MIPS, и на ARM (пусть и ARM в 2 раза быстрее на sha256) — намного шустрее поднимать любой туннель с sha256 на самих клиентах. А если всё же хочется строить туннели на микротиках — смотреть нужно на hEX минимум и разгонять частоту, а не hAP.
                          Мы всё же роутер для дома — туда мало кто тащит гигабитные ipsec-туннели, а 100-200 mbps по ipsec прожуют и AC, и AC2 в любую сторону.
                          • 0
                            Ну вот нет же. AC прокачивает максимум 30 мегабит на AES256 IPsec'a. А по оптике домой, все упирается в GPON ONU модули. Никто не хочет «прописывать» модули владельца, предпочитая ставить свое оборудование.
                            • 0
                              Ну а AC2, если судить по бенчмаркам процессора, прокачивает 50-60 mbps. Тоже не фонтан как бы)

                              > Никто не хочет «прописывать» модули владельца, предпочитая ставить свое оборудование.
                              «Никто» — это ростелеком, видимо =) Ну и опять же — GPON это GPON. SFP встречается там, где оптика «со столба» абоненту заходит.
                              vidnoe.net/tarify/internet/chastnym-domam — вот наши местные просто тащат оптику на участок, что ты на втором конце поставишь им в целом наплевать (разве что предупредить нужно, что у тебя свой микротик есть).
                              • 0
                                Ну, иные провайдеры говорят так: мы ставим вам роутер с SFP и выходом по eth потому, что в случае ваших жалоб хотим зайти на свое (стоящее у вас) оборудование, и хотя бы какой-то тест запустить. Но их можно все же уговорить свою железку в «мост» превратить, главное, чтобы мост этот был не менее стабилен, чем сама оптика.

                                С другой стороны, Mikrotik предлагает самые разные модули, скажем, GPON ONU module — Pluggable GPON ONU interface for Fiber to Home — возможно, он ваши задачи решит (но какому-нибудь RT мало что докажешь, мне кажется).
                        • +1
                          Hap AC2 сейчас по факту сейчас поставляется с 256М RAM, что под задачи, подобные этой делает его более пригодным, IMHO
                          • 0
                            Откуда такая информация? На оффсайте 128, в магазинах тоже.
                  • 0
                    Ubiquiti EdgeRouter X. Гигабитные порты, хардварный нат и IPsec. Гонял через него 800мбит, нагрузка 1-3%, за счет offload.
                  • 0
                    Для hep младшей модели таблица маршрутов оказалась тяжела. Виснет.
                    для Centos 7 каталога /etc/bird нету — надо создать
                    и вписать полные пути
                    include "/etc/bird/subnet.txt";
                    include "/etc/bird/ipsum.txt";
                    • 0
                      Можно более широко суммаризовать сети внутри файла ipsum.lst — например, если собрать их по /16, то из 13 тысяч префиксов останется чуть больше 2 тысяч. Но при этом, конечно, много лишнего уйдет в туннель.
                      • 0
                        hAP Lite — так же не осиливает 13 тысяч маршрутов. Свернул ipsum.lst до /16 — получилось около 3500 строк. Но Mikrotik (прошивка 6.40.8) после получения маршрутов постоянно отключает и вновь подключает VPN-туннель (я поднял простой GRE). В логе это описано как VPN link down / VPN link up и пока что пытаюсь понять это за чудо
                        • 0
                          Тут у вас что-то странное. У меня в окружении есть несколько hAP lite, пользующихся моим сервисом и съедающих именно эти 13 тысяч префиксов.
                          Возможно, дело в версии прошивки, да — они все обновлены по максимуму, на данный момент до 6.42.3.
                    • 0

                      Хм. Мой провайдер еще и перехватывает запросы к любым DNS серверам, видимо по порту, выдавая вместо IP заблокированного ресурса IP заглушки. Думаю, многие провайдеры так делают. Было бы хорошо еще и заворачивать все DNS запросы в VPN туннель. Заодно можно переадресовать их в 1.1.1.1 или 8.8.8.8 вместо DNS сервера провайдера, который, скорее всего, тоже будет подменять IP на заглушку.

                      • 0
                        DNS-запросы заворачивать в туннель — это вполне себе очевидное решение, делается прописыванием на маршрутизаторе статических маршрутов в сторону туннеля.
                        Можно, конечно, просто дописать еще один инклуд файла с маршрутами на адреса DNSов в конфиг bird, тоже будет работать.
                        • 0
                          Можно где-то в своей сети поднять dnscrypt-proxy, например, на той же «малинке», или даже pi-hole какой-нибудь, там тоже есть вариант использования DNS-over-HTTPS. Либо на сервере dnsmasq с переадресацией.
                          • 0
                            Или через metarouter поднять openwrt с dns-tls/dns-https в 1.1.1.1+9.9.9.9
                            • 0
                              Подскажите, какой образ не виснет и реально работает? Пробовал даже свои собирать, заканчивалось всегда все однозначно: либо виртуалка падает, либо маршрутизатор.
                              • 0
                                Гм. А как часто виснет-то?
                                У меня недели полторы работает, пока не вис вроде. Образ из статьи.
                                • 0
                                  А как вздумается. Вообще нет никакой связи. Может день проработать, а может месяц, но потом только ребут маршрутизатора, например.
                                  • 0
                                    Странно. Ну посмотрим)
                                    • 0
                                      Если будет время и желание, расскажите потом :)
                                      • 0
                                        Метароутер это те ещё дрова, от версии к версии работает как ему вздумается. Может на x86 это и можно использовать, но на MIPS роутерах помоему неюзабельно.
                        • 0
                          Как OVPN живёт на провайдерах, раздающих клиентам серые IP?
                          Вопрос немного не в тему: не пробовали по OVPN раздавать IPv6 адреса с дефолтом Андроидному клиенту? У меня после получения адреса в андроиде перестают работать браузеры. При этом ping, traceroute работают.
                          • 0
                            DNSv6?
                            • 0
                              OVPN вполне себе успешно поднимается из-за NAT, постоянно пользуюсь в поездках по миру, как с ноутбука, так и с телефона.
                              Про Android ничего не скажу, к сожалению — изжил у себя везде, кроме STB. Если AppleTV научится показывать файлы из сетевых шар — изживу и там.
                              • 0
                                4-е поколение вполне себе показывает с помощью сторонних приложений
                                Я выбрал DLNA Plex сервер и клиент, уверен есть ПО и для smb/afp
                                • 0
                                  Plex — это стриминг с сервера, соответственно, часть нагрузки уходит на сервер. Вот пока про доступ с приставки к smb или afp без серверных прослоек я нагуглить не смог. Если попадется — поделитесь информацией, пожалуйста.
                            • 0
                              я же могу держать bird на самом шлюзе, а удаленный серв просто как впн-серв?
                              на шлюзе тоже линь.
                              • +1
                                Конечно. Под более общий вариант «bgp и туннель в разные места» был заточен текст предыдущей статьи, но у пытающихся повторить при этом возникало много вопросов. Эта же статья была написана фактически для настройки копипастой.
                                • +1
                                  Кстати, когда именно на самом шлюзе — то там и bird не особо нужен, поскольку в bgp в этой схеме смысла нет. Можно напрямую актуализировать таблицу маршрутизации скриптами.
                                  Хотя с bird это получается более просто, безусловно. Только bgp из bird в этом случае можно изничтожить и просто делать экспорт маршрутов из процесса static_bgp не в bgp, а прямо в protocol kernel, указав в них правильный некстхоп на стадии сборки файлов — вместо «reject;» там должно быть «via nexthop_IP;».
                                  • 0
                                    да. именно для удобства управления.
                                • 0
                                  Не совсем понимаю, а зачем для этого использовать BGP? В OpenVPN можно же пушить маршруты или это вариант для не OpenVPN VPN?
                                  • 0
                                    В комментариях к предыдущему посту обсуждали — если вас устраивает получать маршруты только при пересоздании туннеля — можно пушить их через OVPN. Фактически обновление списка происходит раз в полчаса и лично мне не хотелось бы раз в полчаса дергать туннель с разрывом всех tcp-сессий.
                                  • 0
                                    кто-нибудь пробовал это реализовать на RB951Ui-2nD??
                                    вывезет такая железяка?
                                    • 0
                                      Должна справиться, хотя в момент запуска ей будет нелегко. Но когда протокол сойдется — всё будет хорошо.
                                    • 0
                                      Раз уж вы настаиваете на использовании BGP, почему бы сразу не забирать IP-листы с antifilter.download через BGP, у них там же есть такая опция. И вот в этих костылях не будет необходимости. И забирать можно сразу с клиентского микротика, bird получается тоже лишняя сущность.

                                      Спойлер
                                      #!/bin/bash
                                      cd /root/blacklist/list
                                      wget -N https://antifilter.download/list/ipsum.lst https://antifilter.download/list/subnet.lst
                                      old=$(cat /root/blacklist/md5.txt);
                                      new=$(cat /root/blacklist/list/*.lst | md5sum | head -c 32);
                                      if [ "$old" != "$new" ]
                                      then
                                      cat /root/blacklist/list/ipsum.lst | sed 's_.*_route & reject;_' > /etc/bird/ipsum.txt
                                      cat /root/blacklist/list/subnet.lst | sed 's_.*_route & reject;_' > /etc/bird/subnet.txt
                                      /usr/sbin/birdc configure;
                                      logger "RKN list reconfigured";
                                      echo $new > /root/blacklist/md5.txt;
                                      fi

                                      • 0
                                        Безусловно, можно пойти и таким путем. Для тех, у кого есть VPN, но нет VPS, это будет очень даже правильно.
                                        По известной мне статистике, пока никто не попросил bgp-пира на упомянутом сервисе. А листы забирают почти полторы сотни. Возможно, это потому, что людям проще сделать так, как описано, а возможно — потому что им хочется оставить больше контроля за тем, что прилетает в их устройства, в своих руках. Не готов однозначно определить.
                                        • 0
                                          Вот чего тут нет, так это контроля. Завтра этот сайт по каким-то причинам исчезнет и всё сломается. Лучше тогда уж самому билдить эти листы из списка блокировок. Скрипт для этого уж никак не больше вами предложенного.
                                          • 0
                                            Ровно та же проблема — файл на github не так давно переставал обновляться (и поэтому и появился antifilter), и точно так же может исчезнуть в любой момент. Гарантий никаких в обоих случаях. А доступ напрямую к дампу РКН имеют только некоторые сотрудники провайдеров, которым такая статья без надобности — они и сами умеют запилить нужное под свои потребности.
                                            Про контроль я скорее в том ключе, что, выгружая файл, ничто не мешает перед его обработкой провести достаточно серьезный программный контроль его консистентности. В прямом BGP-стыке возможности такого контроля сильно ограничены возможностями маршрутизатора.
                                            Но, безусловно, любой вариант имеет место быть, я же не обещал перекрыть все возможные варианты построения. Я всего лишь предложил тем, кому хочется, воспользоваться одним из таких вариантов.
                                      • 0

                                        Просто мысль вслух: именно VPN (в классическом понимании — с шифрованием) нужен не всем/не всегда. Технически, зачастую, достаточно просто p2p соединения с инкапсуляцией (без шифрования). А это может сильно облегчить жизнь роутеру. Мой уже старенький RB951G-2HnD вполне даёт 100+ МБит при 16000 маршрутов.

                                        • 0
                                          Да, безусловно. Очень мало операторов, которые парсят внутренности нешифрованных туннелей.
                                          • 0
                                            А можно подробнее про это? Хотелось бы покопать в этом направлении.
                                          • 0
                                            Furriest, подскажите пожалуйста, а в чём может быть проблема со скриптом?
                                            bird[9322]: bird: /etc/bird/ip.txt, line 1: syntax error
                                            при том, что в первой строке файла вроде все как надо:
                                            route 11.22.33.44 reject; (адрес намеренно изменен)
                                            Такое выдает конечно же на этапе systemctl start bird
                                            • 0
                                              С очень большой вероятностью в файле виндовые переносы строки 0D0A вместо юниксовых 0A. Bird, к сожалению, чувствителен к этому.
                                              Решается простейшим sed 's/\x0D$//' file1.txt > file2.txt
                                              • 0
                                                Проверил в hex и исходный lst, и получившийся txt — оба с nix-переносом 0А.
                                                • 0
                                                  А. Не проснулся еще, поэтому не сразу заметил, извиняюсь. Строка route требует сети, а не адреса, поэтому для ip.txt она должна выглядеть как route 11.22.33.44/32 reject;
                                                  Решается, опять же, изменением соответствующего sed в скрипте обработки.
                                                  • 0
                                                    Спасибо за подсказку! Заработало!
                                                    Для остальных, вдруг пригодится, строка в конфиге для ip.lst:
                                                    cat /root/blacklist/list/ip.lst | sed 's_.*_route &/32 reject;_' > /etc/bird/ip.txt
                                            • 0

                                              а для эникейщиков если вас не затруднит
                                              Если роутер простой, а роль тонеля до vds выполняет одноплатный пэка на armbian который используется как шлюз, тоннель openvpn. То очевидно на него надо поставить все тот же bird, а как его сконфигурировать?

                                              • 0
                                                Если я правильно понимаю схему — на границе «простой» роутер, а armbian стоит в сети за ним. При этом дефолт у устройств в сети указывает на armbian, а на нем маршрутизация разруливает «это в туннель, а это в роутер». В такой схеме да, можно поставить bird на armbian и принимать префиксы на него. Настройка bird в этом случае фактически повторяет приведенную в примере, только нужно разрешить export в протоколе kernel и правильно установить nexthop при этом экспорте. Ну и не забыть пробросить в сторону armbian порт 179/tcp на роутере.

                                                А вот если вы, как большинство пользователей таких схем, заворачиваете трафик на armbian на каждом устройстве в локальной сети отдельно, вам тут bgp и не очень нужен. Потому что проблемой будет как раз динамически обучать все устройства, а для такого списка префиксов это некрасиво решаемая задача.

                                                Поэтому опишите, как у вас сейчас решается вопрос с отправкой трафика в туннель — тогда можно будет посоветовать направления модернизации схемы.
                                                • За ранее прошу прощения если будет слишком длинно
                                                  На входе простой роутер, старенький WNR3500l, к провайдеру подключен через IPoE на нем DD-Wrt, он умеет поднимать openvpn, но скорость очень маленькая.
                                                  Я вычитал что у orange pi на процессорах H3/5 есть crypto engine благодаря которому openvpn должен на них бегать быстрее. Вот тут можно посмотреть.
                                                  http://sunxi.montjoie.ovh/#support_overview
                                                  Оказалось правдой, скорость упирается в скорость канала до VDS
                                                  Все домашние железки достаточно умны чтобы обходить блокировки сами так или иначе, на vds висят socs5 прокси использую в браузерах и для телеграм, openvpn для всего остального, а еще l2tp/ipsec и pptp чисто для экспериментов, но вот та же PS4 ничего этого не умеет. И хочется прозрачное решение для всех сразу.
                                                  Как сейчас все решено.
                                                  Апельсин подключен в роутер по lan, соединяется через opnvpn с VDS, на апельсине поднята WLAN точка доступа для PS4 или любого другого устройства которому вдруг понадобится выйти в сеть в обход блокировок, ограничение только то что это WIFI.
                                                  между lan и wlan апельсина сделано перенаправление, вот так:
                                                  iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
                                                  iptables -A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
                                                  iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT
                                                  и все работает.
                                                  Но железка простаивала и я подумал, а чего бы её еще не подгрузить. В итоге на апельсине поселился жесткий диск, deluged торент клиент, Mariadb mysql база данных для трех домашних медиасерверов на KODI, ну и samba шара до кучи.
                                                  Все шуршит, только с торент клиента трафик к примеру утекает в тонель, где он не нужен и я не могу его оттуда убрать. Я пробовал указывать в клиенте использовать eth1, включил в /proc/sys/net/ipv4/ rp_filter=1 на интерфейсах, все пофигу. Думаю это костыли и решение с динамическими маршрутами будет правильнее, вопрос как все сделать чтобы при этом ничего не сломать, оставив весь функционал и желательно уйти от wifi точки доступа. т.е. как я думаю на выходе использовать апельсин как gate и dns в настройках устройств которым надо обойти запреты.
                                                  Изначально идея была сделать некую дешевую и глупую чёрную коробочку "для друга", включив которую в свою домашнюю сеть и настроив её по инструкции не сложнее домашнего роутера, он получал все эти ваши впн ничего в них не понимая.

                                                  • 0
                                                    Т.е. получается, что у вас есть одно устройство (router), которое обслуживает канал и обеспечивает выход в «грязную» сеть и второе (апельсин), которое обслуживает туннель и обеспечивает выход в чистую. И выбор канала обеспечивается через выбор SSID в беспроводной сети.

                                                    Если я правильно понял конструкцию — то можно внедрить динамику следующим способом.
                                                    1) Дефолт на апельсине прописать через внутренний IP нетгира.
                                                    2) На нетгире пробросить порт 179/tcp во внутренний адрес апельсина.
                                                    3) На апельсине поднять bird и запирить его с BGP-сервисом (например, как в моей соседней статье описано)
                                                    4) В bird прописать, что для всех полученных по bgp маршрутов некстхоп — это туннель OVPN
                                                    5) На всех домашних устройствах прописать дефолтом апельсин.

                                                    В этой схеме любое устройство сначала пойдет на апельсин, если у того в таблице маршрутизации нет маршрута в туннель, он через ICMP редирект переадресует устройство на роутер и трафик пойдет через роутер. А если маршрут в туннель есть — уйдет в туннель. Немаловажно не перекрыть icmp излишней фильтрацией, каковую очень любят пилить на iptables для icmp.
                                                    • да именно так я и хотел бы сделать


                                                      1. route add default gw 192.168.1.1 где 192.168.1.1 внутренний IP нетгира. Или если у нас будет работать Bird то он все берет на себя и надо указывать в его конфиге?
                                                      2. нам нужен чтобы получать на апельсин по BGP маршруты от VDS в обход openvpn? Соответственно в конфиге burd на апельсине мы указываем как источник маршрутов обычный внешний адрес VDS, так?
                                                        4-5 почитаю предыдущую статью, попробую разобраться.
                                                      • 0
                                                        1. Да, правильно, дефолт лучше таки прописать статикой, как вы и написали.

                                                        2. Тут логика, что устанавливаем пиринг как бы со статического адреса роутера, но пробрасываем порт в апельсин. BGP через такой NAT работает хорошо.
                                                        Можно поднимать пиринг и через VPN, но там такой же нат, там тоже пробрасывать порт. Потенциально чуть больше проблем при траблшутинге. Но допустимо.

                                                        Конфиг bird для апельсина можно взять из статьи, только в bgp прописать import all, export none, чтобы получить маршруты от внешнего сервиса и не анонсировать свои маршруты ему. Когда получите маршруты и их будет видно в birdc show route — можно делать следующий шаг и разрешать их экспорт в таблицу маршрутизации в protocol kernel. Придется, правда, еще разобраться, как написать функцию для изменения nexthop при экспорте. Если не получится самостоятельно — пишите, помогу.
                                                        • хм, а если у меня айпишник серый от провайдера?

                                                          • 0
                                                            Если провайдер не дает при этом функцию статического nat (чтобы хотя бы конкретный порт зафиксировать на конкретном белом адресе) — то такое подключение использовать не получится. BGP ориентируется по IP пира.
                                              • 0

                                                сделал так, ip адреса из тоннеля
                                                на VDS:
                                                log syslog all;
                                                router id 10.8.0.1;


                                                protocol kernel {
                                                scan time 60;
                                                import none;
                                                export none;
                                                }


                                                protocol device {
                                                scan time 60;
                                                }


                                                protocol static static_bgp {
                                                include "subnet.txt";
                                                include "ipsum.txt";
                                                }


                                                protocol bgp OurRouter {
                                                description "Our Router";
                                                neighbor 10.8.0.4 as 64998;
                                                import none;
                                                export where proto = "static_bgp";
                                                next hop self;
                                                local as 64999;
                                                source address 10.8.0.1;
                                                passive off;
                                                }


                                                На апельсине
                                                log syslog all;
                                                router id 10.8.0.4;


                                                protocol kernel {
                                                scan time 60;
                                                import none;


                                                export all; # Actually insert routes into the kernel routing table

                                                }


                                                protocol device {
                                                scan time 60;
                                                }


                                                protocol bgp OurRouter {
                                                description "Our Router";
                                                neighbor 10.8.0.1 as 64999;
                                                import all;
                                                export none;
                                                local as 64998;
                                                passive off;
                                                multihop;
                                                }


                                                оба на birdc show protocol показывают это:


                                                BIRD 1.6.3 ready.
                                                name proto table state since info
                                                kernel1 Kernel master up 14:46:07
                                                device1 Device master up 14:46:07
                                                static_bgp Static master up 14:46:07
                                                OurRouter BGP master start 14:46:07 Connect


                                                судя по всему магия не происходит (

                                                • 0
                                                  Для начала — допишите на VPS команду multihop в protocol bgp, как на втором. Бывает, что bird не может разобраться в виртуальных интерфейсах и поэтому не поднимает порт (проверить можно через netstat -tulpen — есть ли в списке процесс bird, слушающий порт 179).
                                                  Следующим шагом я бы попробовал пинги с одного адреса на другой (именно с указанием src address), чтобы убедиться, что работает прямое коннективити. И, возможно, на время тестирования зачистил бы правила iptables (или другого используемого файрвола) — обычно они достаточно наворочены и бывает, что блокируют трафик не очень однозначным путем.
                                                  • Порты слушаются, но да, вы правы, клиент не пингуется. Клиенты пингуют друг друга и сервер, но сервер их не пингует. Судя по тому что я нагуглил это ситуация известная, но что-то причины все разные и я пока не понял как вылечить. Пока пробовал только ufw на сервере отключить, не помогло.

                                                • 0
                                                  А можно дополнить для совсем ленивых пример настроек BGP на второй стороне, на таком же bird, а не на микротике? Я через какое-то время разберусь и допишу в комменты, но может у кого-то уже есть)

                                                  PS, немного оффтопа: решил потестировать решение, под рукой ноутбук с windows, решил на нем поднять второй bgp и посмотреть, придут ли маршруты ну и просто потыкаться, потому что раньше сталкивался только с rip, ospf и eigrp. И не нашел софта для bgp или любого другого протокола маршрутизации. Bird и компания — все под никсы, у какого-то было написано что можно завести под cygwin, но это сомнительное удовольствие… Получается, либо windows server, либо не windows. Хотя казалось бы, http, ftp, dhcp, dns и прочие более прикладные протоколы существуют в виде десятков разных реализаций, просто выбери и поставь.
                                                  • 0
                                                    Вообще, если у простого человека нет навороченного роутера, но есть openvpn и желание гонять туда только заблокированный трафик, что лучше всего сделать? если б нашелся bgp-сервер, я б такому человеку поставил openvpn, bgp-сервер и выдал соответствующие конфиги…
                                                    • 0
                                                      Для того, чтобы в openvpn гонять только заблокированный трафик, какое-то устройство должно принимать решение, какой именно трафик заворачивать в этот openvpn. Например, если openvpn приземляется на ПК — можно на нем прописывать маршруты статикой в этот туннель. Если есть контроль за второй стороной openvpn — можно там формировать список маршрутов из выгрузки и опускать его в клиента средствами OpenVPN. Вариантов много, надо приземлять их на конкретную инсталляцию.
                                                    • 0
                                                      Пример конфига bird для второго конца:
                                                      log syslog all;
                                                      router id 172.30.1.1;

                                                      protocol kernel {
                                                      scan time 60;
                                                      import none;
                                                      export all;
                                                      }

                                                      protocol device {
                                                      scan time 60;
                                                      }

                                                      protocol bgp OurRouter {
                                                      description "Our Router";
                                                      neighbor 172.30.1.2 as 64999;
                                                      # import filter { gw = 192.168.1.1; accept; }; # если нужно указывать другой некстхоп
                                                      import all; # если устраивает некстхоп на другой конец туннеля
                                                      export none;
                                                      local as 64999;
                                                      source address 172.30.1.1;
                                                      passive off;
                                                      }


                                                      Адреса и номера автономных систем тюнить по вкусу.
                                                      • Так мне и не удалось подружить Bird на сервере и на локальной машинке, не хочет сервер внутри тоннеля видеть клиента. Я вот думаю, а нафиг мне вообще VDS сервер для этого, пусть там VPN крутится как крутился. Я же могу скрипт этот локально запускать и локально импортировать список и использовать его для построения маршрутов. Взлетит же?

                                                        • 0
                                                          Вы вообще можете внедрить вариант из этого поста и не озадачиваться настройками.
                                                          Но, конечно, можете на локальном сервере выдергивать список маршрутов, обрабатывать его скриптом и затягивать в локальную таблицу маршрутизации.
                                                          • Не могу, у меня микротика то нет, можно пойти и купить, но это не спортивно, мне просто интересно решить задачу. Затягивать маршруты проблем не вызывает и даже все вчера заработало и весьма бодро, но только до перезагрузки, т.к. после не просто не поднялся тоннель. Ну и локальные сервисы отвалились все. Я не могу осилить статические маршруты, просто не понимаю их, такая вот маршрутная дислексия. И в iptables мог что-то накосячить. Буду пробовать разобраться поэтапно. Сначала просто гейт настрою, заворачивая все в тоннель и если все гладко заработает, буду дальше мучить Bird.
                                                            • 0
                                                              Давайте так. Дайте мне в личку данные для настройки:
                                                              1. IP-адрес вашего интерфейса, который смотрит в провайдера
                                                              2. шлюз по умолчанию вашего провайдера
                                                              3. внешний IP-адрес вашего туннеля (т.е. куда коннектится туннель)
                                                              4. локальный и удаленный IP-адреса внутри вашего туннеля

                                                              и я вам в ответ пришлю готовый конфиг bird, который будет работать без BGP, просто вытаскивая список маршрутов на локальную машину.
                                                              • Очень любезно с вашей стороны, спасибо! Сейчас напишу.
                                                        • 0
                                                          Спасибо! Наконец-то руки у меня дошли настроить. В репозиториях archlinux оказался значительно более свежий bird (2.0.2), он ругался на ваш конфиг, получилось завести как-то так:
                                                          log syslog all;
                                                          router id 1.1.1.1;
                                                           
                                                          protocol kernel kernel4 {
                                                                  scan time 60;
                                                                  ipv4 {
                                                                          export all;
                                                                          import none;
                                                                  };
                                                          }
                                                           
                                                          protocol device {
                                                                  scan time 60;
                                                          }
                                                           
                                                          protocol bgp OurRouter {
                                                                  description "Our Router";
                                                                  neighbor 2.2.2.2 as 64999;
                                                                  ipv4 {
                                                                          import filter { gw=3.3.3.3; accept; }; # такой адрес peer в openvpn
                                                                          #import all; # а так не завелось
                                                                          export none;
                                                                  };
                                                                  local as 64999;  # bgp без разницы что AS совпадают?
                                                                  source address 1.1.1.1;  # в нашем случае же без разницы что указывать тут?
                                                                  passive off;
                                                          }
                                                          

                                                          В итоге, работает, но пришлось руками прописать адрес peer из openvpn. Может кому пригодится.

                                                          Ну и до кучи поставил dnscrypt-proxy, потому что провайдер подменяет dns-ответы… Но это уже совсем другая история)
                                                          • 0
                                                            bird 2 — это уже совсем другая история, под него надо перерабатывать конфиги. Честно скажу, пока кроме экспериментов на стенде никуда не запускал, продакшн везде на 1.6.4.

                                                            По вашим вопросам:
                                                            1) в нашем случае совсем не важно, совпадает ли номер AS. Но это именно в нашем, потому что в общем поведение при совпадении номера (iBGP) и при его несовпадении (eBGP) сильно разнится. Поэтому если строить что-то более сложное — неплохо было бы изучить, чем они отличаются, перед проектированием.
                                                            2) в source address указывается адрес, с которого этот конкретный пир будет пытаться поднимать bgp-сессию. Поэтому, опять же, в общем случае там важно указывать правильный адрес. Но вроде бы bird умеет понять, что написана фигня, и проигнорировать.
                                                      • 0

                                                        вроде настроил, но открывается не все. Один сайт выдает почему то заглушку провайдера, телеграм не открывается вообще. Но через впн доступен.
                                                        сделал так:
                                                        log syslog all;
                                                        router id 192.16.1.6;


                                                        protocol direct {
                                                        interface "eth0", "tun0";
                                                        }


                                                        table frz;
                                                        table FCKRKN;
                                                        table other;
                                                        table master;
                                                        table VPN;


                                                        protocol static {
                                                        table frz;
                                                        description "провайдер";
                                                        check link on;
                                                        preference 100;
                                                        route 0.0.0.0/0 via 192.168.1.1;
                                                        }


                                                        protocol static {
                                                        table VPN;
                                                        description "VPN";
                                                        check link on;
                                                        preference 100;
                                                        route 0.0.0.0/0 via 10.8.0.1;
                                                        }


                                                        protocol static {
                                                        table master;
                                                        description "Common Table";


                                                        Это главная таблица, сюда вписываются все default-маршруты
                                                            route 0.0.0.0/0 multipath
                                                                        via 192.168.1.1
                                                                        via 10.8.0.1;

                                                        }


                                                        ############утащил из прмера, не нужно######
                                                        protocol static {
                                                        table other;
                                                        description "Other custom static routes";
                                                        preference 200;


                                                        Включение всех конфигов (если есть в наличии) в /etc/bird/static_route.d/
                                                        include "/etc/bird/static_route.d/*.conf";

                                                        }


                                                        protocol static {
                                                        table FCKRKN;
                                                        description "заблокированные";
                                                        preference 200;
                                                        include "subnet.txt";
                                                        }
                                                        ###########################################################################################
                                                        protocol kernel {
                                                        table frz;
                                                        persist;
                                                        learn;
                                                        scan time 20;
                                                        kernel table 10;
                                                        export all;


                                                        debug all;

                                                        }


                                                        protocol kernel {
                                                        table master;
                                                        persist;
                                                        learn;
                                                        scan time 20;
                                                        kernel table 254;
                                                        export all;


                                                        debug all;

                                                        }


                                                        protocol pipe {
                                                        table master;
                                                        peer table frz;
                                                        peer table VPN;
                                                        peer table FCKRKN;


                                                        peer table other;
                                                            import all;

                                                        import filter { gw = 192.168.1.1; accept; }
                                                        debug all;

                                                        }

                                                        • 0

                                                          вроде настроил, но открывается не все. Один сайт выдает почему то заглушку провайдера, телеграм не открывается вообще. Но через впн доступен.
                                                          сделал так:
                                                          log syslog all;
                                                          router id 192.16.1.6;


                                                          protocol direct {
                                                          interface "eth0", "tun0";
                                                          }


                                                          table frz;
                                                          table FCKRKN;
                                                          table other;
                                                          table master;
                                                          table VPN;


                                                          protocol static {
                                                          table frz;
                                                          description "провайдер";
                                                          check link on;
                                                          preference 100;
                                                          route 0.0.0.0/0 via 192.168.1.1;
                                                          }


                                                          protocol static {
                                                          table VPN;
                                                          description "VPN";
                                                          check link on;
                                                          preference 100;
                                                          route 0.0.0.0/0 via 10.8.0.1;
                                                          }


                                                          protocol static {
                                                          table master;
                                                          description "Common Table";


                                                          Это главная таблица, сюда вписываются все default-маршруты
                                                              route 0.0.0.0/0 multipath
                                                                          via 192.168.1.1
                                                                          via 10.8.0.1;

                                                          }


                                                          ############утащил из прмера, не нужно######
                                                          protocol static {
                                                          table other;
                                                          description "Other custom static routes";
                                                          preference 200;


                                                          Включение всех конфигов (если есть в наличии) в /etc/bird/static_route.d/
                                                          include "/etc/bird/static_route.d/*.conf";

                                                          }


                                                          protocol static {
                                                          table FCKRKN;
                                                          description "заблокированные";
                                                          preference 200;
                                                          include "subnet.txt";
                                                          }
                                                          ###########################################################################################
                                                          protocol kernel {
                                                          table frz;
                                                          persist;
                                                          learn;
                                                          scan time 20;
                                                          kernel table 10;
                                                          export all;


                                                          debug all;

                                                          }


                                                          protocol kernel {
                                                          table master;
                                                          persist;
                                                          learn;
                                                          scan time 20;
                                                          kernel table 254;
                                                          export all;


                                                          debug all;

                                                          }


                                                          protocol pipe {
                                                          table master;
                                                          peer table frz;
                                                          peer table VPN;
                                                          peer table FCKRKN;


                                                          peer table other;
                                                              import all;

                                                          import filter { gw = 192.168.1.1; accept; }
                                                          debug all;

                                                          }

                                                          • 0

                                                            и накосячил с маршрутами, после перезагрузки тоннель не поднимается, no route to host, плохо быть мартышкой.

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

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