Редактировать: После комментариев (и прочтения связанных страниц) я должен отступить от своего совета. Я не удаляю его, для хорошей графики, но изменил последнюю часть.
Если я правильно понимаю, у вас есть два клиента, оба за брандмауэром NAT, который разрешает исходящие соединения, но не переадресовывает входящие соединения, если специально не настроен для этого (так как они не знают, для каких локальных хостов это происходит) сУЖДЕНО).
В принципе, TCP-соединение в течение всего времени своего существования всегда соединяет одни и те же два IP-адреса и номера портов по этим адресам (например, у нас есть четыре числа, которые остаются постоянными). В случае NAT у вас фактически есть два соединения, но это не видно ни на клиентском компьютере A (ни на сервере S):
Client A -------(LAN)------ NAT B ------ (Internet) -------- Server S
IP A IP B1 | IP B2 IP S
Port a | Port b Port s
Пакеты TCP имеют адреса [A: a / S: s] (или [S: s / A: a]) в локальной сети и [B2: b / S: s] (или [S: s / B2: b]) адреса в интернет-части. Соединение идентифицируется этим четырехкратным [IP: порт / IP: порт], поэтому, если вы попытаетесь изменить хотя бы одно из четырех чисел, это должно быть новое соединение (или пакет будет отброшен).
Итак, если вы впервые общаетесь с вашим сервером, вы не можете продолжать общение с другим клиентом по тому же соединению, если только сервер не пересылает содержимое.
То же самое на самом деле имеет место для пакетов UDP, с той разницей, что нет никаких соединений, и NAT должен быть умным и угадывать, какой пакет является ответом на какой-либо другой пакет, и, как таковой, направить его вправо направление.
Как отмечается в комментариях и других ответах, здесь можно обмануть NAT: сначала мы отправляем UDP-пакет другому клиенту, который будет отброшен NAT там. Но затем другой клиент отправляет ответный пакет, который не является реальным ответом на исходящий пакет (поскольку этот пакет никогда не получался из-за NAT других клиентов), но IP-адреса и номера портов совпадают, он все равно будет пропущен. Это может усложниться, если NAT также преобразует номера портов.
Для TCP он может работать аналогично, если оба NAT на самом деле не поддерживают открытое соединение, а просто пересылают (изменяют) пакеты, когда ранее был отправлен SYN. Это еще сложнее, поскольку здесь также должны совпадать порядковые номера TCP.