udp通过nat

udp通过nat

我有两个私有网络(每个网络都在典型的 dsl 路由器后面)。路由器连接到 WWW。每个路由器的外部接口都有一个动态 IP 地址。我想通过 UDP 直接在私有网络 A 中的一个客户端和私有网络 B 中的一个客户端之间传输数据。

我已经尝试了很多事情(参见:http://en.wikipedia.org/wiki/UDP_hole_punching或 STUN)。但是我无法在两个客户端之间传输数据。

可以使用服务器(位于 WWW 中,具有静态 IP)在客户端之间传输来自路由器的外部 IP(和外部端口)。假设客户端 A 知道客户端 B 的外部 IP 和由其路由器分配的客户端 B 的外部端口。

我只是尝试将 UDP 数据包发送到接收方的外部 IP/端口组合,但没有任何结果。那么,有人知道如何通过 UDP 跨越两个 NAT 路由器进行通信吗?这一定可行吗?或者,例如,Skype 在呼叫彼此时不直接在客户端之间进行通信(IP 语音)。

抱歉我的英语不好!如果有什么不明白的地方,请随时问我!!!

提前感谢您的帮助。

::::编辑::::

我无法让 pwnat 或 chownat 工作。
我尝试用自己的 dsl-gateway -> 没用。

然后我使用 VMWare 设置了一个完整的虚拟环境。

C1(客户端 1,WinXP Prof SP3):172.16.16.100/24,GW 172.16.16.1
C2(客户端 2,WinXP Prof SP3):10.0.0.100/24,GW 10.0.0.1
C3(客户端 3,WinXP Prof SP3):3.0.0.2/24,GW 3.0.0.1
S1(Ubuntu 10.04 x64 服务器):eth0:172.16.16.1/24,eth1:1.0.0.2/24 GW 1.0.0.1
S2(Ubuntu 10.04 x64 服务器):eth0:10.0.0.1/24,eth1:2.0.0.2/24 GW 2.0.0.1
S3(Ubuntu 10.04 x64 服务器): eth0: 1.0.0.1/24, eth1: 2.0.0.1/24, eth2: 3.0.0.1/24

+--+     +--+     +--+     +--+     +--+  
|C1|-----|S1|-----|S3|-----|S2|-----|C2|  
+--+     +--+     +--+     +--+     +--+
                    |  
                  +--+  
                  |C3|  
                  +--+  

服务器 S1 和 S2 提供 NAT 功能。(它们启用了路由并提供防火墙,允许来自内部网络的流量并提供 nat 功能)服务器 S3 启用了路由。客户端防火墙已关闭。

C1 和 C2 可以 ping C3,例如访问 C3 的 Web 服务器。它们还可以向 C3 发送 UDP 数据包(C3 成功接收它们)!

出于测试原因,C1 和 C2 也运行网络服务器。

我在 C1 上运行“chownat -s 80 2.0.0.2”,在 C2 上运行“chownat -c 8000 1.0.0.2”。然后我尝试通过端口 8000 上的 webbrower localhost 从 C1 访问网页。但没有成功。

有人能帮我吗?有什么建议吗?如果您对我的问题有任何疑问,请提出!

答案1

对于简单的基于 Windows 的应用程序,您可以尝试鲣鱼汤

有关 NAT 到 NAT 连接 udp/tcp 的更高级解决方案,请查看普纳特

答案2

解决了……UDP 打洞技术奏效了!这是一个实施错误!

答案3

尝试以下任一方法:

  1. 设置 DSL 网关,将特定端口上收到的 UDP 数据包直接转发到相关主机

  2. 在内部节点上设置 IPv6 隧道,然后你就可以直接通信

相关内容