Да, разобрался. По этой инструкции.
Итак, установил zapret (без лишних файлов и конфигов, только бинарники, пути сборки мои, на примере Ubuntu):
sudo apt install gcc g++ make git libnetfilter-queue-dev zlib1g-dev iptables
git clone --depth=1 https://github.com/bol-van/zapret
cd zapret
make
sudo cp /home/denis/zapret/binaries/my/ip2net /usr/local/bin/ip2net
sudo cp /home/denis/zapret/binaries/my/mdig /usr/local/bin/mdig
sudo cp /home/denis/zapret/binaries/my/nfqws /usr/local/bin/nfqws
sudo cp /home/denis/zapret/binaries/my/tpws /usr/local/bin/tpws
rm -rd /home/denis/zapret
Впрочем, можно не компилировать, а скопировать готовые для своей архитектуры. Но готовые бинарники статические (static), а не shared. Со своим встроенным libnetfilter, видимо. Зависимости можно посмотреть с помощью readelf -d
Создал файл /home/denis/youtube-domain.txt с содержимым:
googlevideo.com
Дальше, в Терминале 1:
sudo nfqws --qnum=200 --dpi-desync=disorder2 --dpi-desync-split-pos=1 --hostlist=/home/denis/youtube-domain.txt
(для завершения Ctrl+C)
Путь к txt файлу, естественно ваш.
Если терминал случайно закрылся, программа может остаться висеть в памяти. Убить её можно в диспетчере задач. Правда, придётся от root. Можно узнать ID процесса и выполнить sudo kill ID
(указав нужный ID) или sudo killall nfqws
В Терминале 2 выполняю две команды (добавление iptables правил, они добавляются до перезагрузки компа, о том, как сохранить на постоянной основе, пока умолчим):
sudo iptables -I OUTPUT -o enp1s0 -p tcp --dport 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
sudo ip6tables -I OUTPUT -o enp1s0 -p tcp --dport 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
Для ipv4 и ipv6. Сетевой интерфейс у меня enp1s0. У вас может быть другой. Узнать можно командой ip link
Посмотреть список правил:
sudo iptables -L -n
Проверка скачивания чего-нибудь. Сначала установим yt-dlp из pip (в ~/.local, а потому .local/bin должен быть в PATH):
sudo apt install python3-pip ffmpeg curl
export PATH=$HOME/.local/bin:$PATH
pip3 install -U yt-dlp
Обновление yt-dlp:
pip3 install -U yt-dlp
Скачивание:
yt-dlp 'YOUTUBE ССЫЛКА' -f 137 --no-config --downloader=curl --downloader-args="--http1.1"
curl хорош для тестов, потому что качает весь URL в однопоток (не кусками) и более детально показывает скорость. Но его замедляет уже сам YouTube, правда, не так сильно (2xrealtime bitrate/time). Т.е. должно качаться в два раза быстрее продолжительности видео или аудио. Чем выше качество, тем выше скорость скачивания (для аудио совсем маленькая скорость это норм).
--http1.1
можно заменить на --http3-only
но нужен curl с поддержкой http3/quic (распакованный бинарник закиньте в /usr/local/bin, т.е. sudo cp /path/to/curl /usr/local/bin/curl
, при необходимости сделайте исполняемым sudo chmod +x /usr/local/bin/curl
Или просто:
yt-dlp 'YOUTUBE ССЫЛКА' -f 137
Можно, например -f 137+251
Список форматов:
yt-dlp 'YOUTUBE ССЫЛКА' -F
Для удаления правил надо добавить те же строчки, но заменить -I (значит Insert) на -D (значит Delete). Т.е. будет:
sudo iptables -D OUTPUT -o enp1s0 -p tcp --dport 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
sudo ip6tables -D OUTPUT -o enp1s0 -p tcp --dport 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass
Проверим, что правила удалились:
sudo iptables -L -n
Удалить yt-dlp из pip (например, чтобы установить из другого источника) можно командой:
pip3 uninstall yt-dlp