На самом деле, вы можете (вроде)
Это немного сложно и не работает все время, но вот суть о том, как это работает:
Данный:
Роутер с публичным IP 1.2.3.4
PC1 с частным IP ABCD (за маршрутизатором A)
Routerb с публичным IP 5.6.7.8
PC2 с частным IP EFGH (за маршрутизатором B)
Теперь, учитывая идеальное решение (т.е. не PAT) ...
Шаг A:
Отправьте любое сообщение из PC1 на любом порту (10000 для этого примера) в публичный IP для RouterB (4.5.6.7). Это зарегистрирует ABCD: 10000 -> 4.5.6.7:10000 на NAT и PAT для маршрутизации. RouterB отбросит этот пакет (как и ожидалось, потому что его не было запрошено).
Шаг B: В то же время постоянно отправляйте пакет из PC2 в общедоступный IP на маршрутизаторе A (1.2.3.4) на том же порту (10000). Это зарегистрирует EGFH: 10000 -> 1.2.3.4:10000 на Nat и Pat.
Шаг C:
Теперь вот где происходит волшебство:
PC2 постоянно отправляет пакет на маршрутизаторы, тем самым сохраняя «отверстие» в Routerb для ответа, чтобы вернуться. Когда PC1 отправит его один пакет на RouterB, он будет показан в RouterB в качестве ответа и, следовательно, будет перенаправлен в PC2. После того, как PC2 получит этот «ответ», убедитесь, что еще один пакет выходит и прекратите отправлять непрерывные пакеты. Этот последний пакет будет выступать в качестве «ответа» на PC1 и пройти «дыру», созданную в шаге А. и вуаля! Теперь у вас есть Nat Transversal. Вам нужно только отправлять один пакет каждую минуту или около того, оба направления, чтобы держать «отверстие» открытым.
Примечание: это работает только с UDP, так как он без соединения (пакеты с падами в порядке).
Теперь почти все маршрутизаторы используют PAT, поэтому вам нужно «угадать», какой порт «ответить» на большинство маршрутизаторов сделает смещение +-10 (IEABCD: 10000 -> 5.6.7.8:10010).
Просто попробуйте несколько в этом диапазоне (от -10 до +10, пока не получите ответ)
Остальные маршрутизаторы случайны на своих PAT. Если так, вы облажались ... попробуйте другое направление (т.е. подключение к другому направлению). Если это не удается, вы не можете подключиться ... извините)