Как общаться двум компам которые находятся за своими NAT?
Есть два компа (комп 1 и комп 2) которые находятся каждый за своим NAT'ом, есть промежуточный сервер на котором настроен iptables, так что он транслирует пакеты с одного компа на другой. Сейчас у компа 1 есть белый статический адрес, а у компа 2 его нету, они прекрасно общаются через промежуточный сервер. Но смысла в промежуточном сервере в такой схеме нет, а есть только тогда когда оба компа за NAT'ом, так вот задача состоит в том, что бы когда комп 1 будет за NAT'ом, то он должен отправить сообщение промежуточному серверу, что он онлайн и комп 2 может к нему подключаться. Как лучше организовать связь между двумя компами? Сколько портов использовать? Один и тот же порт для того что бы сообщить промежуточному серверу что комп 1 онлайн и по этому же порту передавать пакеты для компа 2, или же это должно быть два разных порта? И возможно ли вообще передавать всё это по одному порту? Инициировать подключение должен именно комп 1, так как задача в том, что бы комп 2 подключился к компу 1.
Александр Иванов, У вас один компьютер с белым адресом.
Поэтому к нему без проблем можно подключиться с любого адреса, в любое время.
Просто инициируйте соединение с компьютера у которого серый IP и все.
При чем тут порты? И зачем там промежуточный сервер?
Александр Иванов, Ничего не понимаю. Вы уже определитесь - без белых адресов или с белыми.
В вопросе написали одно, теперь уже другое.
Сейчас у компа 1 есть белый статический адрес, а у компа 2 его нету, они прекрасно общаются через промежуточный сервер.
Вроде ясно написано, что белый адрес есть. Только непонятно зачем промежуточный сервер?
Если белых адресов нет, - тогда да, нужен промежуточный сервер с белым адресом. Поднимаете на нем VPN сервер, подключаетесь с обеих компов с серыми адресами к нему и вы в одной локальной сети. Общайтесь на здоровье.
Общий принцип простой - инициировать соединение можно только к компьютеру имеющему белый адрес.
Если компьютер не имеет белого адреса к нему невозможно подключиться - не к кому собственно инициировать соединение.
Совсем без чего-нибудь промежуточного с белым адресом, хотя бы чисто для первоначальной инициализации соединения и поиска "компов" друг другом - никак.
Даже в WebRTC в самом простом случае есть сигнальный сервер, через который пиры обмениваются кандидатами, и иногда получается без излишеств типа STUN/TURN, но зачастую только в идеальном мире.