Some checks failed
Published content check / validate (push) Failing after 10s
Новая заметка 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.
193 lines
28 KiB
Markdown
193 lines
28 KiB
Markdown
---
|
||
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).
|