Задать вопрос

Как организовать соединения двух компьютеров за NAT?

Есть два компьютера (compA и compB), каждый находится на серых адресах, каждый за своим NAT.

нужно между ними пробросить tcp порт, те я делаю "telnet 127.0.0.1 8000" на компьютере A, а программа которая слушает порт 8000 на компьютере B отвечает.

Есть возможность установить промежуточный сервер C на белых адресах. В теории пока представляется, что на сервере C запускается программа, а на compA & compB запускаются клиенты, которые узнают друг о друге и дальше уже гоняют трафик или через сервер C или если напрямую (это не принципиальный момент, трафика там мало).

На какой опенсорсный софт посмотреть? смотрел на ngrok и его альтернативы, но сходу кажется он не расчитан на ситуацию когда два компа на серых адреса. Разные STUN сервера, но там вроде про UDP больше

Технически это конечно можно сделать через какой-нить openvpn, но ради одного порта поднимать интерфейсы кажется излишне.
  • Вопрос задан
  • 5200 просмотров
Подписаться 4 Простой 1 комментарий
Решения вопроса 1
@SunTechnik
Обычный ssh и его тунелей будет достаточно.
Один коннектится на vps и делает remote порты.
Второй коннектится на vps и пробрасывает порты как local
Ответ написан
Пригласить эксперта
Ответы на вопрос 11
@rPman
Если совсем все плохо, можно попробовать hole punching, шансы есть.

Если на одном роутере (лучше в той локальной сети где будет listen подключения) включен uPnP (обычно на потребительских роутерах включено по умолчанию), то можно с помощью утилит настроить временное перенаправление портов и подключаться напрямую. Например под linux утилиты apt-get install miniupnpc создаем проброс порта:
upnpc -a <локальный_IP> <локальный_порт> <внешний_порт> TCP

наличие и поддержку
upnpc -s
Адрес узнать чем то типа api.ipify.org или посмотреть на роутере (например открываешь админку роутера, страницу где видно ip адрес, копируешь из консоли разработчика браузера curl команду загрузки этой страницы и вытаскиваешь ip адрес любым удобным тебе способом, хоть регулярками хоть приложением из трех строчек)
этот адрес и порт нужно как то сообщить тому кто будет подключаться.

Есть еще NAT-PMP (я хз, на сколько роутеры это умеют, я вообще это узнал, общаясь с ИИ)
sudo apt-get install natpmpc
проброс порта
natpmpc -a <порт> <порт> TCP 3600
Ответ написан
@ivan13412
Используйте Yggdrasil: https://yggdrasil-network.github.io
Ответ написан
Комментировать
@lantonov
Если провайдер 1 то можно попробовать пропинговать серые адреса между собой возможно есть маршрут до этого ПК или роутера если разные то только внешний сервер и сделать их как клиентами между собой они ни как не установят соединения ели только не пробовать strun но он только ьдля веб приложении работает вроде
Ответ написан
Комментировать
@Apasnychel
Если связь организуется tcp, то на одном из компов достаточно поднять ssh тунель
Ответ написан
Комментировать
@wkon
Сетевик, Системщик
Если есть белый сервер и вы согласны гонять через него трафик, то самое простое поднять на него два туннеля WireGuard и использовать как маршрутизатор между двумя компами.

Ну или tcpproxy.
Ответ написан
Комментировать
@garirobert
Самый простой способ - netbird (и тому подобное).
До этого использовал Wireguard для доступа к машине по белому IP - на VPS ставишь сервер, на машине с серым IP клиента и прокидывал порты. Но WG рубится со стороны гос-ва.
Ответ написан
Комментировать
@Dkim7
Бесплатная программа Radmin VPN и компы как в одной локалке будут.
Ответ написан
Комментировать
@Hellked
Гуглите Zero Tier. Прямая связь через udp hole punching.
Ответ написан
Комментировать
@Ratenti
Так port forwarding на роутере настрой
Ответ написан
Комментировать
OCTAGRAM
@OCTAGRAM
3proxy переносим между всеми основными OS, поддерживает ограничение по IP. У модуля tcppm есть интересные параметры

.B -RHOST:port
listen on given local HOST:port for incoming connections instead of making remote outgoing connection. Can be used with another 3proxy service running -r option for connect back functionality. Most commonly used with tcppm. HOST can be given as IP or hostname, useful in case of dynamic DNS.
.br
.B -rHOST:port
connect to given remote HOST:port instead of listening local connection on -p or default port. Can be used with another 3proxy service running -R option for connect back functionality. Most commonly used with proxy or socks. HOST can be given as IP or hostname, useful in case of dynamic DNS.
Ответ написан
Комментировать
@guselnikov
Самый простой способ, который не требует каких-то знаний - ZeroTier. У них на сайте есть пакеты для всех дистрибутивов, настраивается за 2 минуты - работает почти идеально и стабильно. Ваши два хоста будут доступны друг-другу по всем портам
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы