udp通过NAT

我有两个私人networking(每个都在一个典型的DSL路由器后面)。 路由器连接到WWW。 每个路由器的外部接口都有一个dynamic的IP地址。 我想通过UDP直接在专用networkingA中的一个客户端和专用networkingB中的一个客户端之间stream式传输数据。

我已经尝试了很多东西(请参阅: 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网关 – >没有工作。

然后我使用VMWarebuild立一个完整的虚拟环境。

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提供NATfunction。 (他们启用了路由并提供了一个防火墙,允许从内部networking进行交通并提供natfunction)服务器S3启用了路由。 客户端防火墙已closures。

C1和C2能够ping C3,例如访问C3的web服务器。 他们也能够发送UDP数据包到C3(C3成功接收它们)!

由于testing原因,C1和C2也有networking服务器运行。

我在C1上运行“”chownat -s 80 2.0.0.2“”,在C2上运行“”chownat -c 8000 1.0.0.2“”。 然后我尝试通过端口8000上的webbrower localhost从C1访问网页。它不起作用。

有谁能够帮助我? 有什么build议么? 如果您对我的问题有任何疑问,请询问!

对于一个简单的基于Windows的应用程序,你可以尝试Logmein Hamachi 。

对于更高级的NAT转NAT连接的解决方法udp / tcp请看pwnat 。

解决了… UDP孔打孔技术的工作! 这是一个执行错误!

尝试以下任一方法

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

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