我对至少尝试为我的高级项目实施 NAT 突破非常感兴趣。(我正在做一个网络 API)。这甚至不是我项目的要求,只是我的兴趣。我知道它是如何工作的基础知识,如果我错了,请纠正我:两个客户端连接到一个不在 NAT 后面的服务器,这个服务器知道这两个客户端的 IP,告诉客户端相互连接同时。因此,“突破”。
这似乎不是很容易或很难编码。但是,我坚持的部分是对此的测试。仅使用一台路由器/一台 NAT 和我的三台可用计算机就可以进行合理的设置吗?
感谢您的任何建议!
我对至少尝试为我的高级项目实施 NAT 突破非常感兴趣。(我正在做一个网络 API)。这甚至不是我项目的要求,只是我的兴趣。我知道它是如何工作的基础知识,如果我错了,请纠正我:两个客户端连接到一个不在 NAT 后面的服务器,这个服务器知道这两个客户端的 IP,告诉客户端相互连接同时。因此,“突破”。
这似乎不是很容易或很难编码。但是,我坚持的部分是对此的测试。仅使用一台路由器/一台 NAT 和我的三台可用计算机就可以进行合理的设置吗?
感谢您的任何建议!
让我看看我有没有这个直。您有两个都位于 NAT 后面的客户端和一个不在 NAT 后面的服务器。两个客户端都连接到服务器并被告知对方的面向公众的 IP 地址。由于每个人现在都有一个目的地,因此它们与服务器断开连接,并通过各自的 NAT 框直接相互连接。这是你的想法吗?如果是这样,我可能有一些坏消息要告诉你。
为了让这一切正常工作,您必须在每个 NAT 配置中设置专用端口,以将至少一个外部端口转发到预定义的内部 IP 地址/端口号。在通用 NAT 设置中,传出连接请求将被 NAT 捕获,这将打开一个临时外部端口。该外部端口号仅用于与该原始地址和端口的通信。当连接关闭时,该外部端口将消失,稍后将重新分配给另一个连接。因此,如果两个客户端都与服务器通信然后断开连接,那么服务器发送给它们的信息现在是无效的。
假设您已经以某种方式解决了这个问题,将两个客户端连接到 NAT 的“内部”端并将服务器 PC 连接到“外部”端应该相当容易。然后你必须希望你的 NAT 盒子足够聪明,可以将数据包从一个本地外部端口环回另一个端口。我确信可以通过这种方式配置 netfiler,但我怀疑家庭互联网“路由器”(例如,Linksys、NetGear 等)是否会现成。
关于 NAT 破解的代码/理论,我无法提供建议,但我可以就设置测试环境提出一些建议。
您可以下载m0n0wall的副本并在 Virtual PC 映像中运行它(两者都是免费的)。这将为您提供第二个路由器,而无需购买任何额外的硬件。使用这个额外的路由器,您可以为您的两个客户端创建一个单独的子网。
另一个更容易掌握的选择是简单地拿起第二个路由器,你可以很便宜地买到一个好的。
然后像现在一样设置现有的路由器和服务器,一个 192.168.1.x /24 子网;然后将您的第二个路由器(m0n0wall/硬件路由器)设置为 192.168.2.x /24 子网,并将第二个路由器的“互联网”端口插入第一个路由器上的一个“PC”端口。然后将两个客户端都插入第二个路由器。
(我意识到这有点令人困惑,如果您不能理解我的意思,请发表评论)