Обход блокировок с помощью BGP имея VPN на VPS — актуализация 2026
автор оригинала: Иван (IvanLeka)
Обход блокировок с помощью BGP имея VPN на VPS
Архивное переиздание с актуализацией. Оригинал опубликован на Habr (≈2020), автор — Иван (IvanLeka). оригинал скрыт на Habr (HTTP 403/451), доступен только через Wayback Machine Снимок: Wayback Machine. Ниже — редакция ноября 2026: что работает сейчас, что изменилось и как правильно повторить рецепт сегодня. Полный текст оригинала — в конце, без купюр.
TL;DR — версия 2026
Идея «роутер раздаёт обход всем устройствам дома» в 2026 живее всех: ставьте OpenWrt 24.x + контейнеры (Xray/sing-box) или MikroTik с нативным WireGuard; прозрачный прокси-тюнель — как в оригинале, только современнее туннель.
Оригинал решал правильную задачу: «включил в розетку — дома всё работает, на всех устройствах, без настроек». В 2026 решение то же, инструменты поменялись: OpenWrt (24.10/25.x) с DSA и контейнерами, RouterOS 7 с контейнерами на ARM-роутерах, GL.iNet «Beryl» серии с предустановленным OpenWrt и поддержкой AWG. ТСПУ (DPI-боксы) стоят у всех крупных российских провайдеров и умеют резать VPN-хендшейки WireGuard, OpenVPN и «голый» Shadowsocks — поэтому «прозрачный» режим требует туннеля с маскировкой, а не голого WireGuard.
Статус оригинала
- URL: https://habr.com/ru/post/672604/
- Статус на Habr: СКРЫТА (403)
- Снимок: http://web.archive.org/web/20230626210707/https://habr.com/ru/articles/672604/
- Картинки: 0/0 сохранено локально
Архитектура 2026: прозрачный туннель на роутере
Схема из оригинала (все устройства → роутер → политика: «заблокированные подсети/домены → в туннель, остальное — напрямую») осталась идеалом. В 2026 в качестве туннеля берут:
- sing-box на OpenWrt (TUN-режим, route по гео/спискам), в контейнере или статарте;
- Xray с TUN-фронтом (tun2socks) и route-set от community;
- MikroTik: WG-туннель + mangle/route-mark по address-list; на ARM-моделях контейнер с Xray;
- Awg-роутеры GL.iNet — «из коробки» для нетехнаев.
Списки доменов для «что в туннель»: community-листы (типа antifilter) + свои дополнения.
Что проверить, чего не было в оригинале
- DNS: роутер должен сам ходить за DoH/DoT, иначе «прозрачность» обходится по DNS-подмене;
- QUIC: часть блокировок — по UDP/443; решается выключением QUIC в политике или обработкой в туннеле;
- IPv6: если провайдер даёт v6 — фильтровать и его, иначе «двойная реальность»;
- апдейты списка: cron-скрипт обновления списков раз в сутки;
- MTU: туннель с маскировкой чувствителен к фрагментации.
Что изменилось с ≈2020 года
- OpenWrt 24.10/25.x: DSA-синтаксис, luci-приложения контейнеров
- RouterOS 7: нативный WireGuard, containers (ARM), обновлённый firewall
- появились готовые «тревел-роутеры» с AWG/Amnezia из коробки
- «прозрачный OpenVPN» из старых статей — мёртвая тема: OpenVPN виден DPI
Чек-лист 2026
- туннель с маскировкой (VLESS/ss2022/AWG), не vanilla WG
- свои DNS (DoH) на самом роутере
- политика «в туннель — только то, что надо», остальное напрямую
- автообновление списков
- IPv6 не забыт
Вердикт
Оригинальные статьи о «прозрачном обходе в домашней сети» — лучшие своего жанра. В 2026 жанр не умер: просто слово «OpenVPN» в них замените на «sing-box/VLESS», а всё остальное — таблицы маршрутов, списки, DNS — не изменилось.
ОРИГИНАЛ СТАТЬИ (без изменений)
Приветствую Хабравчане!
Долгое время использовал схему Настройка 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/