Коротко — потому что при проксировании трафика через ваш VPS/VPN у консоли получается «неправильный» (или двойной) NAT: UPnP/динамическое пробрасывание портов не работает через VPN, а на VPS/маршрутизаторе нет проброса нужных портов для Xbox Live. В результате Xbox Live видит NAT как Strict.
Что проверить и как исправить (пошагово)
1) Убедитесь, что Xbox действительно идёт через VPN
- На Xbox: Settings → General → Network settings → Go to network settings → Advanced → проверьте Public IP. Если это IP вашего VPS (или не тот, что даёт провайдер) — значит трафик проходит через VPN и проблема на стороне VPS/маршрутизации.
2) Самый простой вариант (если можно) — не гонять Xbox через VPN
- В роутере Netcraze Ultra включите split-tunneling/policy-based routing и исключите IP консоли из VPN‑политики (тогда консоль получает публичный IP/маршрут провайдера и NAT, скорее всего, станет Open).
3) Если Xbox обязан идти через VPN — делайте проброс портов на VPS
- Xbox Live использует порты (официальный список):
UDP: 88, 3074, 500, 3544, 4500
TCP/UDP: 53
TCP: 80, 3074
(лучше пробросить все перечисленные)
- На VPS включите ip forwarding:
sysctl -w net.ipv4.ip_forward=1
и в /etc/sysctl.conf выставьте net.ipv4.ip_forward=1
- Настройте DNAT (пример iptables, подставьте XBOX_VPN_IP — IP, который Xbox получил в VPN-сети):
iptables -t nat -A PREROUTING -p udp --dport 3074 -j DNAT --to-destination XBOX_VPN_IP:3074
iptables -t nat -A PREROUTING -p tcp --dport 3074 -j DNAT --to-destination XBOX_VPN_IP:3074
iptables -t nat -A PREROUTING -p udp --dport 88 -j DNAT --to-destination XBOX_VPN_IP:88
iptables -t nat -A PREROUTING -p udp --dport 3544 -j DNAT --to-destination XBOX_VPN_IP:3544
iptables -t nat -A PREROUTING -p udp --dport 500 -j DNAT --to-destination XBOX_VPN_IP:500
iptables -t nat -A PREROUTING -p udp --dport 4500 -j DNAT --to-destination XBOX_VPN_IP:4500
и разрешите форвардинг:
iptables -A FORWARD -d XBOX_VPN_IP -p udp --dport 3074 -j ACCEPT
iptables -A FORWARD -d XBOX_VPN_IP -p tcp --dport 3074 -j ACCEPT
(можно добавить MASQUERADE/POSTROUTING для исходящего трафика, если нужно)
- Не забудьте открыть соответствующие порты в фаерволе VPS (ufw/nftables/iptables).
4) Если вы используете WireGuard/схожий туннель
- WireGuard — UDP, но проброс со стороны VPS делается как выше (DNAT на IP peer'а).
- На клиенте (Xbox через роутер → роутер как WireGuard-клиент) убедитесь, что у peer-а в конфиге есть PersistentKeepalive = 25 (это удерживает NAT mapping).
- На VPS правило DNAT должно вести на внутренний IP WireGuard-пира.
5) Альтернатива — DMZ на роутере
- Если Xbox находится в локальной сети без VPN, можно поместить его в DMZ роутера — это позволит всем входящим соединениям направляться на консоль. Внимание: снижает безопасность.
6) Проверки после изменений
- Перезагрузите роутер и Xbox.
- На Xbox: Settings → General → Network settings → Test NAT type / Test multiplayer connection. Должно стать Open. Если стало Moderate — ещё пробросьте дополнительные порты / включите UPnP на роутере.
Дополнительные замечания
- UPnP обычно не работает «через» VPN: автоматическое пробрасывание портов Xbox не пройдет через VPS, поэтому приходится руками пробрасывать порты на VPS.
- Teredo (UDP 3544) и IPsec (500/4500) важны для некоторых способов NAT traversal. Если Teredo «blocked» — это часто причина Strict.
- Будьте внимательны с безопасностью: проброс портов и DMZ открывают внешний доступ к вашему устройству/сети.
Если хотите, могу:
- Подготовить конкретные команды для вашего VPS (напишите: какой VPN вы используете: WireGuard/OpenVPN/IPsec, и какой IP получает Xbox в VPN-сети).
- Подсказать, как сделать на Netcraze split-tunnel / исключение для IP Xbox.