todo/Zapret2/steam.md
loop-uh 4e01257265
Some checks failed
Published content check / validate (push) Failing after 10s
Steam и Zapret 2: домены, порты и профиль по разбору трафика
Новая заметка Zapret2/steam.md по записи трафика клиента Steam (вход, магазин, сообщество): серверы входа steamserver.net на TCP 27020/27021/27024 и 443 в сети Valve, статика на Akamai и Fastly, разные ClientHello клиента и встроенного браузера, сверка с официальным списком портов Valve и готовый профиль Zapret 2. Диаграмма объёма трафика по сетям, ссылки из Zapret2.md, add-profile и find-game-strategy.
2026-09-27 21:39:16 +03:00

193 lines
28 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date: 2026-09-27
tags:
- zapret
- zapret2
- steam
- games
- hostlist
- profile
- howto
aliases:
- Steam Zapret
- Стим не работает с Zapret
- Какие домены у Steam
- Домены Steam для hostlist
- Порты Steam 27015-27050
- Профиль для Steam в Zapret 2
- Стим не заходит в сеть
- steamserver.net что это
description: "Какие домены, порты и CDN использует Steam при входе и в магазине, по разбору дампа трафика, и как собрать под Steam профиль Zapret 2."
---
> [!mirror] Резервное зеркало
> Актуальная версия этой страницы — на основной вики: [wiki.zapret.moe/Zapret2/steam](https://wiki.zapret.moe/Zapret2/steam)
# 🎮 Steam и Zapret 2: какие домены и порты нужны и как настроить профиль
> [!info] О чём заметка
> Что делает клиент Steam (*Стим*) в сети при запуске и при просмотре магазина: к каким серверам и на какие порты он подключается, в каких сетях они живут и чем это важно для [[profile|профиля]] [[Zapret2|Zapret 2]]. Разбор основан на записи трафика, а в конце собран готовый список доменов и портов для своего профиля. Как создать профиль в интерфейсе, по шагам расписано в [[add-profile]], подбор стратегии для самих игр — в [[find-game-strategy]].
> [!tip] TL;DR
> 1. Клиент Steam входит в сеть через собственные серверы Valve `*.steamserver.net`, и не только по порту 443, но и по TCP **27020, 27021 и 27024**. Профиль с портами `80,443` эти соединения не увидит.
> 2. Магазин, сообщество, картинки и видео приходят с чужих сетей доставки: Akamai (`steampowered.com`, `steamcommunity.com`, `steamusercontent.com`) и Fastly (`*.fastly.steamstatic.com`). Через них прошёл почти весь трафик Steam в записи.
> 3. Для профиля берите hostlist, а не список IP: адреса CDN меняются, а часть контента в записи пришла по IPv6.
> 4. Минимальный профиль: TCP-порты `80,443-65535` и hostlist из `steampowered.com`, `steamcommunity.com`, `steamstatic.com`, `steamusercontent.com`, `steamcontent.com`, `steamserver.net`.
> 5. Трафик самих игр (UDP 27000–27250 и P2P) этим профилем не покрывается, для него нужен отдельный профиль по [[find-game-strategy]].
## Откуда данные и чего в них нет
Разбор сделан по записи трафика компьютера с Windows 27 сентября 2026 года. Запись длится 47 секунд: за это время клиент Steam подключился к сети, открылся магазин, страница игры с трейлером и раздел сообщества. Запись разобрана по заголовкам пакетов и по открытой части TLS-рукопожатия, где клиент называет имя сервера (об этом ниже). Содержимое соединений зашифровано и не расшифровывалось.
> [!warning] Это карта подключений, а не проверка обхода
> Во время записи Zapret не вмешивался в соединения Steam (в записи нет поддельных пакетов, которые он отправляет), и провайдер ничего не заблокировал: все соединения к Steam установились, трейлеры и картинки скачались целиком. Поэтому запись показывает, **куда** Steam ходит, но не говорит, какие из этих соединений режет [[Zapret/about#Обход DPI (система ТСПУ)|ТСПУ]] (технические средства противодействия угрозам — оборудование DPI у провайдера) и какая стратегия их пробивает. В записи также нет скачивания игры, запуска игры с сетевой игрой, голосового чата, мастерской и оплаты: для этих частей Steam сверяйтесь с официальным списком Valve, разобранным ниже.
Многие соединения к Fastly в записи закончились пакетом RST (сброс соединения). Для встроенного браузера на Chromium это обычный способ закрыть лишние соединения, и признаком блокировки он здесь не был: до сброса в каждом таком соединении завершилось TLS-рукопожатие и сервер успел ответить. Если вы разбираете свою запись, RST в конце соединения сам по себе не признак блокировки; подозрительно, когда сброс приходит сразу после первого пакета клиента и ответа от сервера нет.
## Как Steam входит в сеть: серверы подключения Valve
Первое, что делает клиент после запуска, — проверяет, есть ли интернет. Он отправляет обычный HTTP-запрос без шифрования `GET /204` на `steamconnecttest.com` и ждёт пустой ответ с кодом 204. В записи этот домен разрешился в адрес внутри сети Ростелекома: так выглядит кэширующий узел Akamai, установленный у провайдера. Сразу за ним клиент проверяет IPv6 через `ipv6check-http.steamserver.net` и `ipv6check-udp.steamserver.net`.
Дальше начинается главное. Чтобы войти в аккаунт, получать сообщения, список друзей и уведомления, клиент держит постоянное соединение с одним из серверов подключения Valve. В сети Steam их называют CM-серверами (от *connection manager*, «менеджер соединений»). В записи клиент почти одновременно открыл восемь соединений к таким серверам во Франкфурте (`fra1`, `fra2`) и Стокгольме (`sto1`, `sto2`):
| Сервер | Порт TCP |
|---|---|
| `cmp1-fra1.steamserver.net` | 27020 |
| `cmp1-fra2.steamserver.net` | 27024 |
| `cmp2-fra2.steamserver.net` | 27020, 27024, 443 |
| `cmp1-sto1.steamserver.net` | 27021 |
| `cmp1-sto2.steamserver.net` | 27020 |
| `cmp2-sto2.steamserver.net` | 443 |
Все восемь соединений оставались открытыми до конца записи, но основная переписка шла по одному, к `cmp2-sto2` на порт 443: по нему прошло около 50 КБ, по каждому из остальных — около 7 КБ, то есть рукопожатие и редкий служебный обмен. Похоже, клиент держит запасные соединения к нескольким серверам, а работает через одно. Это вывод по одной записи: как клиент выбирает сервер, Valve не документирует.
Все эти серверы живут в собственной сети Valve, автономной системе `AS32590` (адреса `155.133.x.x` и `162.254.198.x`). Соединения к ним зашифрованы TLS, и в первом пакете клиент открыто называет имя сервера. Это поле называется SNI (*Server Name Indication*): по нему ТСПУ узнаёт, к какому сайту идёт соединение, и по нему же hostlist Zapret решает, применять ли к соединению профиль.
Проще говоря: вход в Steam — это обычное TLS-соединение с понятным именем `*.steamserver.net`, только часто на нестандартном порту. Если профиль слушает лишь порты 80 и 443, соединения на 27020, 27021 и 27024 пройдут мимо него, даже когда домен есть в списке. Valve в справке указывает для входа и загрузок диапазон TCP и UDP **27015–27050**, и все порты из записи в него попадают.
## Магазин и сообщество: встроенный браузер и чужие CDN
Магазин, страницы игр, профиль и сообщество внутри клиента показывает не сам клиент, а встроенный браузер `steamwebhelper.exe`, собранный на Chromium. Поэтому эта часть Steam ведёт себя в сети как обычный сайт: десятки параллельных соединений к нескольким доменам, картинки и видео со своих серверов доставки.
Эти серверы принадлежат не Valve. Крупные сервисы арендуют место в сетях доставки контента (CDN, *Content Delivery Network*), которые держат копии файлов по всему миру; подробнее о них и о том, как узнать владельца адреса, — в [[find-domain-owner]]. В записи Steam использовал две такие сети:
| Домен | Что грузит | Сеть |
|---|---|---|
| `store.steampowered.com` | страницы магазина | Akamai |
| `api.steampowered.com` | программный интерфейс клиента | Akamai |
| `steamcommunity.com` | сообщество, профили | Akamai |
| `images.steamusercontent.com` | скриншоты и картинки пользователей | Akamai (IPv6) |
| `video.akamai.steamstatic.com` | трейлеры | Akamai (IPv6) |
| `store.fastly.steamstatic.com`, `community.fastly.steamstatic.com` | оформление магазина и сообщества | Fastly |
| `shared.fastly.steamstatic.com`, `shared.steamstatic.com`, `cdn.fastly.steamstatic.com` | общие скрипты, стили, обложки игр | Fastly |
| `avatars.fastly.steamstatic.com` | аватары | Fastly |
| `video.fastly.steamstatic.com` | трейлеры | Fastly |
По объёму соотношение получилось резким: через Fastly прошло около 37 МБ, через Akamai около 20 МБ, а через серверы Valve — около 0,1 МБ.
![[steam-traffic-by-network.png]]
Проще говоря: собственные серверы Valve отвечают за вход и связь с аккаунтом, а всё тяжёлое, что вы видите в магазине, приходит с Akamai и Fastly. Если в Steam удаётся войти, но магазин пустой, без картинок или трейлеров, проблема почти наверняка в доменах CDN, а не в `steamserver.net`.
### Почему в hostlist лучше писать родительский домен
Встроенный браузер экономит соединения. Если несколько доменов обслуживает один и тот же сервер с одним сертификатом, Chromium может отправлять запросы к ним всем по одному уже открытому соединению HTTP/2. В записи одно соединение к Fastly, открытое под именем `shared.fastly.steamstatic.com`, передало 23,8 МБ, больше половины всего трафика Fastly. Скорее всего, по нему шли и файлы с других поддоменов `steamstatic.com`: SNI называет только тот домен, ради которого соединение открыли первым, и остальные имена в открытом виде уже не появляются.
Для Zapret это значит, что решение о профиле принимается один раз, по первому имени. Список из точных поддоменов вроде `store.fastly.steamstatic.com` легко пропустит соседний поддомен, который браузер откроет первым в следующий раз. Поэтому для Steam родительский домен (`steamstatic.com`) надёжнее точных поддоменов. Общий совет [[add-profile]] начинать с точных поддоменов защищает от того, чтобы профиль задел посторонние сайты; здесь такой опасности нет, потому что все поддомены `steamstatic.com`, `steampowered.com` и остальных доменов из списка ниже принадлежат самому Steam.
### Два разных TLS-почерка
Сам клиент Steam и его встроенный браузер открывают TLS-соединения по-разному, и в записи это видно по первому пакету.
Клиент (соединения к `*.steamserver.net`, первые запросы к `api.steampowered.com`, `steamcommunity.com` и `shared.steamstatic.com`) отправляет короткое приветствие TLS, сообщение ClientHello, на 517 байт. Оно целиком помещается в один TCP-пакет, и имя сервера во всех 13 таких соединениях стоит на одном и том же месте, со 155-го байта.
Встроенный браузер отправляет ClientHello на 1,7–2,1 КБ. Размер набирает постквантовый ключ `X25519MLKEM768`, который современный Chromium добавляет в каждое соединение: одна эта часть занимает 1216 байт. Такое сообщение не помещается в один пакет и уходит двумя. Вдобавок Chromium перемешивает порядок полей в ClientHello при каждом подключении, поэтому имя сервера оказывается то в первом пакете, то во втором. В записи оно попало во второй пакет или на стык пакетов в 22 соединениях из 47.
Проще говоря: к серверам входа Steam уходит маленький предсказуемый пакет, а к магазину — большой, разрезанный надвое, с именем сайта в случайном месте. Стратегия, которая пробивает один вид соединений, не обязана пробивать другой, поэтому при подборе проверяйте отдельно вход в сеть и загрузку магазина. Как стратегии режут и подменяют пакеты — в [[desync]].
## Сверка с официальным списком Valve
У Valve есть справочная статья «Required Ports for Steam» (версия от февраля 2026 года): https://help.steampowered.com/en/faqs/view/2EA8-4D75-DA21-31EB. Она перечисляет домены, которые прокси должен пропускать для веб-запросов Steam, и порты для разных частей платформы.
Домены из официального списка: `steampowered.com`, `steamcommunity.com`, `steamgames.com`, `steamusercontent.com`, `steamcontent.com`, `steamstatic.com` и `akamaihd.net`. С записью есть два расхождения. Во-первых, в официальном списке нет `steamserver.net`, хотя именно на нём в записи были серверы входа и проверки IPv6, и нет `steamconnecttest.com`. Во-вторых, `steamcontent.com` (серверы, с которых скачиваются игры и обновления) и `akamaihd.net` в записи не встретились, потому что за 47 секунд ничего не скачивалось. Домен `akamaihd.net` — общий домен Akamai, на нём живут тысячи чужих сайтов, поэтому вписывать его в профиль Steam целиком не стоит.
Порты по данным Valve:
| Назначение | Протокол и порты |
|---|---|
| Вход в сеть и загрузка контента | TCP 80 и 443, TCP и UDP 27015–27050 |
| Трафик игр | UDP 27000–27250 |
| Сетевая игра и голосовой чат Steam (P2P) | UDP 3478, 4379, 4380, 27014–27030 |
| Remote Play (трансляция игр внутри дома) | UDP 27031–27036 и TCP 27036, локальные порты на своём компьютере |
Там же Valve пишет, что весь не-веб трафик, в основном UDP, идёт на адреса собственной сети `AS32590`. Это пригодится для игрового профиля: трафик игр часто идёт без имени сервера, и отбирать его приходится по адресам (ipset), а не по доменам.
В записи порт 27036 тоже появился, но как широковещательная рассылка UDP внутри домашней сети: так клиент ищет другие компьютеры со Steam для Remote Play. Этот трафик не уходит к провайдеру, и обходить его не нужно.
## Как настроить профиль под Steam
### Сначала проверьте готовые профили пресета
Большая часть Steam живёт на Akamai и Fastly. Если в вашем [[preset|пресете]] уже есть профиль под одну из этих сетей (например, «Akamai TCP») и он включён, магазин может заработать без отдельного профиля: достаточно подобрать стратегию в готовом профиле. Как найти такой профиль — в [[find-domain-owner]]. Собственный профиль Steam всё равно понадобится, если не заходит в сеть сам клиент: серверы `steamserver.net` живут в сети Valve, и профили под CDN их не касаются.
### Свой профиль: порты и домены
Порядок действий в интерфейсе — как в [[add-profile]]; ниже только то, что отличается для Steam.
- [ ] **TCP-порты:** `80,443-65535`. Запись захватывает и 443, и порты серверов входа 27015–27050. Для профиля, который отбирает трафик по hostlist, широкий диапазон безопасен: соединения к чужим доменам ему не достанутся. Подробнее о фильтрах — [[filter]].
- [ ] **Hostlist («Ваши записи»):**
```
steampowered.com
steamcommunity.com
steamstatic.com
steamusercontent.com
steamcontent.com
steamserver.net
steamgames.com
```
Каждая строка включает в профиль все поддомены: `steamserver.net` накрывает серверы входа `cmp*-*.steamserver.net`, `steamstatic.com` — все `*.fastly.steamstatic.com` и `*.akamai.steamstatic.com`. `steamconnecttest.com` в список вносить не обязательно: проверка интернета идёт по HTTP без шифрования и заблокирована, судя по записи, не была. Если клиент при запуске упорно пишет, что нет подключения к интернету, допишите и его. Формат списков — в [[Zapret/hostlist|hostlist]].
- [ ] **UDP:** для входа и магазина, судя по записи, не нужен. Клиент не отправлял UDP на серверы Valve, и ни одно соединение QUIC (HTTP/3 поверх UDP-порта 443) в записи нельзя отнести к Steam. Если в вашей записи QUIC к доменам Steam появится, добавьте в профиль UDP-порт `443`: отключить QUIC во встроенном браузере Steam, как в обычном Chrome, нельзя.
- [ ] **Порядок профилей:** профиль Steam ставьте выше широких профилей по сетям Akamai и Fastly, иначе соединения магазина заберёт первый подходящий широкий профиль. Почему так — в [[profile-independence|«Одно соединение — один профиль»]].
### Если одна стратегия не пробивает всё
Профиль с одним списком получает одну стратегию на все соединения Steam. Но соединения здесь разные: маленький ClientHello клиента к серверам Valve и большой ClientHello браузера к Akamai и Fastly, в разных сетях, которые ТСПУ может обрабатывать по-разному. Если после подбора стратегии клиент входит в сеть, а магазин не грузится, или наоборот, разделите профиль на два:
- профиль «Steam вход» с одной строкой `steamserver.net`;
- профиль «Steam магазин» с остальными доменами списка.
Каждому подбирайте стратегию отдельно. Если внутри магазина не грузится только одна сеть (например, картинки с Fastly есть, а трейлеры с Akamai нет), таким же образом выносится в свой профиль `fastly.steamstatic.com` или `akamai.steamstatic.com`; такой профиль ставится выше общего, потому что соединение достаётся первому подходящему профилю.
### Игры — отдельным профилем
Профиль выше покрывает клиент, магазин и сообщество. Сетевые игры ходят по UDP на адреса Valve или на серверы самих издателей, часто без доменного имени, и hostlist их не видит. Для игры нужен свой профиль с ipset и UDP-портами из таблицы Valve выше; сбор адресов через TCPView и перебор стратегий расписаны в [[find-game-strategy]].
## Как проверить результат
Проверка обхода для Steam строже, чем для сайта: клиент держит соединения открытыми, и перезапуск окна ничего не проверяет.
1. Полностью закройте Steam: «Steam» → «Выход» или правый клик по значку в трее → «Выход». Убедитесь в диспетчере задач, что не осталось процессов `steam.exe` и `steamwebhelper.exe`.
2. Запустите Steam заново. Если клиент вошёл в сеть и показывает друзей в сети, соединения к `steamserver.net` проходят.
3. Откройте магазин и страницу любой игры: должны загрузиться обложки, скриншоты и трейлер. Пустые прямоугольники вместо картинок указывают на домены CDN.
4. Если что-то не грузится, проверьте по [[log-analyzer|«Анализу лога»]], какой профиль обработал соединения Steam, а общие ловушки проверки — в [[verify-strategy]].
Если стратегия не подошла, переходите к следующей в «Готовых стратегиях» и снова проверяйте с полного перезапуска. Автоматически подобрать стратегию для доменов Steam можно в [[Zapret/Blockcheck|BlockCheck]].
## 📚 См. также
- [[add-profile|Как добавить свой профиль]] — создание профиля в GUI по шагам
- [[find-game-strategy|Как найти стратегию для игры]] — отдельный профиль для игрового трафика по IP
- [[find-domain-owner|Как узнать CDN домена]] — Akamai, Fastly и готовые профили пресета
- [[find-site-domains|Как найти домены сайта через F12]] — тот же поиск доменов для обычного сайта
- [[profile-independence|Одно соединение — один профиль]] — почему важен порядок профилей
- [[verify-strategy|Как проверить, заработала ли стратегия]] — ловушки проверки
- [[Zapret/hostlist|hostlist]] · [[Zapret/ipset|ipset]] — форматы списков доменов и адресов
- 🔗 Required Ports for Steam, справка Valve: https://help.steampowered.com/en/faqs/view/2EA8-4D75-DA21-31EB
---
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование доступно в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/Zapret2/steam.md) · [скачать весь репозиторий одним zip-архивом](https://git.zapret.moe/zapretdiscordyoutube/todo/archive/main.zip).