Приветствую Хабр!
Далее расскажу как обойти ограничение скорости Youtube на Android TV. Найти универсальное решение "одной кнопкой" мне не удалось (ByeDPI не заработал) и роутера с OpenWrt у меня нет, поэтому пойдем по сложному пути!
Главным условием является отдельная локальная Linux машина, на которой будет запущена утилита Zapret. У меня это Mini PC с установленным Proxmox (на котором у меня крутится умный дом HomeAssistant).
Если у вас уже есть Linux хост, то следующий шаг можно пропустить и сразу перейти к установке Zapret
Создание контейнера для Zapret на Proxmox
В консоли Proxmox проверяем командой доступные хосты pveam available
скачиваем образ легковесного Debian pveam download local debian-11-standard_11.7-1_amd64.tar.zst
Создаем LXC Container: я выделил 1 ядро, 1Гб оперативной памяти (потом уменьшил до 512), 8Гб накопителя.
При создании необходимо обратить внимание на выбор образа, который скачали и в настройках сети установить DHCP
Скриншоты создания виртуальный машины
Установка Zapret и настройка
Пользуясь этой инструкций скачиваем и устанавливаем zapret.
cd /tmp
git clone --depth 1 https://github.com/bol-van/zapret
install_bin.sh
install_prereq.sh
Я выбираем настройку на основе iptables
Так как целью было только обойти замедление Youtube, пропускаем 6 пункт из оригинальной инструкции (запуск blockcheck.sh).
Запускаем install_easy.sh
, я выбирал режим nfqws, в интерактивном режиме создаем конфиг.
Он сохранятся тут /opt/zapret/config
, настраиваем его в соответствии с инструкцией обхода замедления.
Важный параметр необходимо указать MODE_FILTER=hostlist
и в файл /opt/zapret/ipset/zapret-hosts-user.txt
добавить googlevideo.com
Мой конфиг (не копируйте его к себе, просто для примера)
# can help in case /tmp has not enough space
#TMPDIR=/opt/zapret/tmp
# redefine user for zapret daemons. required on Keenetic
#WS_USER=nobody
# override firewall type : iptables,nftables,ipfw
FWTYPE=iptables
# options for ipsets
# maximum number of elements in sets. also used for nft sets
SET_MAXELEM=522288
# too low hashsize can cause memory allocation errors on low RAM systems , even if RAM is enough
# too large hashsize will waste lots of RAM
IPSET_OPT="hashsize 262144 maxelem $SET_MAXELEM"
# dynamically generate additional ip. $1 = ipset/nfset/table name
#IPSET_HOOK="/etc/zapret.ipset.hook"
# options for ip2net. "-4" or "-6" auto added by ipset create script
IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4"
IP2NET_OPT6="--prefix-length=56-64 --v6-threshold=5"
# options for auto hostlist
AUTOHOSTLIST_RETRANS_THRESHOLD=3
AUTOHOSTLIST_FAIL_THRESHOLD=3
AUTOHOSTLIST_FAIL_TIME=60
# 1 = debug autohostlist positives to ipset/zapret-hosts-auto-debug.log
AUTOHOSTLIST_DEBUGLOG=0
# number of parallel threads for domain list resolves
MDIG_THREADS=30
# ipset/*.sh can compress large lists
GZIP_LISTS=1
MODE=nfqws
# apply fooling to http
MODE_HTTP=0
# for nfqws only. support http keep alives. enable only if DPI checks for http request in any outgoing packet
MODE_HTTP_KEEPALIVE=0
# apply fooling to https
MODE_HTTPS=1
# apply fooling to quic
MODE_QUIC=1
# none,ipset,hostlist,autohostlist
MODE_FILTER=hostlist
# CHOOSE NFQWS DAEMON OPTIONS for DPI desync mode. run "nfq/nfqws --help" for option list
DESYNC_MARK=0x40000000
DESYNC_MARK_POSTNAT=0x20000000
#NFQWS_OPT_DESYNC="--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-fooling=md5sig"
NFQWS_OPT_DESYNC="--dpi-desync=split2"
#NFQWS_OPT_DESYNC_HTTP=
#NFQWS_OPT_DESYNC_HTTPS="--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-fooling=badsum"
#NFQWS_OPT_DESYNC_HTTP6=
#NFQWS_OPT_DESYNC_HTTPS6=
#NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake --dpi-desync-repeats=6"
#NFQWS_OPT_DESYNC_QUIC6=
NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake --dpi-desync-repeats=6"
# CHOOSE TPWS DAEMON OPTIONS. run "tpws/tpws --help" for option list
TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3 --oob"
# openwrt only : donttouch,none,software,hardware
FLOWOFFLOAD=donttouch
# openwrt: specify networks to be treated as LAN. default is "lan"
#OPENWRT_LAN="lan lan2 lan3"
# openwrt: specify networks to be treated as WAN. default wans are interfaces with default route
#OPENWRT_WAN4="wan vpn"
#OPENWRT_WAN6="wan6 vpn6"
# for routers based on desktop linux and macos. has no effect in openwrt.
# CHOOSE LAN and optinally WAN/WAN6 NETWORK INTERFACES
# or leave them commented if its not router
# it's possible to specify multiple interfaces like this : IFACE_LAN="eth0 eth1 eth2"
# if IFACE_WAN6 is not defined it take the value of IFACE_WAN
#IFACE_LAN=eth0
#IFACE_WAN=
#IFACE_WAN6="ipsec0 wireguard0 he_net"
# should start/stop command of init scripts apply firewall rules ?
# not applicable to openwrt with firewall3+iptables
INIT_APPLY_FW=1
# firewall apply hooks
#INIT_FW_PRE_UP_HOOK="/etc/firewall.zapret.hook.pre_up"
#INIT_FW_POST_UP_HOOK="/etc/firewall.zapret.hook.post_up"
#INIT_FW_PRE_DOWN_HOOK="/etc/firewall.zapret.hook.pre_down"
#INIT_FW_POST_DOWN_HOOK="/etc/firewall.zapret.hook.post_down"
# do not work with ipv4
#DISABLE_IPV4=1
# do not work with ipv6
DISABLE_IPV6=1
# select which init script will be used to get ip or host list
# possible values : get_user.sh get_antizapret.sh get_combined.sh get_reestr.sh get_hostlist.sh
# comment if not required
#GETLIST=
Перезапускаем сервис systemctl restart zapret
Автор zapret предлагает проверить работу сервиса следующим способом:
curl -v4s -o/dev/null -k --connect-to ::google.com -k -H Host:\ metsalehti-staging-s4uzwwd6nq-lz.a.run.app https://test.googlevideo.com/app/uploads/2021/11/2022-mediakortti.pdf -w %{speed_download}
Но у меня это мгновенно возвращало (скорость) 0. В итоге я начал играться с параметрами и потерял очень много времени. Нужно было просто игнорировать проверку.
Настройка прокси для Android
Сначала решил поднять squid, забегая вперед, это было ошибкой; у Android есть встроенная поддержка proxy в настройках WIFI, но оказалось, что приложение Youtube игнорирует прокси, при том что другие приложения ходят в сеть через этот прокси.
Чтобы я не делал, качество видео не повышалось, а в логах squid я не видел обращение к youtube, поэтому решил пойти другим путем, поднять socks5 прокси как VPN соединение, для сервера я выбрал Dante.
apt install dante-server
После установки нужно настроить сервер, идем /etc/danted.conf (это настройка только для внутренней сети).
internal: eth0 port = 1080
external: eth0
clientmethod: none #без авторизации
method: none #без авторизации
user.privileged: proxy
user.unprivileged: nobody
user.libwrap: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
}
Перезапускаем systemctl restart danted
Добавляем в автозапуск systemctl enable danted
Если необходимо настроить авторизацию, то читаем тут.
Проверить работу socks прокси можно так
curl --proxy 'socks5h://IP_PROXY:1080' 'https://api.ipify.org/'
Теперь у нас на Debian крутится сервис zapret и sock5 прокси на порту 1080 без авторизации.
Остался последний шаг, установить прокси клиент на андроид, выбрал SocksDroid в нем указываем IP нашего прокси сервера, порт и при желании, ограничиваем использование прокси только указанными приложениями (только Youtube) - com.google.android.youtube.
Нагрузка при просмотре Youtube
Комментарии (60)
rendov
03.08.2024 09:01+10Главным условием является отдельная локальная Linux машина, на которой будет запущена утилита Zapret.
До сих пор не могу понять, зачем морочиться с обходом DPI провайдера такими методами, когда намного проще уже смириться с добавочным счетом в 500р/мес за какой-нибудь нидерландский VPS, на котором крутиться ShadowSocks + V2Ray. Клиенты для него есть и на андроид, и на винду, и на линукс. Я если честно, все эти замедления ютуба даже и не заметил, пока из новостей не прочел. И самое главное, щас то замедляют, а потом просто внесут в блок диапазон IP, и что делать будете?
Intel_Google
03.08.2024 09:01Иногда даже на своем vps скорость проседает до нескольких мегабит. Возможно как раз из-за притока клиентов.
black_list_man
SocksDroid требует запуска при каждом включении телевизора, или есть какой-то автозапуск?
foxyrus Автор
Есть автозапуск