Skip to content

Instantly share code, notes, and snippets.

@kotsmotritnastul
Last active November 5, 2025 08:43
Show Gist options
  • Select an option

  • Save kotsmotritnastul/989b0cc025abdd9c58fb149d4e8c0d29 to your computer and use it in GitHub Desktop.

Select an option

Save kotsmotritnastul/989b0cc025abdd9c58fb149d4e8c0d29 to your computer and use it in GitHub Desktop.
как найти новую стратегию для обхода блокировки ютуба одним скриптом
#!/bin/sh
# как этот скрипт будет работать:
# у вас уже должен быть настроенный свежий запрет
# там уже должен быть хотя бы раз настроен обход блокировок ютуба
# это значит что в конфиге должна быть строка вида --filter-tcp=443 РАБОЧАЯ_СТРАТЕГИЯ --hostlist=/opt/zapret/lists/yt.txt --new
# файл /opt/zapret/lists/yt.txt это файл в котором перечислены домены ютуба то есть youtube.com и googlevideo.com
# скрипт автоматизирует поиск новой стратегии в случае если ютуб уже настроен и если вы сунете файл скрипта в кронтаб
# но можно его и руками запускать чтобы не делать всё руками
mkdir -p /opt/zapret/lists
printf "ggpht.cn\nggpht.com\ngooglevideo.com\nwide-youtube.l.google.com\nwithyoutube.com\nyoutu.be\nyoutube-nocookie.com\nyoutube-ui.l.google.com\nyoutube.ae\nyoutube.al\nyoutube.am\nyoutube.at\nyoutube.az\nyoutube.ba\nyoutube.be\nyoutube.bg\nyoutube.bh\nyoutube.bo\nyoutube.by\nyoutube.ca\nyoutube.cat\nyoutube.ch\nyoutube.cl\nyoutube.co\nyoutube.co.ae\nyoutube.co.at\nyoutube.co.cr\nyoutube.co.hu\nyoutube.co.id\nyoutube.co.il\nyoutube.co.in\nyoutube.co.jp\nyoutube.co.ke\nyoutube.co.kr\nyoutube.co.ma\nyoutube.co.nz\nyoutube.co.th\nyoutube.co.tz\nyoutube.co.ug\nyoutube.co.uk\nyoutube.co.ve\nyoutube.co.za\nyoutube.co.zw\nyoutube.com\nyoutube.com.ar\nyoutube.com.au\nyoutube.com.az\nyoutube.com.bd\nyoutube.com.bh\nyoutube.com.bo\nyoutube.com.br\nyoutube.com.by\nyoutube.com.co\nyoutube.com.do\nyoutube.com.ec\nyoutube.com.ee\nyoutube.com.eg\nyoutube.com.es\nyoutube.com.gh\nyoutube.com.gr\nyoutube.com.gt\nyoutube.com.hk\nyoutube.com.hn\nyoutube.com.hr\nyoutube.com.jm\nyoutube.com.jo\nyoutube.com.kw\nyoutube.com.lb\nyoutube.com.lv\nyoutube.com.ly\nyoutube.com.mk\nyoutube.com.mt\nyoutube.com.mx\nyoutube.com.my\nyoutube.com.ng\nyoutube.com.ni\nyoutube.com.om\nyoutube.com.pa\nyoutube.com.pe\nyoutube.com.ph\nyoutube.com.pk\nyoutube.com.pt\nyoutube.com.py\nyoutube.com.qa\nyoutube.com.ro\nyoutube.com.sa\nyoutube.com.sg\nyoutube.com.sv\nyoutube.com.tn\nyoutube.com.tr\nyoutube.com.tw\nyoutube.com.ua\nyoutube.com.uy\nyoutube.com.ve\nyoutube.cr\nyoutube.cz\nyoutube.de\nyoutube.dk\nyoutube.ee\nyoutube.es\nyoutube.fi\nyoutube.fr\nyoutube.ge\nyoutube.googleapis.com\nyoutube.gr\nyoutube.gt\nyoutube.hk\nyoutube.hr\nyoutube.hu\nyoutube.ie\nyoutube.in\nyoutube.iq\nyoutube.is\nyoutube.it\nyoutube.jo\nyoutube.jp\nyoutube.kr\nyoutube.kz\nyoutube.la\nyoutube.lk\nyoutube.lt\nyoutube.lu\nyoutube.lv\nyoutube.ly\nyoutube.ma\nyoutube.md\nyoutube.me\nyoutube.mk\nyoutube.mn\nyoutube.mx\nyoutube.my\nyoutube.ng\nyoutube.ni\nyoutube.nl\nyoutube.no\nyoutube.pa\nyoutube.pe\nyoutube.ph\nyoutube.pk\nyoutube.pl\nyoutube.pr\nyoutube.pt\nyoutube.qa\nyoutube.ro\nyoutube.rs\nyoutube.ru\nyoutube.sa\nyoutube.se\nyoutube.sg\nyoutube.si\nyoutube.sk\nyoutube.sn\nyoutube.soy\nyoutube.sv\nyoutube.tn\nyoutube.tv\nyoutube.ua\nyoutube.ug\nyoutube.uy\nyoutube.vn\nyoutubeeducation.com\nyoutubeembeddedplayer.googleapis.com\nyoutubefanfest.com\nyoutubegaming.com\nyoutubego.co.id\nyoutubego.co.in\nyoutubego.com\nyoutubego.com.br\nyoutubego.id\nyoutubego.in\nyoutubei.googleapis.com\nyoutubekids.com\nyoutubemobilesupport.com\nyt.be\nytimg.com" | tee /opt/zapret/lists/yt.txt
main()
{
uznaem_na_kakoi_sisteme_rabotaem
poluchaem_adres_google_global_cache_servera_i_prisvaivaem_v_peremennuyu
vykluchaem_zapret
pishem_vyvod_blockchecka_v_file_blockcheck_output
ischem_v_blockcheck_output_stroku_so_strategiei_obhoda_i_prisvaivaem_v_peremennuyu
suem_stroku_s_rabochei_strategiei_v_config_zapreta
vkluchaem_zapret
}
uznaem_na_kakoi_sisteme_rabotaem()
{
os_id=$(awk 'BEGIN {FS = "="} /^ID=/ {gsub("\"",""); print $2}' /etc/os-release)
}
delaem_backup_configa_zapreta()
{
cp -v /opt/zapret/config /opt/zapret/config_"$(date +%s)"
}
suem_stroku_s_rabochei_strategiei_v_config_zapreta()
{
delaem_backup_configa_zapreta
#выравниваем конфиг чтобы каждая стратегия была новой строкой
sed -i -e 's/--new /--new\n/g' /opt/zapret/config
#вставляем рабочую стратегию между --filter-tcp=443 и --hostlist=/opt/zapret/lists/yt.txt
awk -v rabochaya_strategiya_awk="$rabochaya_strategiya" '$0 !~ /yt.txt/ { print } /yt.txt/ { print $1 " " rabochaya_strategiya_awk " " $(NF-1) " " $NF }' /opt/zapret/config > /opt/zapret/config_temp
cp -rfv /opt/zapret/config_temp /opt/zapret/config
}
ischem_v_blockcheck_output_stroku_so_strategiei_obhoda_i_prisvaivaem_v_peremennuyu()
{
unset rabochaya_strategiya
rabochaya_strategiya=$(awk '/SUMMARY/{getline; print}' /tmp/test/blockcheck_output.txt | awk 'NR==1{for (i=6; i<=NF; i++) print $i}' | awk -v RS= '{$1=$1}1')
echo "$rabochaya_strategiya"
#проверяем не пустая ли строка со стратегией обхода
if [ -z "${rabochaya_strategiya}" ]
then
echo "переменная rabochaya_strategiya пустая, что-то не то, выходим из скрипта.
возможно вы забыли отключить запрет и ютуб для блокчека выглядит незаблокированным
поэтому никакой стратегии он искать не стал"
exit 1
else
echo "рабочая стратегия для обхода -> $rabochaya_strategiya"
fi
}
poluchaem_adres_google_global_cache_servera_i_prisvaivaem_v_peremennuyu()
{
unset GGC_ADDRESS
GGC_ADDRESS=$(curl -x socks5://127.0.0.1:9050 --connect-timeout 15 -s "https://www.youtube.com/watch?v=eZD5z7MTvJY" | awk 'BEGIN {
RS="\\/"
i=0
}
$1 ~ /googlevideo.com/ {
array[$i]=sprintf( $0 )
i++
}
END {
print array[$i]
}
')
if [ -z "${GGC_ADDRESS}" ]
then
echo "переменная GGC_ADDRESS пустая, что-то не то, выходим из скрипта.
скорее всего прокси указанный для curl недоступен (там по умолчанию локальный тор)
придется руками отредактировать скрипт и вставить туда рабочий прокси
а может вообще какие-то проблемы с интернетом"
exit 1
else
echo "GGC -> $GGC_ADDRESS"
fi
}
vykluchaem_zapret()
{
case $os_id in
Deepin|debian|ubuntu|zorin|linuxmint|manjaro|almalinux|rocky|rhel|fedora|nobara)
systemctl stop zapret
;;
openwrt)
service zapret stop
;;
*)
chto_to_ne_to_vyhodim
;;
esac
}
vkluchaem_zapret()
{
case $os_id in
Deepin|debian|ubuntu|zorin|linuxmint|manjaro|almalinux|rocky|rhel|fedora|nobara)
systemctl stop restart
;;
openwrt)
service zapret restart
;;
*)
chto_to_ne_to_vyhodim
;;
esac
}
chto_to_ne_to_vyhodim()
{
echo "похоже у вас какой-то обскурный дистр. если так то вы большой любитель пердолиться. перепишите этот скрипт под свой sysvinit/runit или что у вас там а то мне лень тестировать скрипт под все системы управления службами."
countdown=5
while [ "${countdown}" -le 0 ]
do
printf "%s...\n" "$countdown"
sleep 1
countdown=$((countdown - 1))
done
exit 1
}
pishem_vyvod_blockchecka_v_file_blockcheck_output ()
{
vykluchaem_zapret
rm /tmp/blockcheck_output.txt
unset DOMAINS
rm -v /tmp/blockcheck_output.txt
DOMAINS=$GGC_ADDRESS \
IPVS=4 \
ENABLE_HTTP=0 \
ENABLE_HTTPS_TLS12=1 \
BATCH=1 \
ENABLE_HTTPS_TLS13=0 \
ENABLE_HTTP3=0 \
REPEATS=10 \
PARALLEL=1 \
SKIP_TPWS=1 \
SCANLEVEL=quick \
/opt/zapret/blockcheck.sh | tee /tmp/blockcheck_output.txt
}
main "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment