Обход блокировок с помощью BGP имея VPN на VPS

—

от автора

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

Долгое время использовал схему Настройка 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/


ссылка на оригинал статьи https://habr.com/ru/post/672604/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *