OpenWRT + Zapret на Cudy WR3000S: обход DPI-блокировок через отдельный роутер
Задача -- пустить трафик (YouTube, Discord и прочее заблокированное) через Zapret, не трогая основной роутер. Для этого используется отдельный роутер Cudy WR3000S с OpenWrt и пакетом Zapret. Основной роутер (Asus RT-N66U) раздаёт "чистый" интернет, Cudy -- интернет через Zapret. Переключение на ПК -- двумя bat-скриптами.
Топология сети
ISP
|
[ONT]
|
[Asus RT-N66U] 192.168.1.2
(основной роутер, чистый интернет)
|
[Коммутатор]
/ \
ПК [Cudy WR3000S]
192.168.1.4 WAN: 192.168.1.100 (VLAN 1)
LAN: 192.168.2.1 (VLAN 2)
|
ТВ, устройства
192.168.2.x
Две подсети:
- 192.168.1.0/24 -- основная, Asus. Чистый интернет. ПК, ноутбуки, телефоны.
- 192.168.2.0/24 -- Cudy. Zapret. ТВ, устройства которым нужен YouTube.
ПК подключён к коммутатору (192.168.1.x). Переключение шлюза (Asus или Cudy) -- скриптами, без перетыкания кабелей.
Оборудование
- Cudy WR3000S V1.0 -- MT7981B (Filogic 820), 256 MB RAM, 128 MB Flash, Wi-Fi 6 (AX3000). Порты: 1 WAN + 4 LAN (все гигабитные). Поддержка OpenWrt с 24.x.
- Asus RT-N66U -- основной роутер, 192.168.1.2. Раздаёт интернет в 192.168.1.0/24.
- Коммутатор -- неуправляемый, между Asus и Cudy.
Установка OpenWrt: двухэтапная прошивка
Стоковая прошивка Cudy 2.4.6 проверяет цифровую подпись -- прямая заливка OpenWrt отклоняется. Нужна двухэтапная установка.
Этап 1: промежуточная прошивка Cudy
Промежуточный образ подписан ключом Cudy -- роутер его принимает. Файл:
cudy_wr3000s-v1-sysupgrade_20251119.bin (14.25 MB)
Порядок:
- Зайти на роутер:
http://192.168.2.1. - Сделать бэкап: Система -> Резервная копия -> "Создать архив".
- Записать Wi-Fi пароли.
- Прошить: Система -> Прошивка -> Выбрать промежуточный файл -> Обновить.
- Ждать 5-7 минут. После перезагрузки адрес изменится на
192.168.1.1. - На ПК выставить IP 192.168.1.100, маска 255.255.255.0, шлюз 192.168.1.1.
- Зайти:
http://192.168.1.1, логинroot, пароль пустой.
Этап 2: OpenWrt 25.12.0
Файл:
openwrt-25.12.0-mediatek-filogic-cudy_wr3000s-v1-squashfs-sysupgrade.bin (9.01 MB)
Порядок:
- В веб-интерфейсе промежуточной прошивки: System -> Backup / Flash Firmware.
- Flash new firmware image -> выбрать файл OpenWrt.
- Снять галочку "Keep settings".
- Flash image. Ждать 5 минут.
- Зайти:
http://192.168.1.1, логинroot, пароль пустой. - Убедиться: Status -> Overview -> OpenWrt Version: 25.12.0.
Базовая настройка: сеть, WiFi, Zapret
После установки OpenWrt роутер доступен по 192.168.1.1. Нужно загрузить конфиги, настроить Wi-Fi и поставить Zapret.
Загрузка конфигов
Сначала установить пароль root через веб-интерфейс -- без этого SSH недоступен (dropbear не принимает пустой пароль по сети):
- Открыть
http://192.168.1.1, логинroot, пароль пустой. - System -> Administration -> Router Password -> задать пароль -> Save & Apply.
После этого SSH работает. С ПК (из каталога с конфигами):
scp network root@192.168.1.1:/etc/config/network scp firewall root@192.168.1.1:/etc/config/firewall scp dhcp root@192.168.1.1:/etc/config/dhcp scp wireless root@192.168.1.1:/etc/config/wireless ssh root@192.168.1.1 "/etc/init.d/network restart"
После перезапуска сети роутер перейдёт в подсеть 192.168.2.x и будет доступен по http://192.168.2.1. Для подключения к нему с ПК: задать IP 192.168.2.100 или подключиться к Wi-Fi Cudy.
Wi-Fi
Конфиг загружен на предыдущем шаге. Применить:
ssh root@192.168.2.1 "wifi reload"
Сети: Cudy_Zapret_5G, Cudy_Zapret_2G. Пароль задан в /etc/config/wireless (поле option key).
Если сети не видны -- дать OpenWrt пересоздать конфиг:
ssh root@192.168.2.1 "rm /etc/config/wireless && reboot"
После перезагрузки восстановить SSID и пароль:
uci set wireless.@wifi-iface[0].ssid='Cudy_Zapret_5G' uci set wireless.@wifi-iface[0].key='ВАШ_ПАРОЛЬ' uci set wireless.@wifi-iface[1].ssid='Cudy_Zapret_2G' uci set wireless.@wifi-iface[1].key='ВАШ_ПАРОЛЬ' uci commit wireless wifi reload
Zapret
OpenWrt 25 использует apk (не opkg). Пакеты берём из zapret-openwrt releases.
Нужны три файла:
zapret_XX-1_aarch64_cortex-a53.apk luci-app-zapret_XX-1_all.apk luci-i18n-zapret-ru_XX-1_all.apk
Загрузка и установка:
scp zapret_*.apk root@192.168.2.1:/tmp/ scp luci-app-zapret_*.apk root@192.168.2.1:/tmp/ scp luci-i18n-zapret-ru_*.apk root@192.168.2.1:/tmp/ ssh root@192.168.2.1 "cd /tmp && apk add --allow-untrusted zapret_*.apk luci-app-zapret_*.apk luci-i18n-zapret-ru_*.apk"
Загрузить конфиг и список доменов:
scp zapret root@192.168.2.1:/etc/config/zapret ssh root@192.168.2.1 "mkdir -p /opt/zapret/ipset && cat > /opt/zapret/ipset/zapret-hosts-user.txt << 'EOF' youtube.com googlevideo.com ytimg.com ggpht.com discord.com discordapp.com gateway.discord.gg cdn.discordapp.com media.discordapp.net EOF"
Включить автозапуск и перезагрузить:
ssh root@192.168.2.1 "/etc/init.d/zapret enable && reboot"
После перезагрузки проверить: подключиться к Wi-Fi Cudy, открыть YouTube.
Два сегмента: bridge-VLAN на DSA
Задача -- разделить порты Cudy на два сегмента:
- VLAN 1 (порты wan, lan1, lan2) -- подсеть 192.168.1.0/24, подключение к Asus.
- VLAN 2 (порты lan3, lan4) -- подсеть 192.168.2.0/24, Zapret, ТВ.
Почему не два моста
Cudy WR3000S на DSA (Device Switching Architecture). На DSA нельзя создать два разных моста (br-wan и br-lan) на портах одного аппаратного свитча -- порт отключается, в dmesg ошибка "hw VLAN already used". Решение: один мост br-lan с vlan_filtering и bridge-VLAN.
Конфиг /etc/config/network
config device option name 'br-lan' option type 'bridge' option vlan_filtering '1' list ports 'wan' list ports 'lan1' list ports 'lan2' list ports 'lan3' list ports 'lan4' config bridge-vlan option device 'br-lan' option vlan '1' list ports 'wan:u' list ports 'lan1:u' list ports 'lan2:u' config bridge-vlan option device 'br-lan' option vlan '2' list ports 'lan3:u' list ports 'lan4:u' config interface 'lan' option device 'br-lan.2' option proto 'static' option ipaddr '192.168.2.1' option netmask '255.255.255.0' option ip6assign '60' config interface 'wan' option device 'br-lan.1' option proto 'static' option ipaddr '192.168.1.100' option netmask '255.255.255.0' option gateway '192.168.1.2' option dns '192.168.1.2 8.8.8.8' config interface 'wan6' option device 'br-lan.1' option proto 'dhcpv6' option reqaddress 'try' option reqprefix 'auto'
Что тут происходит:
- Один мост
br-lanобъединяет все пять портов,vlan_filtering '1'включает фильтрацию. bridge-vlanсvlan '1'-- порты wan, lan1, lan2 (untagged). Подинтерфейсbr-lan.1.bridge-vlanсvlan '2'-- порты lan3, lan4 (untagged). Подинтерфейсbr-lan.2.- Интерфейс
wanпривязан кbr-lan.1(VLAN 1, подсеть 192.168.1.x). Статический IP 192.168.1.100, шлюз -- Asus 192.168.1.2. - Интерфейс
lanпривязан кbr-lan.2(VLAN 2, подсеть 192.168.2.x). IP 192.168.2.1 -- адрес Cudy для клиентов.
Статический WAN IP
Cudy WAN фиксируется на 192.168.1.100 (статический, не DHCP от Asus). Это избавляет от проблем с DHCP-резервацией на Asus и гарантирует стабильный IP для скриптов переключения шлюза.
На Asus нужно убедиться, что 192.168.1.100 не входит в пул DHCP (или исключён).
Firewall: forward wan->wan для fw4 (nftables)
Ключевой момент. ПК находится в 192.168.1.x, шлюз -- 192.168.1.100 (Cudy WAN). Трафик приходит на Cudy через интерфейс wan и уходит в интернет через тот же wan. Это forward из зоны wan в зону wan. По умолчанию firewall OpenWrt запрещает forward внутри wan (forward = REJECT). Нужно явно разрешить.
UCI: /etc/config/firewall
Ключевые секции (помимо стандартных):
config forwarding option src 'lan' option dest 'wan' config forwarding option src 'wan' option dest 'lan' config forwarding option src 'wan' option dest 'wan' config rule option name 'Allow-Forward-WAN-192-to-Internet' option src 'wan' option dest 'wan' option src_ip '192.168.1.0/24' option proto 'all' option target 'ACCEPT' option family 'ipv4'
Разберём:
forwarding lan->wan-- стандартное, клиенты 192.168.2.x ходят в интернет через NAT.forwarding wan->lan-- доступ из 192.168.1.x к устройствам в 192.168.2.x (ТВ, LuCI).forwarding wan->wan-- трафик из 192.168.1.x через Cudy в интернет. Без этогоping 8.8.8.8с ПК (при шлюзе 192.168.1.100) не пройдёт.rule Allow-Forward-WAN-192-to-Internet-- явное правило accept для source 192.168.1.0/24, direction wan->wan. Страховка на случай если forwarding wan->wan недостаточно (fw4 обрабатывает same-zone forward иначе, чем fw3).
Дополнительные правила для доступа к LuCI и SSH с 192.168.1.x:
config rule option name 'Allow-LuCI-from-WAN' option src 'wan' option dest_port '80' option proto 'tcp' option target 'ACCEPT' option family 'ipv4' config rule option name 'Allow-LuCI-HTTPS-from-WAN' option src 'wan' option dest_port '443' option proto 'tcp' option target 'ACCEPT' option family 'ipv4' config rule option name 'Allow-SSH-from-WAN' option src 'wan' option dest_port '22' option proto 'tcp' option target 'ACCEPT' option family 'ipv4'
Без них зайти по SSH или в LuCI на 192.168.2.1 со стороны 192.168.1.x не получится (wan zone input = REJECT).
nftables.d: прямое правило для fw4
OpenWrt 25 использует fw4 (nftables), не fw3 (iptables). Для гарантии работы forward wan->wan добавляется файл с правилом nftables напрямую.
Файл: /etc/nftables.d/chain-pre/forward/50-wan192-internet.nft
ip saddr 192.168.1.0/24 iifname "br-lan.1" oifname "br-lan.1" accept comment "wan192 to internet via Cudy"
Одна строка. Пакет с источником 192.168.1.0/24, вошедший и выходящий через br-lan.1 (wan zone), принимается. Файл подкладывается в chain-pre/forward/ -- fw4 загружает его автоматически при старте.
firewall.user
Файл /etc/firewall.user -- заглушка. В fw3 здесь были правила iptables; в fw4 iptables закомментирован, используется nftables.d:
#!/bin/sh # fw4: use nftables.d/chain-pre/forward/50-wan192-internet.nft # iptables -I FORWARD 1 -i br-lan.1 -o br-lan.1 -s 192.168.1.0/24 -j ACCEPT :
Нюанс fw4
В /etc/config/firewall секция config include ссылается на firewall.user с опцией option fw4_compatible '1'. Опция option reload не поддерживается fw4 -- не добавляйте её, иначе firewall не применится.
Применение
С ПК:
scp firewall root@192.168.2.1:/etc/config/firewall scp firewall.user root@192.168.2.1:/etc/firewall.user ssh root@192.168.2.1 "mkdir -p /etc/nftables.d/chain-pre/forward" scp 50-wan192-internet.nft root@192.168.2.1:/etc/nftables.d/chain-pre/forward/ ssh root@192.168.2.1 "service firewall restart"
Маршрут на Asus
Чтобы устройства из 192.168.1.x (через Asus) могли достучаться до 192.168.2.x (ТВ, LuCI Cudy), на Asus нужен статический маршрут.
Настройка в веб-интерфейсе Asus
- Открыть
http://192.168.1.2. - LAN -> вкладка Advanced (или Route / Static Route).
- Добавить маршрут:
| Поле | Значение |
| Network/Host | 192.168.2.0 |
| Netmask | 255.255.255.0 |
| Gateway | 192.168.1.100 |
| Metric | 1 |
| Interface | LAN |
- Сохранить.
После этого Asus будет перенаправлять пакеты для 192.168.2.0/24 на Cudy (192.168.1.100), Cudy перешлёт их в lan (192.168.2.x).
Замечание: на стоковой прошивке Asus 382 статические маршруты у некоторых пользователей работают нестабильно. Если маршрут пропадает после перезагрузки -- рассмотрите Asuswrt-Merlin.
Переключение шлюза на Windows ПК
ПК (192.168.1.4) подключён к коммутатору в подсети 192.168.1.x. Нужно переключать шлюз: Asus (чистый интернет) или Cudy (Zapret).
Проблема с кросс-подсетным шлюзом
Первая мысль -- поставить шлюз 192.168.2.1 (LAN Cudy). Не работает: Windows не создаёт on-link маршрут для шлюза в другой подсети, ping 8.8.8.8 выдаёт "General failure".
Решение: шлюз = 192.168.1.100 (Cudy WAN). Это та же подсеть, что и ПК. Трафик идёт: ПК -> Cudy WAN (192.168.1.100) -> forward wan->wan -> NAT -> интернет. На Cudy должен быть включён forward wan->wan (настроен выше).
gateway-zapret.bat
Переключает шлюз на Cudy (Zapret). Запускать от администратора (скрипт запросит UAC сам):
@echo off
chcp 65001 >nul
REM Gateway via Cudy Zapret - gateway = Cudy WAN IP in 192.168.1.x (default 192.168.1.100)
net session >nul 2>&1
if %errorlevel% neq 0 (
powershell -Command "Start-Process '%~f0' -Verb RunAs"
exit /b
)
echo.
echo Switching gateway to Cudy WAN (Zapret) 192.168.1.100 ...
echo.
set "ADAPTER=Ethernet"
set "CUDY_WAN_IP=192.168.1.100"
route delete 0.0.0.0 192.168.2.1 >nul 2>&1
route delete 192.168.2.0 192.168.1.2 >nul 2>&1
netsh interface ip set address name="%ADAPTER%" static 192.168.1.4 255.255.255.0 %CUDY_WAN_IP%
set "NETSHEXIT=%errorlevel%"
route add 192.168.2.0 mask 255.255.255.0 %CUDY_WAN_IP% -p >nul 2>&1
if %NETSHEXIT% equ 0 (echo Done. Traffic via Zapret.) else (echo Error. Check adapter name: %ADAPTER%)
echo.
echo Waiting 10 seconds for network to settle...
timeout /t 10 /nobreak >nul
echo.
echo --- ipconfig ---
ipconfig
echo.
echo --- route to 192.168.2.0 (must be via %CUDY_WAN_IP%) ---
route print | findstr "192.168"
echo.
echo --- ping Cudy WAN %CUDY_WAN_IP% (should reply) ---
ping -n 1 %CUDY_WAN_IP%
echo.
echo --- ping 8.8.8.8 (if timeout, routing or Zapret issue) ---
ping -n 1 8.8.8.8
echo.
pause
Что делает: ставит шлюз 192.168.1.100 (Cudy WAN), добавляет маршрут 192.168.2.0/24 через Cudy (чтобы не потерять доступ к LuCI и ТВ), делает проверочные пинги.
gateway-asus.bat
Возвращает шлюз на Asus (чистый интернет):
@echo off
chcp 65001 >nul
REM Gateway via Asus clean - one gateway 192.168.1.2 in ipconfig
net session >nul 2>&1
if %errorlevel% neq 0 (
powershell -Command "Start-Process '%~f0' -Verb RunAs"
exit /b
)
echo.
echo Switching gateway to Asus (clean) 192.168.1.2 ...
echo.
set "ADAPTER=Ethernet"
route delete 0.0.0.0 192.168.2.1 >nul 2>&1
route delete 0.0.0.0 192.168.1.100 >nul 2>&1
netsh interface ip set address name="%ADAPTER%" static 192.168.1.4 255.255.255.0 192.168.1.2
route delete 192.168.2.0 192.168.1.69 >nul 2>&1
route delete 192.168.2.0 192.168.1.100 >nul 2>&1
route add 192.168.2.0 mask 255.255.255.0 192.168.1.2 -p >nul 2>&1
if %errorlevel% equ 0 (echo Done. Traffic via Asus.) else (echo Error. Check adapter name: %ADAPTER%)
echo.
echo Waiting 10 seconds for network to settle...
timeout /t 10 /nobreak >nul
echo.
echo --- ipconfig ---
ipconfig
echo.
echo --- route to 192.168.2.0 (must be via 192.168.1.2 Asus) ---
route print | findstr "192.168"
echo.
echo --- ping 192.168.2.1 (if timeout, check Asus: LAN - Route - 192.168.2.0 via Cudy IP) ---
ping -n 2 192.168.2.1
echo.
pause
Что делает: ставит шлюз 192.168.1.2 (Asus), убирает маршруты через Cudy, добавляет маршрут 192.168.2.0/24 через Asus (чтобы доступ к Cudy и ТВ шёл через статический маршрут на Asus).
Ручные команды
Если не хочется использовать скрипты:
Переключить на Cudy (Zapret):
netsh interface ip set address name="Ethernet" static 192.168.1.4 255.255.255.0 192.168.1.100 route add 192.168.2.0 mask 255.255.255.0 192.168.1.100 -p
Переключить на Asus (чистый):
netsh interface ip set address name="Ethernet" static 192.168.1.4 255.255.255.0 192.168.1.2 route delete 192.168.2.0 192.168.1.100 route add 192.168.2.0 mask 255.255.255.0 192.168.1.2 -p
Имя адаптера Ethernet -- проверить в ipconfig. Если другое -- подставить своё.
Проверка и troubleshooting
Чеклист
При шлюзе Cudy (после gateway-zapret.bat):
1. ipconfig -- шлюз 192.168.1.100 2. ping 192.168.1.100 -- Cudy WAN отвечает 3. ping 8.8.8.8 -- интернет через Cudy 4. route print | findstr 192.168 -- маршрут 192.168.2.0 через 192.168.1.100 5. Открыть YouTube -- видео играет (Zapret работает)
При шлюзе Asus (после gateway-asus.bat):
1. ipconfig -- шлюз 192.168.1.2 2. ping 192.168.1.2 -- Asus отвечает 3. ping 8.8.8.8 -- интернет через Asus 4. ping 192.168.2.1 -- Cudy LAN отвечает (маршрут через Asus) 5. route print | findstr 192.168 -- маршрут 192.168.2.0 через 192.168.1.2
Типичные проблемы
Ping 192.168.1.100 не отвечает
ПК не в одном L2-сегменте с Cudy WAN. Проверить: ПК и Cudy WAN подключены к одному коммутатору. Порт Cudy -- WAN, LAN1 или LAN2 (VLAN 1). Не LAN3/LAN4 (это VLAN 2).
Ping 8.8.8.8 таймаут при шлюзе 192.168.1.100
На Cudy не включён forward wan->wan. Проверить:
ssh root@192.168.2.1 "nft list chain inet fw4 forward" | grep wan192
Должна быть строка с accept. Если нет -- применить firewall и nftables.d (см. раздел "Firewall" выше).
YouTube не открывается, но ping 8.8.8.8 есть
Zapret не запущен или не настроен. Проверить:
ssh root@192.168.2.1 "/etc/init.d/zapret status" ssh root@192.168.2.1 "/etc/init.d/zapret restart" ssh root@192.168.2.1 "/etc/init.d/zapret enable"
Нет доступа к 192.168.2.x при шлюзе Asus
На Asus не настроен статический маршрут 192.168.2.0/24 -> 192.168.1.100. Добавить в LAN -> Route. Или маршрут пропал после перезагрузки Asus (проблема прошивки 382).
DNS не резолвит при шлюзе Cudy
Проверить DNS в настройках адаптера или маршрутах. Cudy WAN использует DNS 192.168.1.2 и 8.8.8.8. При необходимости на ПК вручную:
netsh interface ip set dns name="Ethernet" static 8.8.8.8 netsh interface ip add dns name="Ethernet" 1.1.1.1 index=2
Итог
Что получилось:
- Две подсети: 192.168.1.0/24 (Asus, чистый интернет) и 192.168.2.0/24 (Cudy, Zapret).
- Bridge-VLAN на DSA: VLAN 1 (wan+lan1+lan2) и VLAN 2 (lan3+lan4) в одном мосте.
- Forward wan->wan на Cudy: ПК из 192.168.1.x может ходить в интернет через Cudy.
- Статический WAN IP 192.168.1.100 на Cudy -- стабильный адрес для скриптов.
- Переключение шлюза на ПК двумя bat-скриптами, без перетыкания кабелей.
- Zapret обрабатывает DPI и разблокирует YouTube, Discord.
- ТВ и другие устройства на Wi-Fi Cudy получают 192.168.2.x автоматически (DHCP) и работают через Zapret постоянно.
Комментарии
Отправить комментарий