Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Долго грузит видео на ютубе перед воспроизведением #373

Open
nonicknoname opened this issue Sep 10, 2024 · 24 comments

Comments

@nonicknoname
Copy link

nonicknoname commented Sep 10, 2024

Установил openwrt 23.05.4 на роутер, установил dnscrypt-proxy, установил запрет, подобрал стратегию, на ПК - работает все идеально, видео открываются моментально. На айфоне в ютуб-приложении прежде чем видео запустится проходит 5-10 секунд(крутится кружок) и после этого все работает и грузится, некоторые видео открываются моментально, но это довольно редко. На телевизоре также. Но, если открывать видео с браузера в ютубе - довольно быстро грузит. Тестил TLS 1.2, 1.3, quic из под винды через cygwin prompt(команды брал отсюда: #200), вот вывод:

1 команда:

$ curl -v4s -o nul -k --connect-to ::google.com -H "Host: metsalehti-staging-s4uzwwd6nq-lz.a.run.app" https://test.googlevideo.com/app/uploads/2021/11/2022-mediakortti.pdf -w %{speed_download}

  • Connecting to hostname: google.com
  • Host google.com:443 was resolved.
  • IPv6: (none)
  • IPv4: 74.125.131.100, 74.125.131.138, 74.125.131.139, 74.125.131.102, 74.125.131.113, 74.125.131.101
  • Trying 74.125.131.100:443...
  • Connected to google.com (74.125.131.100) port 443
  • ALPN: curl offers http/1.1
    } [5 bytes data]
  • TLSv1.3 (OUT), TLS handshake, Client hello (1):
    } [512 bytes data]
  • TLSv1.3 (IN), TLS handshake, Server hello (2):
    { [122 bytes data]
  • TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
    { [21 bytes data]
  • TLSv1.3 (IN), TLS handshake, Certificate (11):
    { [6298 bytes data]
  • TLSv1.3 (IN), TLS handshake, CERT verify (15):
    { [79 bytes data]
  • TLSv1.3 (IN), TLS handshake, Finished (20):
    { [52 bytes data]
  • TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
    } [1 bytes data]
  • TLSv1.3 (OUT), TLS handshake, Finished (20):
    } [52 bytes data]
  • SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / x25519 / id-ecPublicKey
  • ALPN: server accepted http/1.1
  • Server certificate:
  • subject: CN=*.google.com
  • start date: Aug 12 06:33:49 2024 GMT
  • expire date: Nov 4 06:33:48 2024 GMT
  • issuer: C=US; O=Google Trust Services; CN=WR2
  • SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
  • Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using sha256WithRSAEncryption
  • Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
  • Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
  • using HTTP/1.x
    } [5 bytes data]

GET /app/uploads/2021/11/2022-mediakortti.pdf HTTP/1.1
Host: metsalehti-staging-s4uzwwd6nq-lz.a.run.app
User-Agent: curl/8.9.0
Accept: /

  • Request completely sent off
    { [5 bytes data]
  • TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
    { [288 bytes data]
  • TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
    { [288 bytes data]
    < HTTP/1.1 200 OK
    < content-type: application/pdf
    < last-modified: Mon, 10 Jan 2022 15:11:19 GMT
    < vary: Accept-Encoding
    < etag: "61dc4c97-6d4968"
    < x-frame-options: SAMEORIGIN
    < accept-ranges: bytes
    < X-Cloud-Trace-Context: 7ba996794c203766fa2cc3be677972bb;o=1
    < Date: Tue, 10 Sep 2024 19:00:18 GMT
    < Server: Google Frontend
    < Content-Length: 7162216
    < Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
    <
    { [990 bytes data]
  • Connection #0 to host google.com left intact
    21302741

2 команда:

$ curl --tls-max 1.2 -v4s -o nul -k --connect-to ::google.com -H "Host: metsalehti-staging-s4uzwwd6nq-lz.a.run.app" `https://test.googlevideo.com/app/uploads/2021/11/2022-mediakortti.pdf -w %{speed_download}

  • Connecting to hostname: google.com
  • Host google.com:443 was resolved.
  • IPv6: (none)
  • IPv4: 74.125.131.100, 74.125.131.138, 74.125.131.139, 74.125.131.102, 74.125.131.113, 74.125.131.101
  • Trying 74.125.131.100:443...
  • Connected to google.com (74.125.131.100) port 443
  • ALPN: curl offers http/1.1
    } [5 bytes data]
  • TLSv1.2 (OUT), TLS handshake, Client hello (1):
    } [229 bytes data]
  • TLSv1.2 (IN), TLS handshake, Server hello (2):
    { [106 bytes data]
  • TLSv1.2 (IN), TLS handshake, Certificate (11):
    { [6291 bytes data]
  • TLSv1.2 (IN), TLS handshake, Server key exchange (12):
    { [115 bytes data]
  • TLSv1.2 (IN), TLS handshake, Server finished (14):
    { [4 bytes data]
  • TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
    } [37 bytes data]
  • TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
    } [1 bytes data]
  • TLSv1.2 (OUT), TLS handshake, Finished (20):
    } [16 bytes data]
  • TLSv1.2 (IN), TLS handshake, Finished (20):
    { [16 bytes data]
  • SSL connection using TLSv1.2 / ECDHE-ECDSA-CHACHA20-POLY1305 / x25519 / id-ecPublicKey
  • ALPN: server accepted http/1.1
  • Server certificate:
  • subject: CN=*.google.com
  • start date: Aug 12 06:33:49 2024 GMT
  • expire date: Nov 4 06:33:48 2024 GMT
  • issuer: C=US; O=Google Trust Services; CN=WR2
  • SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
  • Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using sha256WithRSAEncryption
  • Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
  • Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
  • using HTTP/1.x
    } [5 bytes data]

GET /app/uploads/2021/11/2022-mediakortti.pdf HTTP/1.1
Host: metsalehti-staging-s4uzwwd6nq-lz.a.run.app
User-Agent: curl/8.9.0
Accept: /

  • Request completely sent off
    { [5 bytes data]
    < HTTP/1.1 200 OK
    < content-type: application/pdf
    < last-modified: Mon, 10 Jan 2022 15:11:19 GMT
    < vary: Accept-Encoding
    < etag: "61dc4c97-6d4968"
    < x-frame-options: SAMEORIGIN
    < accept-ranges: bytes
    < X-Cloud-Trace-Context: feb889718599585ab7d5ed185443289e;o=1
    < Date: Tue, 10 Sep 2024 19:05:29 GMT
    < Server: Google Frontend
    < Content-Length: 7162216
    < Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
    <
    { [991 bytes data]
  • Connection #0 to host google.com left intact
    16922791

3 команда:

$ curl --http3-only -v4s -o nul -k --connect-to ::google.com -H "Host: metsalehti-staging-s4uzwwd6nq-lz.a.run.app" https://test.googlevideo.com/app/uploads/2021/11/2022-mediakortti.pdf -w %{speed_download}

  • Connecting to hostname: google.com
  • Host google.com:443 was resolved.
  • IPv6: (none)
  • IPv4: 74.125.131.100, 74.125.131.138, 74.125.131.139, 74.125.131.102, 74.125.131.113, 74.125.131.101
  • Trying 74.125.131.100:443...
  • Server certificate:
  • subject: CN=*.google.com
  • start date: Aug 12 06:33:49 2024 GMT
  • expire date: Nov 4 06:33:48 2024 GMT
  • issuer: C=US; O=Google Trust Services; CN=WR2
  • SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
  • Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using sha256WithRSAEncryption
  • Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
  • Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
  • Connected to google.com (74.125.131.100) port 443
  • using HTTP/3
  • [HTTP/3] [0] OPENED stream for https://test.googlevideo.com/app/uploads/2021/11/2022-mediakortti.pdf
  • [HTTP/3] [0] [:method: GET]
  • [HTTP/3] [0] [:scheme: https]
  • [HTTP/3] [0] [:authority: metsalehti-staging-s4uzwwd6nq-lz.a.run.app]
  • [HTTP/3] [0] [:path: /app/uploads/2021/11/2022-mediakortti.pdf]
  • [HTTP/3] [0] [user-agent: curl/8.9.0]
  • [HTTP/3] [0] [accept: /]

GET /app/uploads/2021/11/2022-mediakortti.pdf HTTP/3
Host: metsalehti-staging-s4uzwwd6nq-lz.a.run.app
User-Agent: curl/8.9.0
Accept: /

  • Request completely sent off
    < HTTP/3 200
    < content-type: application/pdf
    < last-modified: Mon, 10 Jan 2022 15:11:19 GMT
    < vary: Accept-Encoding
    < etag: "61dc4c97-6d4968"
    < x-frame-options: SAMEORIGIN
    < accept-ranges: bytes
    < x-cloud-trace-context: b48a94d5c164a3e83f05e89662d03985;o=1
    < date: Tue, 10 Sep 2024 19:08:41 GMT
    < server: Google Frontend
    < content-length: 7162216
    < alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
    <
    { [8236 bytes data]
  • Connection #0 to host google.com left intact
    14825872

Прикрепляю tcpdump:
dump.txt

Настройки: NFQWS_OPT_DESYNC="--dpi-desync=fake,split2 --dpi-desync-autottl=1:1-10 --dpi-desync-fooling=md5sig"

Что делать, куда копать? Всю голову изломал. Подскажите, люди добрые...

@eastone11
Copy link
Contributor

MODE_FILTER=none?

@bol-van
Copy link
Owner

bol-van commented Sep 11, 2024

со скоростью все норм
более 100 мбит

@nonicknoname
Copy link
Author

MODE_FILTER=none?

Да

@nonicknoname
Copy link
Author

со скоростью все норм
более 100 мбит

Это и странно, все вроде как нормально, но почему прежде чем воспроизвести видео, оно грузит по 5-10 секунд? Когда на пк такого нет. Возможно ли как то убрать/сократить эту прогрузку?

@nonicknoname
Copy link
Author

nonicknoname commented Sep 11, 2024

Установил mitmproxy чтобы посмотреть трафик с телефона:
57E48EF8-6AA4-4DF0-9CBB-3F978294795E
59B647B5-C6E9-4E98-BAD4-86B8294FC254

Вот ответы от googlevideo playback, загрузка видео идет по 5 секунд и он пытается скачать большой кусок видео(?)((насколько я понял)). Причем запрос идет к GGC серверам в России. Хочется снизить эту задержку до минимума. Подскажите, что не так? Спасибо за ваше внимание.

@bol-van
Copy link
Owner

bol-van commented Sep 11, 2024

171 мб загружать 5 секунд - это очень неплохая скорость
почему так поступает приложение не знаю
может пытается иначе, не может и делает как может
смотреть дамп с телефона возможности нет
если там нет тупняков на других запросах, то проблема не в блокировке

@nonicknoname
Copy link
Author

Хм, странно, до «замедления» ютуба такой проблемы не было, даже и не знаю, что сделать то, стратегии менял, настройки менял, при любых вариантах на телефоне какое-то время крутится круг, но на компьютере в любом браузере все идеально.

Есть такая особенность, если включить впн на телефоне, зайти в ютуб приложение и выключить впн — любое видео будет летать и не будет рекламы.

Спасибо автору за ответы, если появится возможность — посмотри дамп пожалуйста, ну, или кому не лень из читающих. Я в этом не очень силен, заранее спасибо!

Может еще кто сталкивался с такой проблемой, как решали или боролись? Буду рад любым ответам.

@eastone11
Copy link
Contributor

nonicknoname
Получается когда вы включаете VPN, у вас нет кусков видео по 170мб?
PS
и вопрос не по теме, вы mitmproxy прямо на openwrt поставили? если не сложно не скинете ссылку, я чё то не могу найти как её установить (вижу только что то похожее tcp-http-proxy)

@nonicknoname
Copy link
Author

nonicknoname commented Sep 11, 2024

Не знаю что происходит после манипуляций с впн, не следил за трафиком(неужели устанавливается какое то соединение, которое фиксит эту проблему?) просто случайно заметил. Mitmproxy ставил на пк(вин11), в настройках айфона вай фая прописывал прокси-сервер и в консоль выводились запросы от телефона. https://mitmproxy.org/, еще нужен сертификат от них же, берется на mitm.it

@nonicknoname
Copy link
Author

Блокировка здесь действительно не при чем, немного углубился: HTTP код при "прогрузке" видео перед воспроизведением = 206, т.е качает частями, на компьютере HTTP код 200 и все моментально грузится. Включение и выключение впна на телефоне заставляет код с 206 поменяться на 200 и все моментально грузится в приложении ютуба.

@bol-van Можно ли как-то повлиять на это без костылей в виде включения выключения впна?

@eastone11
Copy link
Contributor

eastone11 commented Sep 12, 2024

Мне кажется чтобы знать ответ как исправить, надо понимать почему приложение начинает таким методом работать.
Еще интересно это у всех так или нет, может всем пофиг на эти 5 секунд и никто не жалуется, а может тут еще какая причина.

Я на выходных смогу потестить если интересно, у вас андройд\айос? прила стандартная или нет?

@bol-van
Copy link
Owner

bol-van commented Sep 12, 2024

разница может быть в используемых ggc
можно попробовать на рутере загасить (0.0.0.0) домен проблемного ггц
чтобы он на другой полез

на эмуляторе android проверял youtube app
после разблокировки 4 доменов все быстро
атв версия не идет даже с впн

@nonicknoname
Copy link
Author

разница может быть в используемых ggc можно попробовать на рутере загасить (0.0.0.0) домен проблемного ггц чтобы он на другой полез

на эмуляторе android проверял youtube app после разблокировки 4 доменов все быстро атв версия не идет даже с впн

Спасибо за ответ, попробую. Нюанс в том, что компьютер подключается к тем же GGC, что и айфон, но на телефоне с кодом HTTP 206, что-то ютубу не нравится в запросе. Посмотрю еще как ведет себя андроид сегодня, отпишусь здесь. Рад, что хоть какая-то зацепка появилась, буду думать что делать дальше, надеюсь это не ложная дорога)

@nonicknoname
Copy link
Author

Зацепка оказалось ложной, на андроиде тоже "жует" видео, попробовал в hosts на роутере позакидывать разные GGC - не помогло, он первый раз делал запрос к ру GGC, потом переключался на какой-то США GGC и тоже не грузил его, в итоге видео вообще не запускалось. Я в замешательстве, что делать...

@Dager26reg
Copy link

Dager26reg commented Sep 13, 2024

Добрый день. Вчера что-то поменяли у наших провайдеров и перестал грузить видеопотоки ютуб, при том что сам сайт открывается, и открываются другие сайты заблокированные.
Начал экспериментировать со стратегиями, оказалось что если выставить ТТЛ 2 на ГДПИ принудительно - тогда ютуб начинает грузить моментально видосы, и судя по ggc он их грузит с росийских. Но при этом не открываются некоторые заблокированные сайты. Но если выставить ТТЛ 3 или более - открываются все сайты которые заблокированы. Открывается сам ютуб но видосы перестает показывать, и щемится на америкосовские ggc
Соотвествено такой вопрос - а можно ли сделать прогу так, чтоб у нее в конфиге можно было указать стратегию по умолчанию, которая рпименяется для всех доменов из autohost файла, но если после домена в автохост файле прописана цифира после домена - то применяется стратегия с этой цифирой? А в конфиге прописывать несколько стратегий под ццифрой 1,2,3 и так далее, сколько надо.
ЧТоб можно было для разных доменов применять разные стратегии?

Если убрать ТТЛ в 0 и оставить только флаг badsum то ютуб работает как-то нестабильно, какие-то видосы открываются какие-то нет. Но при этом все остальные сайты нормально работают.

@bol-van
Copy link
Owner

bol-van commented Sep 13, 2024

есть другие ограничители fooling
см доку
md5sig самый безобидный

@Dager26reg
Copy link

Dager26reg commented Sep 13, 2024

md5sig стоял изначально. И все прекрасно работало. Но вчера перестал ютуб грузить видосы. И работало даже без ТТЛ. А сегодня экспериментировал и выяснил что ютуб работает без сбоев и грузит видосы быстрее чем реньше, когда ТТЛ2 фиксированно. и отключить md5sig оставив badsum, но badsum можно и убрать в принципе так как ТТЛ 2 совсем мал, но вот если поставить ТТЛ 3 то ютуб начинает работать нестабильно, видосы через одного грузиться а то и вовсе черный экран, обрубаться на пол видео, или не перематываться. Никак не могу понять что они сделали. Но с ТТЛ2 не открывается другой сайт с онлайнкинотеатром. Он открывается если ТТЛ больше 5 ставить. Если ТТЛ авто ставить от 2 до 15 то также ютуб глючит, то открывает видосы то нет.
Никак не могу понять что они там сделали у провайдеров? Ведь ГДИ и запред обходит все блокировки? ПРоблема только с ютубом. Такое впечатление что именно сервакам GGC стал не нравится трафик от запрет и ГДПИ? Сам гугл у себя что-то ообновил?
И еще заметил что если ТТЛ ставить 2 то видос грузится - с какхикто московкких серваков, если ставишь ТТЛ 3 и более то видео грузится с американских серваков, при том сами эти серваки пингуются но ответа от них нет.
PS: Такое впечатление что когда стоит ТТЛ2 фэйк проходит шлюз прова, при том что ДПИ стоит перед шлюзом, а щза шлюзом стоят локальные кеш-серваки гугла, и вот им фейк стал не нравится. и они блокают трафик, несмотря на флаги md5sig, и badsum. Но видимо по пути к онлайнкинотеатру стоит еще один ДПИ который блокает его. Если ТТЛ ставить чтоб трафик дошел до другого ДПИ, тогда локальные серваки гугла блочат соединение к ним. Несмотря на наличие флагов плохого пакета. Что за ??????

@Dager26reg
Copy link

Неужели РКН сговорился с гуглом, и они обновили прошивку своих серваков так чтоб те пропускали "битые" пакеты, а соотвественно ПО принимало фейк, и на него реагировало соотвествующим образом? ПРи том что сам ДПИ провайдера трафик пропускает, и нормально "хавает" фейк? У меня другого объяснения этому нет? Почему происходит редирект на америкосовские серваки как только файкпакет проходит шлюз провайдера?

@Dager26reg
Copy link

Ну а вообще я за то чтоб ввести возможность добавления индивидуальной настройки стратегий для отдельных доменов. Это сделало бы программу намного гибче и универсальнее, там где не подходит общее правило прописываешь отдельное.

@bol-van
Copy link
Owner

bol-van commented Sep 14, 2024

если фейк доходит до сервера - это конец
соединение разрушается
мд5сиг заставляет только линух отбрасывать пакеты
и не рушить его
ттл берется минимальным из максимальных
ттл не допустит фейк до большинства, но не всех серверов
и он поможет от не линухов
потому ттл и мд5сиг полезны вместе

@bol-van
Copy link
Owner

bol-van commented Sep 14, 2024

Ну а вообще я за то чтоб ввести возможность добавления индивидуальной настройки стратегий для отдельных доменов. Это сделало бы программу намного гибче и универсальнее, там где не подходит общее правило прописываешь отдельное.

это есть в плане
иногда нужно
но меня печалит, что народ вместо чтобы изучить вопрос и написать общую стратегию
начнет злоупотреблять и писать разные ттл в разных стратегиях
появятся дурные инструкции и советы
основанные на копипасте без понимания

@Dager26reg
Copy link

В том то и дело что судя по млим исследованиям гугловские ggc стоят очень близко и они со вчерашнего дня стали принимать пакеты с флагами битой секвенции, битой чексуммы или md5 сигнатуры. И соответственно рушится запоос. Единственный шанс чтоб до гугловского кешсервака не дошел фейк. А значит нет возможности задурить дпи стоящие дальше.
Конечно есть идея настроить второй демон с другим конфигом с другой стратегией на домены gcc а у первого этот домен исключить. Но пока не хватает мозгов как включить это по цепочке, и возможно ли это вообще?

@ptipti23
Copy link

У меня тоже была такая проблема, что с компьютера видео показывало превосходно, на телефоне тупило. Решилось (лично у меня) добавить правило в nftables, чтобы DNS запросы IPv4 c 53 порта перенаправлялись на 77.88.8.88:1253. После этого и телефон перестал притупливать

@Dager26reg
Copy link

Щас у людей тупит видео по другому.
Пробовал подбирать ттл без благов чтоб работал ютуб и не тупило видео. Оказалось что достаточно увеличить ттл на 1, видосы открываться пере,тают. Уменьшаешь на 1. Все норм. Уменьшаешь еще на 1, перестают открываться заблокированные сайты в том число главная страница ютуба. При этом смотрю с какого сервака тянется видос - пингую его число хопов где 7 где 9. При этом рабочий ттл 2-3. Если сделать ттл к примеру +1 и добавить любой из флагов неправильной секвенции или чексуммы или мд5 сигнатуры то видосы по прежнему не грузятся.
Если убрать ттл вообще и оставить флаги сигнатуры и чексуммы - работают все все сайты кроме видео ютуба. Причем сам сайт суба открывается без проблем. Что говорит о рабочей стратегии ркн но ломаются соединения кешсерверов.
Возможно я ошибаюсь но как я понял соединение к сервакам гугла проходят через кешсервер провайдера который стоит прям за шлюзом прова. И этот сервак пропускает битые пакеты. И соединение ломается даже если сам сервер видоса стоит "гдето-там дальше" По идее должно работать автоттл но не работает. Ибо как я понял ответ приходит от дальнего сервака через кешсервер. С большим ттл. Авто выставляет ттл-1 пакет идет на кешсервер и ломает соединение.
По другому не могу объяснить поведение. Причем при ттл 3 видос тянется с какогото московского сервака до которого 9 хопов. Но стоит выстать ттл 4 - все. Этот сервак недоступен. Висит таймаут. 🤷‍♂️ причем вылавливал разные серваки. С разными хопами. И все они недоступны при ттл4 и все доступны и отвечают если ттл 3 у фейка.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants