stun学习笔记

stun学习。

原理介绍

STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT 路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。

NAT类型

1.完全透明NAT(Full Cone NAT):

  从相同内部主机(IN IPX) +端口(IN PORTX)发送的数据MAPING为相同的IP(OUT IP X)和端口(OUT PORT X)发送带外网.并且从另一个服务器(Y),如果直连到MAPING的IP(OUT IP X)和端口(OUT PORT X )上,数据将会被转发到内部主机上. (IN IPX), (IN PORTX).

也就是说进内部网的数据包的SPORT,SPORT不受限制

2.受限NAT(Restricted Cone),

从相同内部主机(IN IPX) +端口(IN PORTX)发送的数据MAPING为相同的IP(X)和端口发送带外网.和完全NAT不同的是,只有当为X时,外部机器的的请求就被转发到主机(IN IPX) +端口(IN PORTX)。也就是说进内部网的数据包的,SPORT不受限制,SIP受限制,只能为NAT MAP数据的IP

3,端口受限NAT(Port Restricted Cone)

 和受限NAT不同的是,只有当外部主动请求的的源IP和端口,等于内部网发送的请求的目的IP和端口。

4.对称NAT(symmetric NAT)

 如果发送的包的目的IP AND PORT,那么MAPPING IP AND PORT,将相同。内部网同一台机器,同一个端口如果目的地址不同,那么MAPPING的端口也不同,所以只有他主动连的服务器才可能知道他的MAPPING后端口,别的服务器如果想连他只能靠猜测端口。

总结:前面3种NAT,MAPING PORT和IP,是根据发送包的的内部网的IP和端口决定的。如果数据的内网IP和端口相同,那么MAPPING后的端口和地址是固定。这个功能为我们的穿越提供了很好条件。

第4种NAT,打洞后的MAPPING 地址和端口将变地不可靠。很难穿越。注意SERVERA,和SERVERB是两个公网地址,而不是两台机器.

STUN服务器

免费 STUN服务器列表
NO. STUN服务器 端口 有效 测试日期
1 stun.xten.com 3478 2017/08/14
2 stun.voipbuster.com 3478 2017/08/14
3 stun.voxgratia.org 3478 2017/08/14
4 stun.sipgate.net 10000 2017/08/14
5 stun.ekiga.net 3478 2017/08/14
6 stun.ideasip.com 3478 2017/08/14
7 stun.schlund.de 3478 2017/08/14
8 stun.voiparound.com 3478 2017/08/14
9 stun.voipbuster.com 3478 2017/08/14
10 stun.voipstunt.com 3478 2017/08/14
11 numb.viagenie.ca 3478 2017/08/14
12 stun.counterpath.com 3478 2017/08/14
13 stun.1und1.de 3478 2017/08/14
14 stun.gmx.net 3478 2017/08/14
16 stun.callwithus.com 3478 2017/08/14
17 stun.counterpath.net 3478 2017/08/14
18 stun.internetcalls.com 3478 2017/08/14
19 stun.voip.aebc.com 3478 2017/08/14
20 numb.viagenie.ca 3478 2017/08/14

more
stun.stunprotocol.org 3478

实验

stun客户端:

安装客户端:

1
sudo apt install stun-client

测试STUN服务器是否能正确返回外网的IP及端口号:

1
2
3
4
stun stun.xten.com
STUN client version 0.97
Primary: Dependent Mapping, random port, no hairpin
Return value is 0x000018

结果:不行。Primary那行的意思?

http://www.stunprotocol.org/
下载windows编译好的二进制。
解压,在cmd命令行下执行:

1
2
3
4
stunclient stun.stunprotocol.org  3478
Binding test: success
Local address: 192.168.31.225:51973
Mapped address: 180.139.209.204:24219
1
2
3
4
stunclient stun.xten.com 3478
Binding test: success
Local address: 192.168.31.225:65519
Mapped address: 180.139.209.204:21957