分类
未分类

NAT的部分讲解

开始前,请确认您有足够的能力理解下面的文字,谢谢。

这篇文章是为了部分网络环境可能可以使用xtcp或nat穿透的基础用户或小白用户而编写的,,有错在下方评论区指出,谢绝抬杠。

关于NAT1234的讲解

以下我们假设访问mc服务器的这位用户191.98.101.145:1400是symmetric NAT类型。由于国内大环境,通常都是这种对称型的nat。

最宽松的nat1模型:Full Cone NAT(完全锥形)

这个算是最宽松的模型之一了,我们来举个例子,假如小明的电脑的内网IP是192.168.10.2,它的上级网关所拥有公网的ip为114.51.41.91,然后小明这时候使用192.168.10.2的54088端口向外通信,那么这时候上级网关收到了192.168.10.2:54088的出网流量请求,将114.51.41.91:9810这个地址:端口向外暴露并将任何向这个端口发送的流量全部转发到192.168.10.2:54088上。

这时小明想要访问www.natfrp.com,他向网关发送访问www.natfrp.com的请求,随即网关通过114.51.41.191:9810这个地址:端口向www.natfrp.com:80转发了小明的握手请求,握手完成,很愉快啊,www.natfrp.com:80回复了一个301,让他用https协议访问。这就是一次连接的全过程。

如果小明想要使用xtcp这种方式做mc服务器的转发呢?

小明此时向网关通过upnp协议发送了”开服”请求,网关此时收到请求直接把25565打开,问题就迎刃而解了。但问题在于很多网关是为了安全默认禁用了upnp协议的,也就是说,小明无法直接告诉网关把25565给我开开,那这个时候就需要别的方式了。

我们以sakurafrp为例,Sakura提供了一个节点,小明在本地用frpc通过54088端口访问了Sakura的节点-枣庄7(举个例子),枣庄7这时很高兴,因为小明的nat类型是full cone类型,也就是说只要枣庄7和小明建立了连接,其他的假如191.98.101.145:1400想要访问小明的mc服务器,只需要先找枣庄7问问小明的mc服务器怎么去就行了,然后他就会向frpc访问枣庄7时网关给它开放的那个ip+端口,此时流量是不经过枣庄7的,流量直接在114.51.41.91:9810和191.98.101.145:1400传输,它们两个也直接建立起了连接,枣庄7此时也可以不与frpc通信了

但问题来了,191.98.101.145:1400连接的所谓mc服务器是frpc的端口啊,frpc又不是mc服务器?这时候就轮到frpc出场了,frpc把191.98.101.145:1400连接到frpc的流量全部转发给了mc服务器,因为在本地转发,走的环回网卡,所以延迟几乎为0,基本等同于直接连接到mc服务器上了。

较宽松的nat2模型:Restricted Cone NAT(受限锥形nat)

nat打洞的实现方法:

和上面的模型差不多,但是有一个问题,它这种nat只允许上面枣庄7与frpc的通信,此时191.98.101.145:1400没法直接连接了,这个时候就稍微有点难搞了,因为网关发现这191.98.101.145:1400不是枣庄7,那它想连接就得受点限制了。

但也有一个办法,因为191.98.101.145:1400和小明的网关都连接到了枣庄7,然后枣庄7这时候直接把他俩的ip一交换,同时给对方发一个udp包,因为nat知道小明还是用这个端口,所以他会老老实实的用9810端口给191.98.101.145:1400发udp包,这时因为是同时发送的,nat又在9810收到了191.98.101.145:1400给它发来的udp,一看,啊,有回复,就建立了一个通道来连接。,这时候建立起了191.98.101.145:1400与114.51.41.91:9810的连接,然后就可以愉快的用tcp协议加入mc服务器了。

比较严格的nat3:Port Restricted Cone NAT(端口受限锥形nat)

假设小明的frpc使用114.51.41.91:9810向枣庄7通信,那么这个时候nat就只会允许枣庄7:7001到114.51.41.91:9810的连接,哪怕枣庄7换个7000的端口都不行,这下端口受限锥形NAT就完全无法和Symmetric NAT的191.98.101.145通信了,这时候就得按照双方都是对称型的nat来了

最严格的NAT4:Symmetric NAT(对称型nat)

这玩意和上面的nat3差不多,都是ip:port-ip:port的关系,区别就在于这玩意你新建立一个连接他照样换端口,不多说,因为3和4打洞成功的概率极低,4和4打洞成功概率也极低。

端口猜测需要看nat型号,如果很不幸,这个网关分配的nat端口是乱来的,那几乎就无法建立任何连接。

关于有的ipv6地址也无法互相建立连接:

我们需要注意的一点,v6仍然没有抛弃网关这个东西,也就是说虽然两台机器都有了v6的全球唯一的公网ip,但仍然需要这两台机器的上级网关允许放行,这才能够连接。

一般来讲,跨运营商是不太允许这种连接的,由于网际互连的v6建设还在进行中,带宽不是特别大,流量小的比如远程桌面这样的一般也就放过了,量大的比如bt这种是可能会被掐掉的。

mc服务器也算少量流量,一般也就给你放了。