да. предположим, что ваша сеть выглядит так:
вы хотите SSH от A до B. У вас есть sshd, работающий на B; он слушает по tcp://127.0.0.1:22.
B$ pwnat -s 0.0.0.0 2022 127.0.0.1:22
pwnat на B теперь прослушивает udp: / / 0.0.0.0: 2022 и настроен на разрешение подключений к tcp://127.0.0.1: 22. Это также передает периодические эхо-запросы ICMP к 3.3.3.3 (жестко закодированный IP).
A$ pwnat -c 127.0.0.1 3022 104.16.111.208 2022 127.0.0.1 22
pwnat на А сейчас прослушивание tcp: / / 127.0.0.1: 3022.
pwnat на посылает ICMP раз превысил пакет 104.16.111.208, чья грузоподъемность соответствует исходящие ICMP-эхо запросы, поступающие от нац нац Б. Б видит, что груз соответствует исходящие ICMP эхо-запросы и отправляет пакеты ICMP времени превышения пакета в пункт Б. обратите внимание, что IP-заголовок протокола ICMP раз превысил пакет содержит Нат интеллектуальной собственности, 151.101.193.69, в качестве адреса источника.
pwnat на B посылает UDP пакет на udp: / / 151.101.193.69: 2022 с портом источника 2022. Нац Б добавляет запись в таблицу, поэтому в будущем он будет пересылать любые пакеты UDP, которые он получает от UDP://151.101.193.69:2022 на UDP://104.16.111.208:2022 на UDP://192.168.2.10:2022. обратите внимание, что многие Nat назначат другой порт на внешнем интерфейсе. Если это так, pwnat не работает.
pwnat посылает UDP-пакет на udp: / / 104.16.111.208:2022 с исходным портом 2022. NAT A добавляет запись в своей таблице, поэтому в будущем он будет пересылать любые пакеты UDP, которые он получает от UDP://104.16.111.208:2022 на UDP://151.101.193.69:2022 на UDP://192.168.1.10:2022.
Нат получает UDP пакетов, что б прислал, он в свою таблицу, и направляет его в Лос-нац b получает UDP-пакета, что отправил, соответствует его в свою таблицу, и направляет его B. A и B теперь могут свободно общаться по UDP.
A$ ssh -p 3022 127.0.0.1
pwnat на A, который прослушивает tcp: / / 127.0.0.1: 3022, принимает соединение по ssh. pwnat на A отправляет запрос pwnat на B (через UDP), чтобы открыть туннель к tcp: / / 127.0.0.1: 22. Так как это было перечислено как позволенная пара хоста/порта, когда pwnat на B был запущен, это делает соединение. Туннель завершен:
ssh on A --[tcp]--> pwnat on A --[udp]--> pwnat on B --[tcp]--> sshd on B
если pwnat не имеет ошибок, то это не отличается по безопасности от предоставления sshd миру на сервере, который не находится за NAT. Однако, просматривая исходный код, pwnat кажется взломали вместе и Я бы не стал полагаться на его надежности. Худшим сценарием было бы выполнение произвольного кода на A и B в качестве пользователя, выполняющего pwnat.