IPv6 для игрового сервера — нужен ли и как настроить
Рано или поздно у любого, кто держит игровой сервер дольше пары месяцев, всплывает вопрос IPv6 — то хостинг предложит адрес «в довесок», то игрок напишет «у меня не коннектится, а через VPN всё ок», и окажется, что дело в стеке протоколов. Разберём по-честному: где IPv6 реально нужен, где это карго-культ, и как настроить dual-stack так, чтобы не сломать то, что и так работало.
Содержание
Что такое IPv6 и почему это вообще всплывает у игрового сервера
IPv4 — старый адресный пул на 32 бита, примерно 4.3 миллиарда адресов, которые давно кончились как «свободный ресурс»: провайдерам и хостерам их выдают ограниченно, поэтому многие клиенты сидят за CGNAT (Carrier-Grade NAT) — общим IPv4-адресом на сотни абонентов. IPv6 — 128-битный пул, адресов там на практике бесконечно много, и большинство современных провайдеров (мобильных особенно) выдают его нативно, без всякого NAT.
Для игрового сервера это означает две разные истории. Со стороны хостинга — вам может достаться отдельный IPv6-адрес, иногда даже целая подсеть (/64 или /48), в дополнение к обычному IPv4. Со стороны игроков — часть из них подключается к интернету через сети, где IPv6 работает лучше или стабильнее, чем IPv4 за CGNAT. Соединить эти две стороны — и есть задача dual-stack: сервер отвечает и по IPv4, и по IPv6, а игрок подключается тем протоколом, который у него лучше работает, даже не задумываясь об этом.
Поддерживают ли игры IPv6 на самом деле
Тут не будет единого ответа — зависит от движка и от того, как именно устроена сетевая часть игры.
Minecraft Java Edition работает по IPv6 без проблем: это обычное TCP-соединение поверх сокета, который Netty (сетевая библиотека, на которой построен Minecraft) прекрасно умеет открывать на IPv6-адресе. Если у вас Paper, Spigot или Vanilla и вы пропишете в server-ip IPv6-адрес (или оставите поле пустым при слушании на ::), сервер будет доступен по IPv6 — вопрос только в том, поддерживает ли конкретная сборка бинд на dual-stack сокет (об этом ниже).
Игры на движках с Steam-сетевухой — CS2, Rust, ARK: Survival Evolved и похожие — работают через Steam Networking Sockets (в CS2 — через Steam Datagram Relay, SDR). Тут IPv6-адрес самого сервера почти не имеет значения: клиент и сервер общаются через relay-узлы Valve, а не напрямую друг с другом. То есть даже если ваш сервер полностью на IPv4, а у игрока только IPv6 — Steam-прослойка это разрулит сама, и IPv6 на самой машине сервера тут ничего не решает.
FiveM и другие проекты на Cfx.re-инфраструктуре используют собственную систему обнаружения серверов через cfx.re-ссылки — прямая доступность вашего IP (любой версии) для игрока не так критична, как для «голых» TCP/UDP-игр вроде Minecraft или Valheim.
Valheim, 7 Days to Die, большинство survival-игр на «сыром» UDP — это прямое соединение клиент-сервер без relay-прослойки, и вот тут версия протокола уже важна напрямую: если у игрока нет нормального IPv4 (только CGNAT) и он резолвит ваш домен в IPv4-адрес, а у вас с проброшенным портом IPv4 всё через раз — IPv6 может реально спасти ситуацию, если и у вас, и у игрока он есть.
Короче: для игр за Steam-relay IPv6 на сервере — приятный бонус, но не критичный. Для прямых P2P-подключений (Minecraft, Valheim, самостоятельно захостенные модпаки) — уже практическая вещь.
Нужен игровой сервер?
MAATRIX GAMES — 45+ игр, деплой за минуты, DDoS-защита, автобэкапы. Тарифы от 399 ₽/мес.
Создать серверКогда IPv6 реально решает проблему с подключением
Три конкретных сценария, где IPv6 — не теория, а рабочее решение:
- Игрок за CGNAT без нормального IPv4. Мобильный интернет, часть провайдеров в регионах с дефицитом IPv4-адресов — типичная картина: у игрока «серый» IPv4 без возможности прямого входящего соединения (это его проблема, не ваша, но выглядит как «сервер недоступен»). Если у него при этом нативный IPv6 (у мобильных операторов это часто так) и у вашего сервера есть IPv6-адрес — соединение пойдёт по IPv6 напрямую, в обход CGNAT целиком.
- Высокий пинг или нестабильность на конкретных IPv4-маршрутах. Иногда магистральный маршрут по IPv4 между регионами (например, часть азиатских направлений) заметно хуже, чем параллельный IPv6-маршрут через тех же транзитных операторов — не всегда, но такое встречается. Если несколько игроков жалуются на скачущий пинг именно с одного направления, попробовать IPv6 как альтернативный путь — дешёвый эксперимент.
- Сервер за NAT дома, где провайдер режет входящие IPv4-порты. Некоторые провайдеры (особенно мобильные и часть домашних) блокируют или CGNAT-ят входящие подключения по IPv4, но выдают абонентам полноценный публичный IPv6-префикс без всяких ограничений на входящие. Для домашнего сервера это может быть единственным рабочим способом принимать подключения извне без прокидывания через VPN или туннель — подробнее о самой настройке портов см. проброс портов и файрвол для игрового сервера.
Обратная сторона: если у вас арендованный сервер с нормальным белым IPv4 без CGNAT (обычная ситуация для игрового хостинга) — IPv6 в 2026 году, скорее, приятное дополнение и подготовка на будущее, чем решение реальной проблемы. Большинство игроков всё ещё подключаются по IPv4, и без IPv6 сервер прекрасно работает.
Как включить dual-stack на сервере
Первый шаг — проверить, что у сервера вообще есть IPv6-адрес и маршрут по умолчанию:
ip -6 addr show
ip -6 route show default
Если первая команда ничего не показывает кроме ::1 (loopback) — IPv6 на сервере не настроен вообще, нужно запросить адрес/подсеть у хостинга. Если адрес есть, но маршрута по умолчанию нет — пакеты наружу не уйдут, это тоже частая недонастройка со стороны провайдера, стоит написать в поддержку.
На Ubuntu/Debian с netplan адрес и маршрут задаются примерно так (/etc/netplan/01-netcfg.yaml):
network:
version: 2
ethernets:
eth0:
addresses:
- 203.0.113.10/24
- 2001:db8:1234:5678::2/64
routes:
- to: default
via: 2001:db8:1234:5678::1
nameservers:
addresses: [1.1.1.1, 2606:4700:4700::1111]
Применяется через netplan apply. На системах без netplan (CentOS/AlmaLinux с NetworkManager) — то же самое через nmcli con mod eth0 ipv6.addresses 2001:db8:1234:5678::2/64 ipv6.gateway 2001:db8:1234:5678::1 ipv6.method manual, затем nmcli con up eth0.
Дальше — сама игра. Тут есть развилка. Если софт сервера умеет слушать на :: (wildcard-адрес IPv6) и при этом ядро Linux не запрещает приём IPv4-подключений на такой сокет (проверяется так: sysctl net.ipv6.bindv6only — значение должно быть 0, это стандартное поведение по умолчанию), то один и тот же процесс без всяких прокладок примет и IPv4-, и IPv6-подключения на одном порту. Для Minecraft это работает: достаточно оставить server-ip пустым или указать ::.
Если же игра жёстко биндится только на IPv4-сокет (так у части движков, включая некоторые сборки на Source и самописные dedicated-серверы) — единственный процесс не сможет одновременно слушать оба стека. Рабочий обходной путь для TCP-игр — простой relay через socat:
socat TCP6-LISTEN:25565,fork,reuseaddr TCP4:127.0.0.1:25565
Для UDP-игр (Valheim, часть survival-проектов) аналогично, но с оговоркой: socat в режиме fork для UDP с большим числом одновременных клиентов ведёт себя не всегда предсказуемо — для 3-5 игроков нормально, для полноценного паблик-сервера на 30+ человек лучше отдельный проброс через nftables/DNAT или спросить у хостинга, поддерживает ли их сетевой стек честный dual-stack без релея.
DNS: заводим AAAA-запись и что при этом проверить
Игроки заходят по домену, а не по IP-адресу — соответственно, чтобы IPv6 реально заработал для них, недостаточно настроить его на сервере, нужно ещё завести AAAA-запись в DNS (это IPv6-аналог обычной A-записи):
play.mycraftworld.ru. 300 IN AAAA 2001:db8:1234:5678::2
Проверить, что запись разрешается и отдаётся резолверами, можно так:
dig AAAA play.mycraftworld.ru +short
Важный нюанс: если завести AAAA-запись, а IPv6 на сервере при этом не настроен или не работает — часть клиентов (особенно современные ОС с включённым Happy Eyeballs, алгоритмом одновременной попытки подключения по обоим протоколам) всё равно достучится по IPv4 с небольшой задержкой на переключение, но часть более старого софта может просто зависнуть на попытке достучаться по мёртвому IPv6-адресу и не переключиться. Поэтому правило простое: сначала убедитесь, что IPv6-подключение реально работает (nc -6 -zv play.mycraftworld.ru 25565 или аналог для нужного протокола), и только потом публикуйте AAAA-запись. Подробнее про сами A/AAAA/SRV-записи и настройку домена — в статье кастомный домен и SRV-запись для игрового сервера.
Файрвол и проброс портов для IPv6 — не так, как для IPv4
Здесь у многих админов возникает путаница, потому что логика NAT и логика IPv6 принципиально разные. Для IPv4 «проброс порта» — это правило NAT/DNAT, которое перенаправляет входящий трафик с внешнего адреса на внутренний серый IP. Для IPv6 адреса чаще всего белые (маршрутизируемые) и напрямую, без NAT — а значит, «пробрасывать» тут нечего, но открыть порт в файрволе всё равно обязательно, и это отдельное правило от IPv4.
На Linux с ufw IPv6 обрабатывается автоматически, если в /etc/default/ufw стоит IPV6=yes (по умолчанию так) — тогда ufw allow 25565/tcp откроет порт сразу для обоих стеков. Если используете iptables/nftables напрямую — учтите, что iptables управляет только IPv4-правилами, а для IPv6 нужен отдельный ip6tables:
ip6tables -A INPUT -p tcp --dport 25565 -j ACCEPT
ip6tables -A INPUT -p udp --dport 25565 -j ACCEPT
Частая ошибка — как раз то, что описано в статье порт не пробрасывается: как проверить и исправить: админ открывает порт в iptables, всё проверяет через IPv4 и решает, что готово, а игрок с IPv6-адресом всё равно не может зайти — потому что ip6tables со своим отдельным набором правил остался нетронутым (по умолчанию политика там нередко DROP). Проверить, что порт реально слушается на обоих стеках, можно через:
ss -tuln
В выводе *:25565 или 0.0.0.0:25565 — это IPv4, :::25565 — IPv6 (символ [::] означает «все интерфейсы» для IPv6, аналог 0.0.0.0). Если видите только одну из строк — вторая часть трафика попросту не примется.
Если сервер стоит за домашним роутером (не аренда, а свой ПК) — для IPv6 в роутере обычно нужен отдельный раздел «IPv6 Firewall» или «Pass-through», отличный от привычного «Port Forwarding», который относится только к IPv4-NAT. Название пункта меню отличается у разных производителей — ищите в интерфейсе именно упоминание IPv6, а не «переброс портов».
Нужен игровой сервер?
MAATRIX GAMES — 45+ игр, деплой за минуты, DDoS-защита, автобэкапы. Тарифы от 399 ₽/мес.
Создать серверЧастые вопросы
Обязательно ли настраивать IPv6 в 2026 году?
Нет, не обязательно. Подавляющее большинство игроков всё ещё подключается по IPv4, и сервер без единого IPv6-адреса прекрасно работает. IPv6 стоит настраивать, если видите конкретные жалобы на недоступность от игроков с мобильным интернетом или CGNAT, либо если хостинг выдаёт его бесплатно и хочется задел на будущее.
Что делать, если хостинг вообще не даёт IPv6-адрес?
Ничего страшного — большинство игровых серверов прекрасно живут только на IPv4. Если для конкретных игроков это критично, можно уточнить у поддержки хостинга, планируется ли IPv6-подсеть, либо рассмотреть провайдера, где она есть «из коробки».
Может ли IPv6 сделать хуже, если раньше всё работало на IPv4?
Напрямую — нет, IPv4-подключения продолжат работать как прежде. Но если завести AAAA-запись при нерабочем IPv6-маршруте (см. раздел про DNS выше), часть клиентов может подвисать на попытке подключиться «не туда» на несколько секунд — отсюда правило: сначала проверить, что IPv6 реально отвечает, потом публиковать запись.
Как узнать, по какому протоколу подключился конкретный игрок?
В логе сервера обычно виден IP-адрес подключения — если он содержит двоеточия (2001:db8::a1b2) — это IPv6, если четыре числа через точку (203.0.113.10) — IPv4. Для Minecraft это видно прямо в логе консоли при коннекте игрока.
Нужен ли отдельный порт для IPv6, или можно использовать тот же?
Тот же самый порт работает для обоих протоколов — IPv4 и IPv6 в этом смысле независимы друг от друга, порт просто должен быть открыт на каждом стеке отдельно (см. раздел про файрвол выше), а игра слушает один и тот же номер порта в обоих случаях.