- Точечный обход блокировок на роутере OpenWrt c помощью BGP
- Установка
- Настройка
- Проверка работы
- Выключение
- Выключить на время
- Выключение на постоянке
- Маршрутизация к antifilter.download через VPN
- Благодарности и используемые материалы
- Saved searches
- Use saved searches to filter your results more quickly
- mostm/antizapret-openwrt
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Saved searches
- Use saved searches to filter your results more quickly
- prony5/antizapret
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- 1. Установка DNS HTTPS Proxy
- 2. Установка OpenVPN
- 3. Настройка OpenVPN через интерфейс
- 4. Настраиваем перенаправление заблокированных адресов
- 5. Настраиваем автопереподключение к vpn
Точечный обход блокировок на роутере OpenWrt c помощью BGP
Туториал о настройке обхода блокировок на OpenWrt с помощью BGP и сервиса https://antifilter.download/.
- Уже поднятый какой-либо туннель
- Настроенные zone и forwarding для этого туннеля
- SSH-доступ к роутеру. Для BIRD2 нет LuCi пакетов
Поднятие туннеля и настройку zone здесь рассматривать не буду, для этого я сделал отдельные туториалы:
- Малое потребление оперативной памяти. При тестах оно составило 3MB (привет nftables)
- Простая и быстрая настройка. Если иметь рабочий конфиг и не хотеть в нём что-то изменить
Недостатки, связанные с набором IP адресов:
- Невозможность добавить ресурсы нужные лично вам и не нужные большому количеству людей. Это сделано, чтобы список маршрутов не разрастался
- Суммирование IP адресов в подсети. В туннель может попасть трафик, который не должен туда попадать. Опять же это сделано по причине уменьшения количества маршрутов
- В списках только ресурсы, которые блокируются в России или блокирующие российские подсети по GeoIP. Т.е. это решение только для людей, которые находятся в России. Это совсем не плохо, просто не универсальное решение
Установка
BGP в OpenWrt можно поднять с помощью BIRD2, который есть в официальном репозитории. Также сразу установим его cli, чтобы получать информацию о его работе
opkg update && opkg install bird2 bird2c
Настройка
Его конфигурация находится в /etc/bird.conf . По дефолту он содержит в себе пример конфигурации. Обнуляем этот файл
log syslog all; log stderr all; router id $IP; protocol device < scan time 300; >protocol kernel kernel_routes < scan time 60; ipv4 < import none; export all; >; > protocol bgp antifilter < ipv4 < import filter < #gw = $IP_GW; ifname = "$INTERFACE"; accept; >; export none; >; local as $ASN; neighbor 45.154.73.71 as 65432; multihop; hold time 240; >
Здесь нужно проставить свои переменные:
- $IP — Нужно задать какой-нибудь ваш IP-адрес. Например, если ваш роутер имеет выделенный IP-адрес, то лучше поставить его. Если IP серый, то можно и его. Либо внешний IP-адрес, который показывает ifconfig.co. Этот IP-адрес будет идентификатором вашего роутера, главное, чтоб он не пересёкся с идентификаторами других клиентов antifilter.download.
- $INTERFACE — Интерфейс вашего туннеля. Обычно wg0 для WireGuard, tun0 для OpenVPN или Shadowsocks.
- $IP_GW — Если по какой-то причине вам удобнее указать IP gateway VPN сервера, а не имя интерфейса. Не забудьте закоментить ifname в этом случае
- $ASN — Это номер автономной системы. Здесь нужно проставить любое число в диапазоне 64512-65543, кроме 65432.
Дополнительно процитирую@Furriest, автора antifilter.download:
64512 — 16-битный номер автономной системы. Заменяем на любой по вашему желанию, кроме ASN сервиса (65432). В нашем конкретном случае нам не важно, какой там будет указан номер в диапазоне от 1 до 65534, но если делать все правильно — RFC6996 говорит нам, что для частного использования выделен диапазон 64512-65543.
81.117.103.94 — router ID (32 бита) в формате IPv4-адреса. В общем случае нам, опять же, не важно, какой там будет указан ID, но чтобы уменьшить вероятность пересечения с другим пользователем — лучше использовать ваш текущий внешний IP-адрес (посмотрев его на том же 2ip.ru). При его изменении менять router ID совершенно не обязательно.
После этого перезапускаем bird
Проверка работы
Проверим, что прилетели маршруты
birdc show protocols all antifilter
В строке Routes должны быть не нули
Routes: 10703 imported, 0 exported, 10703 preferred
Проверим, что нужный нам IP адрес присутствует
birdc show route for 188.114.98.229
BIRD 2.13 ready. Table master4: 188.114.96.0/22 unicast [antifilter 11:07:17.245 from 45.154.73.71] * (100) [AS65432i] dev wg0
Ну и финальное, делаем трассировку до заблокированного ресурса с клиента роутера
Второй адрес сверху должен принадлежать вашему VPN серверу.
Если не завелось, включаем логи и рестартуем bird в соседнем терминале
logread -f -u bird service bird restart
Выключение
Выключить на время
После перезагрузки роутера bird стартанёт
Выключение на постоянке
В init скрипте bird нет disabled. Поэтому придётся вручную удалять симлинк для автозапуска
Включить автозагрузку обратно
ln -s /etc/init.d/bird /etc/rc.d/S70bird
Маршрутизация к antifilter.download через VPN
@Furriest писал, что некоторые российские провайдеры блокируют работу BGP. Да и всякое может произойти. Можем попросить OpenWrt ходить к antifilter.download через туннель.
В /etc/config/network добавляем маршрут
config route 'for_antifilter' option target '45.154.73.71' option netmask '255.255.255.255' option interface 'wg0'
uci set network.for_antifilter=route uci set network.for_antifilter.target='45.154.73.71' uci set network.for_antifilter.netmask='255.255.255.255' uci set network.for_antifilter.interface='wg0' uci commit
После добавления нужен рестарт сети
Благодарности и используемые материалы
Этот туториал появился благодаря @Kenit. В далёком 2018 у меня не получилось завести BGP, и я сделал всё совсем по-другому. В апреле 2023 мне написал @Kenit, сказал, что он успешно поднял обход блокировок через BGP и скинул рабочий конфиг.
Если вы гуру BGP и знаете, как сделать лучше или что-то оптимизировать, пишите в комментарии или ЛС. Если не гуру, пишите тоже.
Материалы про VPN и точечный обход блокировок, которые не дотягивают до статьи на Хабре, публикую в моём телеграм-канале.
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Порт генератора сервиса АнтиЗапрет для OpenWrt
mostm/antizapret-openwrt
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Порт генератора сервиса АнтиЗапрет для OpenWrt
Генератор dnsmasq.conf файла для указания на использование ipset
Данный набор скриптов создает файл dnsmasq.conf со списком сайтов, заблокированных на территории Российской Федерации Роскомнадзором и другими государственными органами, который можно использовать внутри роутера для автоматического тунеллирования заблокированных ресурсов.
Помимо основного назначения скрипта (генерации dnsmasq.conf), он также умеет создавать:
- Файл клиентской конфигурации (client-config, CCD) с заблокированными диапазонами IP-адресов для OpenVPN;
- Файл с заблокированными доменными зонами для Squid;
- Файл с заблокированными доменными зонами в LUA-переменной, для использования с DNS-резолвером knot-resolver.
- dnsmasq-full
- Bash
- cURL
- GNU iconv
- GNU coreutils-stat
- GNU grep
- GNU gawk (gawk)
- sipcalc
- idn
- Python 3.6+
- dnspython 2.0.0+
opkg install bash curl iconv coreutils-stat grep gawk sipcalc idn python3 python3-pip pip install dnspython
- clude—dist — конфигурация дистрибутива, предназначена для изменения автором репозитория;
- clude—custom — пользовательская конфигурация, предназначена для изменения конечным пользователем скрипта;
- exclude-regexp-dist.awk — файл с различным заблокированным «мусором», раздувающим PAC-файл: зеркалами сайтов, неработающими сайтами, и т.д.
- config.sh — файл с адресами прокси и прочей конфигурацией.
- Используйте инструкции схожего проекта на https://habr.com/ru/post/440030/ Данный репозиторий лишь дополняет его для использования альтернативного сервиса и метода маршрутизации. Не устанавливайте /etc/init.d/hirkn или запускайте его. В секции про «Ну и последнее — это формирование списков в iptables с помощью ipset:» Замените конфигурацию на:
config ipset option name 'vpn_ipsum' option storage 'hash' option match 'dst_ip' option hashsize '5000000' option maxelem '5000000'
- Замените текущую установку dnsmasq на dnsmasq-full. Изначальная версия не включает поддержку ipset в себя. Если ваш провайдер использует DHCP, вам придется предварительно скачать пакет dnsmasq-full перед его удалением. Вам необходимо указать параметр «conf-dir=/etc/dnsmasq.d» в файле /etc/dnsmasq.conf
- Склонируйте git-репозиторий
- Отредактируйте config/config.sh
- Запустите doall.sh.
About
Порт генератора сервиса АнтиЗапрет для OpenWrt
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Инструкция по настройкироутера с OpenWrt для обхода блокировок
prony5/antizapret
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Инструкция по настройки роутера с OpenWrt для обхода блокировок.
Все DNS запросы идут через HTTPS (DOH).
Роутер перенаправляет запросы (на адреса из списка) через VPN.
1. Установка DNS HTTPS Proxy
2. Установка OpenVPN
Можно через ssh: https://openwrt.org/docs/guide-user/services/vpn/openvpn/client
Для LiCI можно через интерфейс (System->Software) luci-app-openvpn
Файлы конфигурации .OVPN можно найти на (https://www.vpngate.net/en/)
Файл конфигурации .OVPN должен содержать строку route-noexec , для того чтобы не создавать маршрутизацию по умолчанию через vpn при подключении
3. Настройка OpenVPN через интерфейс
Применяем настройки фаервола:
uci commit firewall && /etc/init.d/firewall restart
4. Настраиваем перенаправление заблокированных адресов
Создаем файл /etc/pro-route/hosts для хранения хостов, которые нужно перенаправлять на vpn
185.167.98.127 # rutracker.org 45.132.105.85 # rutracker.org 104.20.42.23 # 4pda.ru 104.20.41.23 # 4pda.ru kinobase.org kinokrad.co kinokrad.net kinokong.ws kinokong.cc hdrezka.ag hdrezka.cm rezka.ag
Создаем скрипт /etc/pro-route/apply.sh (добавлет статический маршрут для адресов из файла hosts)
#!/bin/bash iface="$1" [ -z "$iface" ] && exit logger -t pro-route "Add custom routes for '$iface'" input="/etc/pro-route/hosts" while IFS= read -r line do host=$(echo $line | awk -F# '') [ -z "$host" ] && continue route add $host $iface logger -t pro-route "Make route for '$host'" done "$input"
Даем права на запуск скрипта /etc/pro-route/apply.sh
chmod +x /etc/pro-route/apply.sh
Добавляем код в /etc/openvpn.user. Скрипт будет выполнятся каждый раз при запуске интерфейса (т.к. при разрыве vpn соединения маршруты сбрасываются).
[ "$ACTION" = "up" ] && /bin/sh /etc/pro-route/apply.sh tun0
5. Настраиваем автопереподключение к vpn
Соединение с vpn может быть установлено, но маршруты не пробрасываться, по этому проверяем через доступ к тестовому ресурсу. Так же проверяем шлюз, через который идет соединение, т.к. провайдер может подменять заблокированный ресурс на заглушку.
Создаем скрипт /etc/pro-route/check.sh
#!/bin/bash log()< echo $1 logger -t pro-route $1 > host="$1" gate="$2" if [ -z "$host" ] || [ -z "$gate" ] then log "Bad params." exit fi success=False i=1 while [ $i -le 3 ] do log "Checking vpn connecton by host '$host' ($i)." res=$(/bin/traceroute $host -m 3 -w 3) if [[ "$res" = *"$gate"* ]] then success=True log "Success" break else log "Fail" fi sleep 3 i=$((i+1)) done if [ $success = False ] then log "Restart vpn" /etc/init.d/openvpn restart fi
Даем права на запуск скрипта /etc/pro-route/check.sh
chmod +x /etc/pro-route/check.sh
Добавляем срипт в планировщик
*/10 * * * * /bin/sh /etc/pro-route/check.sh rutracker.org vpngate