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

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

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

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

UPD:
В общем нашёл способ. Проблема решена!
  • Вопрос задан
  • 554 просмотра
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 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 сервера, нат становится не проблемой, серый ип тоже.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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