Sim. Suponha que sua rede seja assim:
VocêquerSSHdeAparaB.VocêtemosshdrodandoemB;estáescutandoemtcp://127.0.0.1:22.
B$pwnat-s0.0.0.02022127.0.0.1:22
pwnatemBagoraestáouvindonoudp://0.0.0.0:2022eestáconfiguradoparapermitirconexõescomtcp://127.0.0.1:22.EletambémestáenviandosolicitaçõesperiódicasdeecoICMPpara3.3.3.3(IPcomcódigodeacesso).
A$pwnat-c127.0.0.13022104.16.111.2082022127.0.0.122
pwnatemAagoraestáescutandoemtcp://127.0.0.1:3022.
pwnatemAenviaumpacoteexcedidodetempoICMPpara104.16.111.208cujacargaútilcorrespondeàssolicitaçõesdeecoICMPdesaídavindasdoNATB.NATBvêqueacargacorrespondeàssolicitaçõesdeecoICMPdesaídaeencaminhaopacoteexcedidodotempoICMPparaBObservequeocabeçalhoIPparaopacotedetempoexcedidodoICMPcontémoIPdoNATA,151.101.193.69,comooendereçodeorigem.
pwnatemBenviaumpacoteUDPparaudp://151.101.193.69:2022comaportadeorigem2022.NATBadicionaumaentradaemsuatabelaparaquenofuturoeleencaminhetodosospacotesUDPquereceberdeudp://151.101.193.69:2022emudp://104.16.111.208:2022paraudp://192.168.2.10:2022.ObservequemuitosNATsdesignarãoumaportadiferentenainterfaceexterna.Seesteforocaso,o
pwnat em A envia um pacote UDP para udp: //104.16.111.208: 2022 com a porta de origem 2022. O NAT A adiciona uma entrada em sua tabela e, no futuro, encaminhará quaisquer pacotes UDP que receber de udp: // 104.16.111.208:2022 em udp: //151.101.193.69: 2022 para udp: //192.168.1.10: 2022.
O NAT A recebe o pacote UDP que B enviou, faz a correspondência em sua tabela e o encaminha para A. O NAT B recebe o pacote UDP que A enviou, compara-o em sua tabela e o encaminha para B. A e B agora pode se comunicar livremente por UDP.
A$ ssh -p 3022 127.0.0.1
pwnat em A, que está escutando em tcp: //127.0.0.1: 3022, aceita a conexão do ssh. pwnat em A envia uma solicitação para pwnat em B (via UDP) para abrir um túnel para tcp: //127.0.0.1: 22. Como isso foi listado como um par de host / porta permitido quando o pwnat em B foi iniciado, ele faz a conexão. O túnel agora está completo:
ssh on A --[tcp]--> pwnat on A --[udp]--> pwnat on B --[tcp]--> sshd on B
Se o pwnat não possui bugs, então não é diferente em termos de segurança expor o sshd ao mundo em um servidor que não esteja atrás de um NAT. No entanto, olhando através do código-fonte, pwnat parece meio que cortado em conjunto e eu não confiaria em ser seguro. O pior cenário seria a execução de código arbitrário em A e B como o usuário que está executando o pwnat.