Перечитал я трезвым взглядом свой предыдущий пост и понял, что новичкам через все эти нагромождения апдейтов и обсуждений в комментариях (которые местами были даже полезнее, чем сам пост) продираться будет затруднительно.
Поэтому здесь я приведу сжатую пошаговую инструкцию, как обходить блокировки, если у вас есть:
- линукс-машина (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.
Кратко — логика решения
- Устанавливаем и настраиваем сервис маршрутизации
- Получаем и регулярно обновляем списки IP-адресов, создаем на их основании настройки сервиса маршрутизации
- Подключаем роутер к сервису и настраиваем отправку всего трафика через туннель.
Решение
Установка и настройка сервиса маршрутизации
На 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 тысяч маршрутов, указывающих на некстхоп внутри туннеля. И всё заработает.
Заключение
Надеюсь, что получилось коротко и понятно.
Если ваша задача не укладывается в эту простую схему — возможно, вам лучше прочитать предыдущий пост с комментариями и, скорее всего, вы найдете там какие-то подсказки.