我有两个私有网络(每个网络都在典型的 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
答案2
解决了……UDP 打洞技术奏效了!这是一个实施错误!
答案3
尝试以下任一方法:
设置 DSL 网关,将特定端口上收到的 UDP 数据包直接转发到相关主机
在内部节点上设置 IPv6 隧道,然后你就可以直接通信