Надоело вручную обновлять на роутере список маршрутов для блокировки запрещенных сайтов. Я дополнительно блокировал не всё подряд, а буквально несколько сайтов, но всё равно надоело, поэтому написал небольшой скрипт для автоматизации рутины. Интерфейс tun0 терминирует все подключения в /dev/null если что.
Скрипт скачивает список адресов которые надо заблокировать с https://antifilter.download/ в файл ipsum_new и немного фильтрует чтобы избежать подстановок, сравнивает с предыдущей версией списка в ipsum_cur и помещает разницу в ipsum_diff.
Затем берём разницу и добавляем или удаляем маршрут в таблице маршрутизации в зависимости от знака + или - в diff-файле.
В конце скрипта замещаем текущий ipsum_cur новым файлом.
Обратите внимание, в скрипте этого нет, но мне пришлось добавить статические маршруты до некоторых хостов т.к. оказалось, что они попадают в диапазоны из списка. Такое может случиться т.к. отдельные адреса суммируются в подсети по маске /24.
#!/bin/sh
[ ! -f ipsum_cur ] && touch ipsum_cur
wget https://antifilter.download/list/ipsum.lst -O - | \
grep -v -E '[a-zA-Z]+' | \
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | \
sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n > ipsum_new
diff -C0 ipsum_cur ipsum_new | grep '^[+-] ' > ipsum_diff
while read -r line; do
OP=${line::1}
ADDR=${line:2}
if [ "$OP" = "+" ]; then
ip route add $ADDR dev tun0
elif [ "$OP" = "-" ]; then
ip route del $ADDR dev tun0
fi
done < ipsum_diff
rm -f ipsum_diff
[ -f ipsum_new ] && mv ipsum_new ipsum_cur
В faq сайта который публикует списки написано, что списки обновляется раз в пол часа, так что можно добавить скрипт в cron для выполнения по расписанию.