【问题标题】:Is pwnat still an applicable solutionpwnat 仍然是一个适用的解决方案吗
【发布时间】:2014-05-24 00:39:12
【问题描述】:

我需要一个 NAT 穿越解决方案,以便在互联网上传输 RDP 数据。我偶然发现了以下工具,它真的很棒 - pwnat

我已经在不同路由器后面的两台不同机器上进行了尝试,但我无法按照上面链接中的说明使其工作。 pwnat 还在工作吗?如果是,我可能做错了什么?这对我很有帮助。

注意:我使用的是 Windows 机器进行测试,并从以下链接下载了 Windows 版本:

http://www.sumitgupta.net/pwnat-windows-complied-version/

【问题讨论】:

  • 如果没有看到正在发送的流量,就很难诊断问题。尝试使用 wireshark 或类似工具捕获两台机器看到的流量,然后在此处发布。
  • 如果您的 NAT 路由器正在更改出站数据包的源端口,此方法将失败。无法通过在本地网络上捕获数据包来诊断此问题;您需要在 NAT 路由器和 ISP 之间捕获数据包,或者在具有公共 IP 地址的远程系统上捕获数据包。
  • 这里分享的文章来自我的博客。因此,我想添加以供将来参考,pwNAT 对我来说永远不会可靠。我将我的应用更改为 IPv6,因为它没有 NAT,因此即使在启用 NAT 的 ipv4 路由器后面也能正常工作。

标签: network-programming nat rdp pwnat


【解决方案1】:

没有。
我假设你知道它是如何工作的:
服务器向固定地址(例如 1.2.3.4)发送 ICMP 回显请求数据包,在该地址不会返回任何回显响应,客户端伪装成 Internet 上的一跳,向客户端发送 ICMP Time Exceeded 数据包服务器,期望服务器前端的 NAT 将 ICMP 超时消息转发给服务器。

上图来自homepage of pwnat,前提是客户端不在NAT之后,并且NAT实现通常不会检查原始有效负载超时消息。如果客户端和服务器都像这样在 NAT 之后,

=========================================================================================
| CLIENT  | <---> |  NAT-C  | <---> { internet } <---> |  NAT-S  | <---> | SERVER |
=========================================================================================

如今它很少起作用,主要有以下两个原因:

  1. 当服务器向固定地址发送ICMP echo request报文时,根据RFC 3022,ICMP echo request header中的identifier字段会被NAT-S唯一映射到注册IP地址的一个query identifier,这样就可以可以将未来具有相同查询 ID 的 ICMP Echo Replies 路由到发送方,因此必须修改 ICMP 查询数据包中的 ICMP 头以替换查询 ID 和 ICMP 头校验和。 RFC 3022 ICMP error packet modifications section

在 NAPT 设置中,如果嵌入在 ICMP 中的 IP 消息恰好是 TCP、UDP 或 ICMP 查询数据包,您还需要修改 TCP/UDP 标头或查询中的适当 TU 端口号 ICMP 查询标头中的标识符字段。

但是客户端不知道外部查询ID(pwnat中的代码使用0作为原始请求的标识符),它向服务器发送一个ICMP Time Exceeded数据包,即使数据包可以到达NAT- S 在服务器前,NAT-S 找不到嵌入数据包的活动映射,大多数 NAT 实现都会丢弃它。

  1. 此外,根据rfc 5508,当NAT-C收到来自Private Realm的ICMP Error数据包时,NAT-C使用嵌入在ICMP Error消息中的数据包(即从客户端到服务器的IP数据包) ) 来查找嵌入数据包所属的 NAT 会话。如果 NAT-C 没有嵌入数据包的活动映射,则 NAT-C 应该静默丢弃 ICMP 错误数据包。这意味着来自客户端的 ICMP Time Exceeded 数据包不会到达 NAT-S。

因此 pwnat 仅适用于进行简单地址转换的基本 NAT 设备(rfc 1631 描述),不适用于任何具有强大 NAPT 实现的 NAPT 设备。而This paper 确实提到了这个问题。

【讨论】:

  • 有人知道后继工具吗?或者 2016 年对 samyk/pwnat 源或 GitHub 中的 fork timdiels/pwnat sorces 的最后一次提交有帮助吗?
  • @Achim 使用第三方来帮助,比如击晕,转服。提交是无关紧要的。
  • @jfly 请详细说明。 nat 后面的服务器如何使用 stun 服务器接受传入的连接(udp 或 tcp)?
  • @Zibri 我不认为这就是 jfly 的意思。相反,不再有任何方法可以在没有第三方的情况下连接 NAT 后面的两个客户端。 “眩晕”或“转向”服务器(不在 NAT 后面)是唯一的选择,AFAIK。
猜你喜欢
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多