Обход блокировок с помощью 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 не будет опубликован. Обязательные поля помечены *