@Atllantis

Как соединить 2 компа напрямую?

Что есть:
1. Комп1, на котором создаётся сокет-сервер, допустим на 110 порту.
2. Комп2, который должен подключиться к компу1 напрямую!
3. Сервер, который должен передать IP и ПОРТ компа1 компу2, по которым комп2 должен будет подключиться к сокету компа1 на 110 порту.

И в 3-м пункте проблема...
Комп1 находится за NAT и имеет серый внутренний IP, следовательно, при попытке подключиться к компу1 по внешнему IP, все порты будут закрыты.
Я пока не могу придумать решения данной проблемы...
Кто может подсказать логику действий в данном случае?

UPD:
В общем нашёл способ. Проблема решена!
  • Вопрос задан
  • 512 просмотров
Пригласить эксперта
Ответы на вопрос 3
Jump
@Jump
Системный администратор со стажем.
Логика действий следующая - берете у провайдера белый(реальный) адрес и нет проблем.
Или позаботьтесь о том чтобы порты были открыты.
Ответ написан
Комментировать
plin2s
@plin2s
IT, инженер
Без реального IP тут не обойтись.
1) поднимать соединение в другую сторону
2) Поднять vpn, ходить по адресам VPN
Ответ написан
jamakasi666
@jamakasi666
Просто IT'шник.
Мало информации, лучше нарисовать псевдосхемой.
Как я понял комп1 где то далеко, прячется за натом провайдера? Или от провайдера ip статичный и белый а серый нат только на стороне локалки в виде обычного роутера?
Комп2 я так понимаю ваш комп.
Вопрос где находится сервер? у вас, вместе к комп1 или где то отдельно и имеет свой статичный внешний ip?

Если комп подходит под описание того что нат у него внутри своей локалки то надо просто пробросить dmz зону на комп1. Если доступа к роутеру нет но есть upnp то шаманить и програмно пробивать себе порт через upnp.

Другой вариант это любой vpn.

Еще 1 вариант это написать простейший аналог turn сервера. Т.е. грубо говоря где то на сервере у которого есть возможность открывать любые порты и присутсвует белый внешний ip стоит turn сервер. Turn в самой простой реализации будет работать так:
По дефолту ждет соединение на любом порту, пусть это будет даже сокетное соединение. При получение входящего соединения начинает ждать 2е соединение. После подключения обоих клиентов он у каждого получает input и output концы, затем кросирует их между собой. комп1(output)->комп2(input) и наоборот комп1(input)->комп2(output). В конечном счете сервер просто проксирует соединение, для комп1 и комп2 соединение будет именно друг с другом но в тоже время сами они будут являться клиентами для turn сервера, нат становится не проблемой, серый ип тоже.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы