使用STUN打孔

时间:2015-07-29 13:39:32

标签: udp p2p nat stun hole-punching

我目前正在尝试通过互联网发送UDP消息,并且必须为端点A和B(它们都在NAT后面)设置防火墙。为此,我想使用STUN服务器进行打孔。

当A向STUN服务器创建请求时(例如,private:85.1.1.12:6000和public:173.194.78.127:19302),我得到85.1.1.12:6000作为响应。如果我要将来自相同原始配置(用于STUN请求的相同源IP和端口)的数据包发送到任何其他目标地址(目标端口保持不变),那么我的NAT将再次更改公共端口(从6000到其他任何事情)。我通过对两个不同的STUN服务器请求使用相同的地址端口配置(对两个请求都使用端口19302)找到了。

像这样,在向B发送数据包时,我无法知道我的NAT对转换的端口是什么(B因为没有设置防火墙而无法接收任何内容)。

这是因为我的NAT类型与打孔不兼容,还是我的概念错了?

谢谢!

2 个答案:

答案 0 :(得分:4)

85.1.1.12:6000不是您的私人IP地址。它是您的NAT的公共/外部IP:端口。专用IP是您的PC /设备的接口地址。

从你的场景中我猜你有一个对称的NAT。在对称NAT中,每次将某些数据包发送到其他目标时,NAT的公共端口都会更改。如果您的目的地保持不变,那么NAT的公共IP:端口也保持不变。

对于其他类型的NAT,如果您的私有IP没有更改,那么您发送数据包的位置无关紧要,您的NAT公共IP:端口(在您的情况下为85.1.1.12:6000)将保持不变。

如果一方有**对称NAT而另一方有对称/ PRC NAT,则无法进行打孔。

**通过对称NAT我指的是对称NAT,它提供随机端口分配。

答案 1 :(得分:0)

如果双方都有对称的NAT(虽然遍历过程可能太不可靠而不值得麻烦),但从技术上讲, 。请阅读我的论文:

https://drive.google.com/file/d/0B1IimJ20gG0SY2NvaE4wRVVMbG8/view?usp=sharing

或者它引用的一篇论文:

  1. http://tools.ietf.org/id/draft-takeda-symmetric-nat-traversal-00.txt

  2. https://www.goto.info.waseda.ac.jp/~wei/file/wei-apan-v10.pdf

  3. http://journals.sfu.ca/apan/index.php/apan/article/view/75/pdf_31