Приветствую Хабравчане!

Долгое время использовал схему Настройка BGP для обхода блокировок, версия 2, «не думать». Но были моменты не устраивающие меня.

За основу используемого мною скрипта был использован скрипт@Furriest, за что ему огромное человеческое спасибо!

Настройку VPS/VPN можно смело брать из материнской темы, здесь выложу только скрипт.

"Почему не внесу нужные мне изменения на роутере?" - спросите вы. "Потому что у меня их на текущий момент четыре и, править на каждом лень". А лень как вы знаете - двигатель прогресса.

#!/bin/bash

pushd list
wget -N https://antifilter.download/list/subnet.lst
wget -N https://antifilter.download/list/ip.lst
#wget -N https://antifilter.download/list/ipresolve.lst
wget -N https://community.antifilter.download/list/community.lst
wget -N https://raw.githubusercontent.com/SecOps-Institute/FacebookIPLists/master/facebook_ipv4_cidr_blocks.lst

popd

old=$(cat  /tmp/lstmd5.txt);
new=$(cat list/*.lst | md5sum | head -c 32);

if [ "$old" != "$new" ]
then

#main
    cat list/ip.lst | sed -r -e 's/^[0-9]+.[0-9]+.[0-9]+.[0-9]+$/&\/32/' -e 's/.*/route & reject;/' > /tmp/ip.txt
    cat list/subnet.lst | sed 's/.*/route & reject;/' >> /tmp/ip.txt
    cat list/facebook_ipv4_cidr_blocks.lst | sed 's/.*/route & reject;/' >> /tmp/ip.txt
#    cat list/ipresolve.lst | sed -r -e 's/^[0-9]+.[0-9]+.[0-9]+.[0-9]+$/&\/32/' -e 's/.*/route & reject;/' >> /tmp/ip.txt

#community
    cat list/community.lst | sed -r -e 's/^[0-9]+.[0-9]+.[0-9]+.[0-9]+$/&\/32/' -e 's/.*/route & reject;/' >> /tmp/ip.txt

#their
    cat list/their.lst | sed -r -e 's/^[0-9]+.[0-9]+.[0-9]+.[0-9]+$/&\/32/' -e 's/.*/route & reject;/' >> /tmp/ip.txt

#exclude
    for a in `cat exclude.txt`; do sed -i -e "/$a/d" /tmp/ip.txt; done
#unique
    sort -u /tmp/ip.txt > /etc/bird/ip.txt

    /usr/sbin/birdc configure;
    logger "RKN list reconfigured";

    echo $new >  /tmp/lstmd5.txt;
fi

19, 25 и 28 строки: В списке ip.lst мы имеем IP адреса без указания префикса. Такой формат bird не кушает. Аналогично если будем использовать свой список. Проверяем есть ли префикс, если нету - дописываем /32

31 строка: удаляем из финального скрипта адреса, которые мы не хотим получать. Я использую для удаления 1.1.1.1 из community.lst, можно было сделать строкой по проще, но на будущее если понадобится исключить больше адресов/сетей сделал один раз. Просто дописываем их построчно в файл exclude.txt

Поиск производится по куску текста. Если вписать "1.1" в exclude.txt, то удалится и 1.1.1.1 и 1.179.201.18/32 и остальное подобное. Вписав 192.168. у нас удалится 192.168.0.0/16 и далее /17, /18, /19 и остальные префиксы вплоть до /32 если таковые будут в листах. Если будет префикс 1.192.168.0/24 то он удалится тоже. Будьте внимательны с тем что пишете в файл exclude.

33 строка: удаляет дубли и копирует финальный список в каталог bird. Т.к. у нас используется несколько списков, вероятность получения одинаковых префиксов высока.

Далее мы создаем недостающие файлы/ссылки:

Создаем файл исключения и пишем туда 1.1.1.1 Или ничего не пишем.

nano /root/blacklist/exclude.txt

Создаем файл своих хотелок и пишем туда например 10.0.0.0./8

nano /root/blacklist/their.txt

Создаем символьную ссылку в каталог list. Она также будет участвовать в подсчете хэша для определения есть ли изменения в файлах.

ln -s /root/blacklist/their.txt /root/blacklist/list/their.lst

Ну и не забываем про cron

crontab -e
*/20 * * * * cd /root/blacklist && ./chklist

Upd: По совету 13werwolf13 переместим md5.txt в /tmp/

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


  1. 13werwolf13
    21.06.2022 14:41
    +1

    осталось придумать что делать с роутером которому такая табличка в память не лезет и можно применять))

    по скрипту я бы посоветовал md5.txt хранить в tmpfs соответственно /tmp/md5.txt


    1. SinnerLike Автор
      21.06.2022 14:48

      На текущий момент чуть меньше 76к маршрутов.
      У 951 микрота свободно 60 Мб ОЗУ на ROS 7.

      Про hEX и 4011 я уж молчу.

      Про md5 не думал, но можно. Спасибо! :-)


      1. 13werwolf13
        21.06.2022 14:52

        просто я изначально брал роутер на openwrt чтобы он у меня был чуть больше чем роутером, и теперь или от части служб отказываться или от такого кол-ва маршрутов, всё в память не влазит((


  1. Abyss777
    21.06.2022 15:14

    У меня всё это работает криво. Например ozon использует cloudflare и на этом уровне банит не Россию. Соответственно даже если сделать исключения для IP озона, он всё равно не откроется. Делать исключения для всего cloudflare едва ли получится, а если получится то отпадёт куча других сайтов которые банят Россию.
    Ютуб в этих списках тоже почему-то через VPN идет, финская реклама мне не нравится совсем.


  1. lrrr11
    21.06.2022 18:15

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

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


    1. SinnerLike Автор
      21.06.2022 18:19

      Этот скриптик для VPS откуда роутер по BGP будет забирать маршруты.

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


  1. edo1h
    22.06.2022 20:43
    +1

    Но были моменты не устраивающие меня.

    хотелось бы подробностей


    1. SinnerLike Автор
      23.06.2022 14:28

      Ну можно сказать что они написаны в описании под скриптом.

      По BGP от сервиса нельзя было получить ip.lst. Пришлось использовать скрипт.
      Но в этом списке (если мне не изменяет память(я много списков менял/выбирал)) также были и префиксы больше /32, что заставило править строчку sed для проверки наличия.

      Затем решил использовать несколько списков и, обнаружил повторяющиеся префиксы. Пришлось "забирать" уникальные записи.

      Также не меня одного напрягало присутствие единичек в списке комьюнити. Несогласным советовали добавлять в фильтры, что я и делал по началу, но потом решил централизовать.
      Повторюсь; у меня по BGP забирают 4 роутера.

      Ну а потом я разошёлся... Сети между VPN каналами я туда-же запихнул в список their.


      1. edo1h
        23.06.2022 15:12
        -1

        Затем решил использовать несколько списков

        я просто пришёл к выводу, что проще все нероссийские ip пускать через vpn.
        периодическое обновление списков всё больше напоминает сражение с ветряными мельницами.