Замедление Twitter в России

Оно идёт со SNI, на самом деле (я немного соврал). В SNI в этом случае передаётся не домен, а IP-адрес: 192.229.220.133.

  1. Устанавливается TLS-подключение, в ClientHello SNI передаётся 192.229.220.133.
  2. Сервер отвечает каким-то сертификатом, неважно каким. curl игнорирует его проверку (опция -k)
  3. Внутри TLS-сессии, в HTTP-запросе передается правильный домен (Host: video.twimg.com).

Итого — DPI видит только IP-адрес в SNI, а сервер на этом IP-адресе видит корректный домен в HTTP-запросе.

Мегафон 4G — замедление любых доменов t co есть прямо сейчас, как минимум, в Московской области.

Ростелеком Самарская обл. — замедления нет.
Ростелеком Пермский край перестал замедлять все сайты по маске *t.co*, остался только твиттер.

В Питере тоже наблюдаю дурь с *t.co* на мобильном Мегафоне.

Пару-тройку раз сравнил скорости скачивания одного и того же файла с одного и того же сервера по двум разным DNS-именам:

Справедливости ради отмечу, что в текущую секунду проблема не повсеместная, я потыкал свои старые пробники на домашних подключениямх у десятка разных провайдеров в тройке регионов – нигде не заметил замедления, кроме как на пробнике у @ValdikSS

Нашел вот такой сервис, по его версии по маске t.co попало под фильтр почти 3млн доменов.
https://index.woorank.com/en/reviews?url=t.co

Хорошая находка, но интересуют конечно же RU-владельцы (https://index.woorank.com/en/reviews?countries=RU&url=t.co)

Вдохновился идеей Здольникова и сделал чуть более методологически корректный тест в браузере: https://speed.gulag.link/

Исходники и собранный с помощью дорогого коллеги бинарь живут на GitHub - darkk/ru-twi-ndt7: Rapid test for *t.co* throttling Используются домены speed.gulag.link и t.co.speed.gulag.link. Сервер крутится на минимальном Startdust-инстансе в Scaleway, т.е. больше 100 мегабит он не выдаст никогда, но для детекта разницы между одним мегабитом и десятью – сойдёт.

Так, для полноты картины опишу свою модель понимания.
Соединение происходит по следующей схеме:

  1. Я пишу в строку браузера URL
  2. Моя система знает IP DNS и передает на него запрос ip сервера под нужным мне доменом, dns возвращает мне нужный ip
  3. Я зная ip сервера отравляю TCP пакет, в котором данные о типе шифрования
    3.1 Если на ip один домен, то он сразу дает мне сертификат
    3.2 Если на ip много доменов то я в TCP включаю SNI, чтобы сервер вернул нужный сертификат.
  4. Я сверяю домен и сертификат.
  5. Обмениваемся ключами с сервером
  6. Отправляю шифрованный http запрос

Если я правильно понял схему, то вопрос, зачем в SNI передавать IP? Мы же игнорируем проверку сертификата, следовательно, можно любую тарабарщину передавать и соединяться, при этом DPI РКН не увидит домена в SNI, а в http тем более, так как он зашифрован в TLS

Не совсем. SNI передается современными браузерами всегда, и уже на его основе сервер выдает нам сертификат. Курлом в SNI передается IP чисто потому что курл всегда передает хост в SNI, айпи нужен чтобы в SNI не попал оригинальный домен и сессия не зашейпилась. В дальнейшем уже в HTTP-хедерах передается хост, чтобы конечный веб-сервер верно определил на какой vhost ему пришел запрос, SNI для этого не используется.

Подсказали простое решение для iOS, которое обходит шейпер: Cloudflare-овский 1.1.1.1 + WARP

tiera SPB
9:55 11.03.2021

все по старому. замедление на github user content, на microsoft, reddit
на твиттер по прежнему быстро. страницы и видео без проблем

Немного личных наблюдений:

  1. http с t.co в хосте не шейпится, только SSL шейпится!
  2. tco (без точки) не шейпится
  3. Судя по всему, ВСЕ урлы выбираются регуляркой, просто на остальных это не так заметно (вряд ли у кого-то в домене случайно затесается pbs.twimg.com). Проверял на поддомене вида pbs.twimg.com.my.own.domain. Надо посмотреть, к каким еще достаточно коротким доменам у РКН есть претензии

ValdikSS, вы уже знаменитость

Я предполагаю их правило примерно как слева, понятное дело сложнее, и включены еще другие домены, но выглядит как тривиальная ошибка регулярки и игнорирование предварительных правил тестирования.
photo_2021-03-10_20-19-37

Ради интереса, проверял ли кто-нибудь домены *t.co* через QUIC, т.е. UDP?

Кажется, шейпится и простой HTTP, без SSL:

curl -Lo /dev/null -v http://a.t.co.kanamori.loweffort.media/100MB.bin -k -H "Host: a.t.co.kanamori.loweffort.media"

15 КБ/с

точка в regexp это любой символ. пустой символ к точке не относится, поэтому tco не подпадает под t.co. подпадает toco, например. проверил на grep -E

У меня на доменах вроде “taco” не шейпит:

curl -Lo /dev/null -v https://taco.kanamori.loweffort.media/100MB.bin -k

2-3 МБ/с

При этом,

curl -Lo /dev/null -v https://t.co.kanamori.loweffort.media/100MB.bin -k

15 КБ/с

Nope

Да, я тоже шейпинга на taco не наблюдал. Собственно, оттуда и имя файла https://speed.gulag.link/taco.js и потому в заголовке *t.co* в стиле unix glob, а не regexp :slight_smile: