【问题标题】:Testing NAT Breakthrough Code测试 NAT 突破代码
【发布时间】:2010-12-10 05:20:36
【问题描述】:

我对至少尝试为我的高级项目实施 NAT 突破非常感兴趣。 (我正在做一个网络 API)。 这甚至不是我项目的要求,只是我的兴趣。 我知道它是如何工作的基础知识,如果我错了,请纠正我: 两个客户端连接到不在 NAT 后面的服务器,并且该服务器知道这两个客户端的 IP,告诉客户端同时相互连接。于是有了“突破”。

这似乎不是很容易或很难编码。 但是,我坚持的部分是对此的测试。是否可以仅使用一台路由器/一台 NAT 和三台可用计算机进行合理的设置?

感谢您的建议!

【问题讨论】:

  • 我很想听听您对此的了解。
  • 如果/当我这样做时,我会尽量记住回到这里。 :)

标签: c# networking nat


【解决方案1】:

关于 NAT 破解的代码/理论,我无法提供建议,但我可以就设置测试环境提出一些建议。

您可以下载m0n0wall 的副本并在 Virtual PC 映像中运行它(两者都是免费的)。这将为您提供第二个路由器,而无需购买任何额外的硬件。使用这个额外的路由器,您可以为您的两个客户端创建一个单独的子网。

另一个更容易掌握的选择是简单地购买第二个路由器,你可以很便宜地买到一个好的。

然后像现在一样设置您现有的路由器和服务器,一个 192.168.1.x /24 子网;然后将您的第二个路由器(m0n0wall/硬件路由器)设置为 192.168.2.x /24 子网,并将第二个路由器的“互联网”端口插入第一个路由器上的一个“PC”端口。然后将两个客户端都插入第二个路由器。

(我意识到这有点令人困惑,如果您不能理解我的意思,请发表评论)

【讨论】:

    【解决方案2】:

    让我看看我是否直截了当。您有两个客户端都位于 NAT 之后,而服务器则不在。两个客户端都连接到服务器并被告知对方的面向公众的 IP 地址。由于每个人现在都有一个目的地,因此它们与服务器断开连接,并通过各自的 NAT 框直接相互连接。这是你的想法吗?如果是这样,我可能要告诉你一些坏消息。

    为了让这一切正常工作,您必须在每个 NAT 配置中设置专用端口,以将至少一个外部端口转发到预定义的内部 IP 地址/端口号。在通用 NAT 设置中,传出连接请求将被 NAT 捕获,这将打开一个临时外部端口。该外部端口号仅用于与该原始地址和端口的通信。当连接关闭时,该外部端口将消失,稍后将重新分配给另一个连接。因此,如果两个客户端都与服务器通信然后断开连接,那么服务器发送给它们的信息现在是无效的。

    假设您以某种方式解决了这个问题,将两个客户端连接到 NAT 的“内部”端并将服务器 PC 连接到“外部”端应该是相当容易的。然后你必须希望你的 NAT 盒子足够聪明,可以将数据包从一个本地外部端口环回另一个端口。我确信可以通过这种方式配置 netfiler,但我怀疑家用互联网“路由器”(例如 Linksys、NetGear 等)是否可以现成。

    【讨论】:

    • 感谢您的信息。我知道在同一个局域网上做这件事可能有很多障碍。我可能会尝试仍然这样做,但以我的资源,我可能不应该对我的教授做出任何承诺吧?
    猜你喜欢
    • 2021-02-24
    • 2012-02-02
    • 2017-11-22
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多