首先文章建议Cone NAPT还有希望,要是Symmetri NAPT就别想了,接着介绍了两种基本情况,一是一台网络人远程控制软件内网穿透机器连接外网通信的情况,二是两台网络人远程控制软件内网穿透之间互联的情况。
第一种,只需要网络人远程控制软件内网穿透主动发起连接就可以了。网络人远程控制软件内网穿透机器A(192.168.1.x:4000)要求连接外网服务端S(60.17.211.x:5000),发出连接请求后被A网所在网关NA(10.11.12.x)获取,NA将A的地址转变为其自身地址,并分配临时端口(6000)用作通讯,于是,当初的A->S就变成现在的A->NA->S。那么S接到请求后看到的并不是A的地址,而是NA的IP和Port,此时S如果照着此地址回复,则NA收到,因为NA此时有通讯临时Session被创建了,所以在一定时间内(貌似根据不同硬件、软件设备而不同)还记得发到6000的信息要转给A,NA就会转发给A。至此,通讯成功。
第二种,两个网络人远程控制软件内网穿透之间就要复杂一些,有一个图很好,我转载了一下,特别声明,
这个图很清晰,做个简单备注就可以了。
首先,两个网络人远程控制软件内网穿透A和B谁都不能直接连谁,所以第一次,都是给S发送登录、心跳之类的,目的是表明自己的存在,并建立session,当然,这个过程还是通过自身网络的N实现的。那么,如何做到UDP穿透呢?
1.假设左边的为A(192.168.1.77:8000),A->NA(211.133.*:6000)->S,此时,S记住了A的存在,NA也与A建立了对应关系(发到6000的信息就是A的),一样道理,B也与S建立了连接。
2. A通过S知道了B的存在(只是知道存在),A想连B,于是A告诉S,“让B探测我一下”
3. S把A的要求发给B,于是B发送“探测”包给A,事实上就是B->NB->NA,但是因为NA不认识NB(之前没联系过),所以NA就不会转发给A,随之丢弃。但是NB上已经建立起了目的是NA的session,这是后面网络人远程控制软件网络人远程控制软件内网穿透穿透成功的关键一步。
4. B发送探测给A之后,因为NA必定丢弃,所以B向S发送“反馈包”,就是图中的步骤4,目的是告诉S已经发送过探测包给A了。这一步的目的是,借S之手告诉A,我已经联系过你了,我已经有了关于你的session。
5. S通知A:“人家B已经联系过你了”。
6. A知道之后,发送数据包给B,也就是A->NA->NB->B。当NA->NB时,因为NB存有当初链接NA的信息,所以NB认为它自己认识NA,会接受NA发送的信息,转发给B,至此,理论上,网络人远程控制软件网络人远程控制软件内网穿透穿透完成。AB之间可以互通了。还未经过自己试验,不知道对不对。
图中右上角步骤2中的文字“...给NAT211.134.*”应该是错误的,正确的应该是“211.133.*”,因为是S让B去连接A,而A的地址是211.133.*,另外还有几点疑惑和说明的地方
1. “信息不请自来,NAT安全起见,是会被丢弃的”——A->NA->S时,NA接到请求会创建session,分配某端口如6000对应A,目的是接到发到6000端口上的信息就知道转发给A,但只会接受当初A所请求的远程主机S所发过来的信息才会转发给A,其它地址则会丢弃。这也是为什么两个网络人远程控制软件内网穿透不能直接互发的原因,举个例子就是洞还没打,外界发过来的信息,也会被看门人NA给扔掉,因NA那有一个记录表,A曾经要求连接S,这条记录就会有关于S的信息,比如另一台S2发过来同样的6000端口信息,由于NA没有记录不认识S2,是会丢弃不会转发的。