Вопрос или проблема
Моя ситуация: Несколько недель назад я все еще использовал ADSL-роутер с собственным публичным IP, поэтому, когда мне нужно было открыть несколько портов (как TCP, так и UDP) для хостинга игровых серверов для друзей, все, что мне нужно было сделать, это открыть порты в управлении роутера через 192.168.1.1, создать правила в брандмауэре Windows, и я был готов.
Теперь, потому что скорость была действительно ужасной, я недавно решил перейти на 5G роутер с неограниченным интернетом, вначале я был действительно рад, когда увидел скорости, которых я смог достичь как по загрузке, так и по выгрузке, но затем я быстро столкнулся с первой проблемой: я заметил, что мой IP в интернете отличается от того, что отображается в “ipconfig”. Вначале я не уделил этому много внимания, потому что в роутере есть секция перенаправления портов, но это, похоже, не имело никакого эффекта, так как я все равно не смог ничего захостить.
Что я, как мне кажется, понимаю: Я провел небольшое исследование в интернете и наткнулся на множество людей, указывающих на эту проблему. Если я правильно понял, у меня есть только частный IP, который подключается к CG-NAT моего IPS, так что мой публичный IP не уникален, а используется многими людьми, и CG-NAT имеет последнее слово, когда дело доходит до портов, которые он готов открыть, так что я как бы застрял здесь. Конечно, я не могу просить собственный уникальный публичный IP, потому что мой провайдер этого не делает, и это привело меня к поиску решения.
Что я уже пробовал: Хорошо, первое, что я сделал, это приобрел VPS на OVH, сервер, к которому у меня есть доступ и который имеет свой собственный публичный IP. Я установил Ubuntu, потому что я полный новичок, когда дело касается Linux. Раньше я немного программировал, поэтому немного знаком с некоторыми командами в терминале, но, честно говоря, забыл большинство из них, однако это отличное упражнение. Однако в сетях я по-настоящему полный новичок.
Сказав это, я нашел людей, говорящих о SSH реверсе туннелировании, думаю, я смог использовать команду (я в этом больше не уверен), но я понял, что SSH-туннелирование касается только протокола TCP, а не UDP (который мне нужен для моего игрового хостинга). Затем я попробовал некоторые VPN-решения, такие как openVPN с автоустановщиком, который я нашел на Github. Это, похоже, работало, поскольку IP, который был на моем компьютере, был IP моего VPS, когда я смотрел, какой у меня IP, но интернет был очень нестабильным, многие сайты и сервисы работали некорректно.
Так что я попробовал Wireguard, тоже автоустановщик для серверной части, я изменил несколько вещей в конфигурационном файле, но все равно не получилось, мне не удалось заставить это работать.
Вчера я попробовал решение ZeroTier с nginx в качестве реверс-прокси (честно говоря, я не имею ни малейшего представления, что это такое и как это работает), но я не смог заставить это работать, как только мне пришлось использовать некоторые команды iptables.
Честно говоря, я начинаю чувствовать себя перегруженным, это уже 3 вечера подряд, что я пробую решения в интернете, которые я даже не могу использовать должным образом из-за моего слабого уровня знаний в Linux/сетях, и мне отчаянно нужна помощь, чтобы настроить это, так как я уверен, что это не так уж сложно.
Чего я пытаюсь достичь: Это своего рода краткое резюме, потому что я много написал. Я пытаюсь открыть порты (как TCP, так и UDP, это важно), чтобы мой личный компьютер дома мог хостить игровые серверы, как я это делал, когда у меня был публичный IP.
Мне нужно обойти CGNAT, и у меня есть VPS на OVH для того, чтобы иметь машину с публичным IP.
Идеально было бы найти решение, которое не требовало бы наличия программного обеспечения/клиента на моем компьютере, но если это невозможно, я совершенно не против его иметь. Возможно, в ближайшем будущем я куплю Raspberry, чтобы вся эта туннелизация могла работать самостоятельно.
Я нахожусь за сетью CGNAT в той же ситуации, что и вы.
Хотя я не пытался хостить игры для друзей, чтобы они могли присоединиться, у меня была похожая проблема, когда я пытался удаленно подключиться к моему компьютеру по интернету, находясь за CGNAT.
Моим основным инструментом раньше был OpenVPN/Wireguard, который работал безупречно с сетями, не основанными на CGNAT. Однако с CGNAT я не смог сделать это. И также DDNS (динамическое обновление IP вашего компьютера за легкозапоминаемым названием сервиса) не удалось.
Однако ZeroTier и Tailscale действительно решили эту проблему для меня. Поскольку они используют пробивание дыр в UDP/TCP, трафик перемещается напрямую между конечными точками, а не через центральный сервер, то есть устройства A, B, C и т. д. выполняют начальное рукопожатие через сервер(а) ZeroTier, а затем осуществляют коммуникацию напрямую A > B / A>C
Вы в конечном итоге добавляете устройства A, B и C через интерфейс платформы ZeroTier. Не думаю, что вам нужен какой-либо реверс-прокси nginx для вашей задачи. Просто установите их адаптер Windows/Linux и присоединитесь к идентификатору сети (генерируется, когда вы создаете виртуальную сеть). Смотрите учебные пособия на YouTube, они легки для понимания.
Я все еще использую сеть ZeroTier для доступа к большинству моих виртуальных локальных ресурсов.
Ответ или решение
Ваш запрос о возможности открытия портов в условиях нахождения за CGNAT (Carrier-Grade NAT) на 5G маршрутизаторе заслуживает обстоятельного рассмотрения. В условиях современных сетевых решений, многие сталкиваются с такими же вызовами, рассматривая варианты обхода ограничений, накладываемых CGNAT. Ниже мы подробно разберем вашу ситуацию, применимые теории, а также практические решения, которые могут помочь вам наладить работу игровой сети.
Теория: Природа CGNAT и проблемы с открытием портов
CGNAT — это технология, используемая интернет-провайдерами для экономии IP-адресов. Вместо выделения отдельного публичного IP-адреса каждому пользователю, провайдеры используют общие IP-адреса между множеством клиентов. Это значительно усложняет прямой доступ к устройству из внешней сети, поскольку все входящие соединения фильтруются на уровне провайдерского NAT.
Поскольку вы за CGNAT, классическая настройка перенаправления портов через веб-интерфейс вашего маршрутизатора не будет работать, как и при наличии публичного IP. Это означает, что попытки открыть порты стандартными средствами вашего маршрутизатора, скорее всего, не дадут результата.
Пример: Виртуальный частный сервер (VPS) как решение
Вы упомянули, что приобрели VPS у провайдера OVH. VPS может служить мостом между вашей локальной сетью и внешним Интернетом, предоставляя вам публичный IP-адрес, который можно использовать для перенаправления трафика. Вот как это примерно работает:
-
Настройка SSH-туннеля: Это решение подходит для TCP-трафика и может использоваться для перенаправления определенных портов с вашего VPS на компьютер дома. Однако, как вы заметили, оно не поддерживает UDP, что критично для многих игровых серверов.
-
VPN на базе WireGuard или OpenVPN: Настройка VPN-сервера на вашем VPS и подключение к нему из вашей локальной сети может обеспечить преодоление CGNAT. Вы уже пытались настроить WireGuard и OpenVPN, что является правильным шагом. Однако проблемы со стабильностью подключения могут быть вызваны конфигурационными ошибками или ограничениями полосы провайдера.
-
Hole Punching с помощью ZeroTier/Tailscale: Эти решения предназначены для создания P2P-соединения (peer-to-peer), обходя ограничения CGNAT. Они используют технику "hole punching", позволяя устройствам подключаться друг к другу напрямую, минимизируя участие промежуточных серверов.
Применение: Практические шаги для обхода CGNAT
Чтобы успешно настроить рабочее решение, следуйте следующим рекомендациям:
-
Установка VPN-сервера на VPS: Используйте WireGuard или OpenVPN для создания VPN-туннеля. Убедитесь, что ваш конфигурационный файл правильно настроен и учитывает маршрутизацию всех необходимых сетей. Для устранения проблем с соединением проверьте настройки брандмауэра и убедитесь, что все необходимые порты открыты на VPS.
-
Использование ZeroTier или Tailscale: Установите клиентское программное обеспечение на все устройства, которые должны взаимодействовать. Эти платформы предоставляют детализированные инструкции по настройке и управление виртуальными сетями через веб-интерфейс. Идея заключается в том, что после начальной настройки устройства могут взаимодействовать напрямую, пользуясь P2P соединением.
-
Использование nginx как реверс-прокси: Это может быть полезно в том случае, если вам нужно перераспределить трафик между различными службами на вашем VPS. Но в контексте игрового сервера и вашей текущей задачи это может быть избыточно, поскольку первые решения будут эффективнее.
Чтобы облегчить вам процесс, возможно, стоит открыть доступное руководство или видеоуроки по каждому предложенному решению. Это поможет вам глубже понять процессы и избежать распространенных ошибок.
Заключение
Ваша задача требует не только теоретического понимания сетевых технологий, но и практических навыков в администрировании серверов и управлении маршрутизацией трафика. Важно уделить должное внимание оптимизации конфигурации и тестированию каждого решения. Если у вас возникнут трудности, обращение к специализированному техническому сообществу или поиск практического руководства может значительно ускорить процесс. Удачи в настройке, и не сдавайтесь – правильный подход и немного терпения решат вашу задачу!