~/ziphub — zsh
ZipHub·~/catalog~/articles~/feed~/sellers~/hire
auth login
[article]category · network

Warhammer 40,000: Space Marine 2 в России: лечим ошибку CSF (EAC) через WireGuard-мост на роутере

@dignezzz · author5 min read2026-05-31free

TL;DR: Struggling with the dreaded CSF (Error 4) in *Warhammer 40,000: Space Marine 2*? Russian players face a double bind: ISP-level IP blocks on game servers, and standard VPNs that break Easy Anti-Cheat. This article delivers a proven, router-level fix using a WireGuard bridge—not just another proxy subscription. The key insight is that commercial VPNs give you datacenter IPs with symmetric NAT, while EAC demands a clean, open-NAT connection. The solution: set up WireGuard as a transparent bridge, with your entry point inside Russia (for stable handshake) and exit abroad (to reach locked AWS/Azure servers). This yields a single, stable foreign IP with full-cone NAT—bypassing both the geo-block and anti-cheat rejection. The guide covers symptoms, why typical VPNs fail, and the step-by-step router configuration. If SM2 refuses online play despite all common fixes, this WireGuard-based “clean exit” is your last resort—and it works.

Warhammer 40,000: Space Marine 2 в России: лечим ошибку CSF (EAC) через WireGuard-мост на роутере

Стенд

  • Роутер: Keenetic Giga
  • Прошивка/окружение: Xkeen — запуск прокси-ядер прямо на Keenetic
  • Ядро: Mihomo (clash.meta) с маршрутизацией по правилам
  • Списки правил: DigneZzZ/routing + geo-данные MetaCubeX

Весь трафик домашней сети заворачивается в Mihomo на роутере (TPROXY), а тот уже раскидывает его по правилам: что напрямую, что через VPN.

Коротко

SM2 выдаёт CSF (или Error 4) и не пускает в сетевые службы. Причина — игровые серверы недоступны из РФ по IP, а обычный VPN ломает анти-чит. Решение: WireGuard-мост «вход в России → выход за рубежом», заведённый прямо в Mihomo как выход по умолчанию, чтобы весь трафик шёл через один чистый зарубежный IP с открытым NAT.


Симптомы

  • При запуске не подключается к онлайн-сервисам, в меню — Error code: CSF (либо Error 4, N-14/N-15).
  • Сетевые режимы недоступны, кооп/PvP не собирается.
  • Локальные пляски (проверка файлов, переустановка EOS, фаервол) не помогают.

CSF по сути — провал хендшейка Easy Anti-Cheat: игра не может тебя аутентифицировать и выкидывает на входе.


Почему это происходит в РФ

Складываются две независимые проблемы:

  1. РКН блокирует игровые серверы по IP. Бэкенд SM2 и матчмейкинг — на зарубежных облаках (AWS, Azure). Часть адресов заблокирована, поэтому напрямую из России не зайти в принципе.
  2. Обычный VPN ломает анти-чит:
    • датацентровые IP во флаге EAC;
    • strict/симметричный NAT у большинства прокси — а игре нужен открытый NAT (тип 1/2);
    • если выходной IP «прыгает» (балансировка/перебор нод) — сессия EAC рвётся мгновенно.

Вилка: без VPN — блок по IP, с обычным VPN — отлуп анти-чита. Отсюда бесконечный CSF.


Что не сработало

Сначала гоняли только игру через VLESS-подписку (Mihomo, селективные правила на домены Epic/EOS, EAC и порты игры). Маршрутизация была верной — но CSF оставался:

  • exit-IP подписочных нод — датацентр, который EAC не любит;
  • симметричный NAT → матчмейкинг не собирается;
  • разные части трафика игры (логин, серверы, STUN) могли уходить разными IP → анти-чит видит рассинхрон.

Вывод: важно не «куда направить», а качество выхода — нужен чистый IP и открытый NAT.


Что сработало: WireGuard-мост

WireGuard, настроенный мостом: точка входа — сервер внутри России, выход (exit) — за рубежом.

Почему именно так:

  • Вход в РФ — соединение от тебя до точки входа идёт по российскому адресу: быстро, стабильно, не упирается в блок зарубежных IP. Хендшейк WG поднимается надёжно.
  • Выход за рубежом — наружу выходишь под зарубежным IP, и серверы игры на AWS/Azure становятся доступны.
  • Чистый IP + full-cone NAT — у такого моста выход обычно не во флаге EAC, а NAT открытый. Ровно то, чего не хватало.
  • Единый стабильный выход — один IP на всю сессию, ничего не «прыгает».

И главное — WG поднят в Mihomo на роутере, поэтому весь трафик игры (логин EOS, игровые серверы, STUN, анти-чит) идёт через один и тот же чистый IP. Эта консистентность и добивает CSF.


Настройка

1. Переносим wg.conf в Mihomo

Обычный конфиг WireGuard, который даёт провайдер моста:

ini
1[Interface]
2PrivateKey = <ВАШ_PRIVATE_KEY>
3Address = 10.10.2.215/32
4DNS = 8.8.8.8
5
6[Peer]
7PublicKey = <PUBLIC_KEY_СЕРВЕРА>
8Endpoint = <ХОСТ_МОСТА>:39547
9PersistentKeepalive = 20
10AllowedIPs = 0.0.0.0/0

Превращается в запись proxies для Mihomo так:

yaml
1proxies:
2  - name: 🪽 WG
3    type: wireguard
4    private-key: <ВАШ_PRIVATE_KEY>     # = [Interface] PrivateKey
5    server: <ХОСТ_МОСТА>               # = хост из Endpoint (до ":")
6    port: 39547                        # = порт из Endpoint (после ":")
7    ip: 10.10.2.215                    # = [Interface] Address без /маски
8    public-key: <PUBLIC_KEY_СЕРВЕРА>   # = [Peer] PublicKey
9    allowed-ips: ['0.0.0.0/0']         # = [Peer] AllowedIPs
10    persistent-keepalive: 20           # = [Peer] PersistentKeepalive
11    udp: true
12    mtu: 1408
13    remote-dns-resolve: true
14    dns: [8.8.8.8]                     # = [Interface] DNS
15    # pre-shared-key: <PSK>            # = [Peer] PresharedKey (если есть)

Таблица соответствия полей:

wg.confMihomo
[Interface] PrivateKeyprivate-key
[Interface] Address (IPv4)ip (без /32)
[Interface] DNSdns (+ remote-dns-resolve: true)
[Peer] PublicKeypublic-key
[Peer] Endpoint host:portserver + port
[Peer] PresharedKeypre-shared-key
[Peer] AllowedIPsallowed-ips
[Peer] PersistentKeepalivepersistent-keepalive

2. Делаем WG выходом по умолчанию

В группе-селекторе ставим 🪽 WG первым — он становится выходом для всего, что уходит в VPN. Подписочные ноды остаются резервом:

yaml
1proxy-groups:
2  - name: 🛡️ VPN
3    type: select
4    proxies:
5      - 🪽 WG               # ← выход по умолчанию (мост РФ → зарубеж)
6      -  Самый быстрый     # резерв: ноды подписки
7      - 📶 Первый доступный

3. Правила маршрутизации

Игру (домены Epic/EOS/EAC + бэкенд SM2 + порты + STUN) поднимаем в самый верх и гоним в 🛡️ VPN (= WG). Глобальная модель: всё в VPN, исключения (RU/локалка/директ) — мимо.

Список доменов игры (inline-правило):

yaml
1games-vpn:
2  type: inline
3  behavior: domain
4  payload:
5    - "+.epicgames.com"      # авторизация Epic
6    - "+.epicgames.dev"      # EOS: матчмейкинг/релей/кроссплей (ядро мультиплеера)
7    - "+.easyanticheat.net"  # Easy Anti-Cheat
8    - "+.eac-cdn.com"
9    - "+.easy.ac"
10    - "+.prismray.io"        # бэкенд онлайн-сервисов SM2 (Saber)
11    - "+.hydrapi.net"        # STUN/NAT-траверсал SM2
12    # ...epicgamescdn, unrealengine, fortnite и т.п.

Порядок правил (главное):

yaml
1rules:
2  # приватные сети и локалка — напрямую
3  - RULE-SET,direct-ip,DIRECT,no-resolve
4  - GEOIP,PRIVATE,DIRECT,no-resolve
5  - RULE-SET,geosite-private,DIRECT
6
7  # ИГРА → VPN(=WG), в самом верху, чтобы ничто не перехватило
8  - RULE-SET,games-vpn,🛡️ VPN
9  - AND,((NETWORK,tcp),(DST-PORT,11700-11720)),🛡️ VPN   # порты SM2 (Saber)
10  - AND,((NETWORK,udp),(DST-PORT,48800-55000)),🛡️ VPN   # порты SM2 (Saber)
11
12  # сервисы, которым нужен реальный RU-IP (Госуслуги, пуши) — напрямую
13  - RULE-SET,vpndetect,DIRECT
14  # торрент-трекеры — напрямую
15  - RULE-SET,torrent-trackers,DIRECT
16
17  # обход РКН → VPN
18  - RULE-SET,refilter-d,🛡️ VPN
19  - RULE-SET,proxy,🛡️ VPN
20
21  # российские сайты/IP — напрямую
22  - RULE-SET,geosite-ru,🏠 RU
23  - RULE-SET,direct,DIRECT
24  - RULE-SET,geoip-ru,🏠 RU,no-resolve
25
26  # всё остальное → VPN(=WG)
27  - MATCH,🛡️ VPN

Списки refilter-*, proxy, direct, games, geoip-ru и пр. — это rule-providers из DigneZzZ/routing и MetaCubeX в формате .mrs (компактно для роутера).

Соль в том, что и игровые правила, и финальный MATCH ведут в одну группу 🛡️ VPN, а она = 🪽 WG. Значит весь трафик игры выходит через один WG-IP — именно это и нужно EAC.


Важные моменты, без которых не взлетит

  1. Один тоннель на весь трафик игры. Если часть соединений уйдёт другим IP — анти-чит снова отвалится. MATCH → VPN(=WG) гарантирует единый выход даже для «сырых» IP и STUN.
  2. Открытые порты игры: SM2 — TCP 11700–11720 и UDP 48800–55000; тоннель обязан пропускать UDP.
  3. Открытый NAT (full-cone, тип 1/2) на выходе моста — иначе кооп не соберётся.
  4. Не дублируй WG. Один клиент на один ключ. Не поднимай WireGuard одновременно на роутере (отдельным интерфейсом) и в Mihomo с одними ключами — сервер не любит два сеанса.
  5. Гигиена клиента: проверка целостности файлов в Steam, никаких модов (EAC ловит «Mods Detected» → тоже CSF), верное системное время.

Итог

CSF в Space Marine 2 из России — это сумма блокировок по IP и нелюбви EAC к датацентровым VPN со strict NAT. Лекарство — не «любой VPN», а WireGuard-мост с российским входом и зарубежным выходом, заведённый в Mihomo на роутере и работающий выходом по умолчанию, чтобы весь трафик игры шёл через один чистый IP с открытым NAT. После этого хендшейк EAC проходит, и сетевые режимы наконец работают.

Та же логика лечит и другие EAC/EOS-игры, заблокированные по IP.

~5 min read · scroll to continue ↓

## discussion

$ topics --entity=article0
sign in to start or join a discussion
No discussions yet — start one to break the ice.
↑↓ nav open⌘K palettei install? help