Пиринговая сеть. Проблема «серых» IP-шников. Как решить?
Дисклеймер:
Пишу программу на python, между двумя ПК нужно установить двухстороний обмен данными в реальном времени (сами данные не тяжёлые).
Нужно организовать пиринговое соединение между двумя компьютерами.
Проблема: у многих домашних компьютеров сейчас "серые" IP адреса, скрытые под NAT, т.е. до такого компьютера, невозможно установить соединение, если он не установит его сам с сервером с "белым" IP-шником. Есть ли способы как-то это сделать без сервера, или всё-таки нужен сервер-посредник, для установки соединения? Если возможно только с сервером, есть ли какие-то готовые решения для этого или онлайн сервисы (вообще идеально)?
Спасибо!
НЕО не избранный, Там нет ничего сложного: один раз разберётесь и будете использовать как в вебе, так и в нативных приложениях, и радоваться простоте и единству архитектуры вне зависимости от платформ.
xmoonlight, и ещё вопрос, как на абстрактом уровне работает этот сервис?
Что-то вроде этого?
клиент 1 подключается к сервису создавая канал
клиент 2 подключается к этому же сервисе, к тому каналу, что создал клиент 1
клиент 1 передаёт данные сервису
сервис ретранслирует клиенту 2 данные, принятые от клиента 1
vreitech, т.е. грубо по моему пониманию это будет что-то вроде вроде так:
клиент 1 подключается к серверу и говорит, просто перешли эти данные клиенту 2
клиент 2 подкючается к серверу и ждёт приёма данных
Что-то вроде передачи мелочи в маршрутке?
NeoIsNotTheOne, если вас интересует именно такая реализация - она возможна. например, использовать брокер сообщений rabbitmq.
обычно всё же выбирают что-то попроще: объединяют машины в один сегмент VPN-сети с сервером в роли VPN-сервера, например. да и у вас в пожеланиях было соединение двух компьютеров, в этом случае вариант с VPN-маршрутизацией идеологически ближе к этой схеме, чем с брокером сообщений.
для установки соединения двух хостов с серым IP без какой-то дополнительной третьей машины с белым IP вам нужно будет использовать pwnat. иных способов, не требующих промежуточного сервера с белым IP, мне неизвестно.
Можно попробовать вместо IP использовать DNS имя. Во многих роутерах есть такая функция как динамическое DNS имя для подключения к нему извне без белого IP.
Получить бесплатно имя на DynDNS или другом ресурсе.
Бред какой-то, это работает для динамического белого ip, а для серого адреса каким образом можно получить белый ip, если его не существует?
Либо раскройте эту технологию, я впервые слышу. Очень интересно.