...

пятница, 25 мая 2018 г.

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

Перечитал я трезвым взглядом свой предыдущий пост и понял, что новичкам через все эти нагромождения апдейтов и обсуждений в комментариях (которые местами были даже полезнее, чем сам пост) продираться будет затруднительно.

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


  • линукс-машина (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.


Кратко — логика решения


  1. Устанавливаем и настраиваем сервис маршрутизации
  2. Получаем и регулярно обновляем списки IP-адресов, создаем на их основании настройки сервиса маршрутизации
  3. Подключаем роутер к сервису и настраиваем отправку всего трафика через туннель.

Решение


Установка и настройка сервиса маршрутизации

На 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 /root/blacklist /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 bird start

Добавляем через 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 тысяч маршрутов, указывающих на некстхоп внутри туннеля. И всё заработает.


Заключение

Надеюсь, что получилось коротко и понятно.
Если ваша задача не укладывается в эту простую схему — возможно, вам лучше прочитать предыдущий пост с комментариями и, скорее всего, вы найдете там какие-то подсказки.

Let's block ads! (Why?)

Комментариев нет:

Отправить комментарий