起因是朋友买了一个迅雷玩客云,但是提示 NAT 类型有问题,导致诸多功能不好用。折腾一番后也进一步搜索了相关资料,深入了解一下。本文旨在用最通俗的语言解释清楚相关问题,在专业性方面可能有缺失。
使用 PS3/Xbox 朋友遇到无法联机或 NAT 类型显示为严格
也是类似原因。
什么是 NAT
首先我们得先理解 NAT 的概念。它全称是 Network Address Translation
即网络地址转换。使用 NAT 的原因很多,主要是 IPv4 地址资源枯竭,以及为了网络安全(也便于监管)。我们知道每一个能够上网的设备必然有一个 IP 地址,但是并不是所有设备都拥有「公网IP」。而 NAT 就是把内网 IP 映射成公网 IP,从而使设备可以访问互联网。
这里说
公网IP
并不规范。现在很多运营商已经不分配公网 IP 了。
听起来很高端的技术其实就在我们身边。一般常规的家庭网络拓扑是这样的:
入户光纤 → 猫 → 路由器 → 终端设备
运营商只给我们分配了一个 IP 地址,这个 IP 理所应当被路由器占用着。而我们许多终端设备拿到的是路由器分配的内网地址,一般类似 192.168.x.x
。显然这个内网地址是无法和互联网通讯的。因此我们需要 NAT 来建立内网 IP 与 公网 IP 的映射,这样当终端设备访问互联网,将数据交给路由器,然后路由器转交给服务器;服务器返回的数据交给路由器,路由器再根据映射传给终端就OK了。这个过程是 NAT。
什么是 UPnP
UPnP 是通用即插即用协议,英文 Universal Plug and Play
。在这里,其目的是更加方便地穿透 NAT。可以理解为有了 UPnP 软件可以根据需求让路由器进行动态地进行端口映射。而不是你去路由器后台一个个手动设置。
下面是我的 UPnP 列表:
可以看到根据请求,路由器自动地把 WAN 10960 端口映射到了 192.168.50.120:10960 上,其实这个是我们家的摄像头,这样就可以从外面直接看到画面了。
NAT 类型
下面是我们的重点了。NAT 是有许多类型的,不同的类型限制不同。而对于大部分的应用(例如 PS3/XBox 联机游戏)来说,限制越少越好。
NAT 有4个类型:
- NAT1: Full Cone NAT
- NAT2: Address-Restricted Cone NAT
- NAT3: Port-Restricted Cone NAT
- NAT4: Symmetric NAT
从 NAT1 至 NAT4 限制越来越多。一般来说 NAT1/2 可以畅通无阻地进行联机。
典型情况下:
- NAT1 可以与 NAT1/2/3 联机
- NAT2 可以与 NAT1/2 联机
- NAT3 只能与 NAT1 联机
- NAT4 洗洗睡吧
NAT1
Full Cone NAT 是限制最小的一种。它将一个内部地址(iAddr:port1)与外部地址(eAddr:port2)建立映射。所有来自 iAddr:port1
的包都由 eAddr:port2
向外发送。所有外部主机(hostAddr:any)都可以通过向 eAddr:port2
发送数据来到达 iAddr:port1
。(any
表示任意端口)
NAT2
相比1,NAT2 增加了地址限制。一个内部地址(iAddr:port1)与外部地址(eAddr:port2)建立映射。所有来自 iAddr:port1
的包都由 eAddr:port2
向外发送。但是只有曾经被 iAddr:port1
主动发送过包的外部主机(hostAddr:any)才可以通过向 eAddr:port2
发送数据来到达 iAddr:port1
。
也就是说即便知道了 IP 与端口号,外部主机也不可以主动发送数据。
NAT3
相比2,NAT3 又增加了端口限制。一个内部地址(iAddr:port1)与外部地址(eAddr:port2)建立映射。所有来自 iAddr:port1
的包都由 eAddr:port2
向外发送。但是只有曾经被 iAddr:port1
主动发送过包的外部主机(hostAddr:port3)才可以通过向 eAddr:port2
发送数据来到达 iAddr:port1
。
注意哦,这里外部主机不仅地址,而且端口号也必须匹配才可以。
NAT4
内部地址每一次请求一个特定的外部地址,都可能会绑定到一个新的端口号。也就是请求不同的外部地址映射的端口号是可能不同的。
这种类型基本上就告别 P2P 了。
提升 NAT 类型
由于种种需求,我们往往希望获得至少 NAT2 的类型。提升 NAT 类型是一个非常复杂的问题,因为相关因素实在太多了。
首先给大家一个 NAT 类型测试工具。
一般来说,我们希望 NAT 层数越少越好。每多一层 NAT 就意味着更加复杂的情况与配置。依旧是典型的网络拓扑:
入户光纤① → 猫② → 路由器③ → 终端设备
我们目标是把 NAT 降到1层(只有③),当然这是目标,但不是必须的。
拿到公网 IP
公网 IP
指的是全球可路由的地址。也就是说在全球任意地方只要接入互联网就可以访问到。
拥有公网 IP 对于 P2P 应用来说绝对是一个基础要求,这可以省掉许多麻烦(使①不发生 NAT)。如何确定自己是不是公网 IP 也很简单。访问这里你可以得到一个 IP 地址,把它与路由器中显示的 WAN 口 IP 进行比较,如果一致那么就是公网 IP 了。
如果不一致,那么只能联系运营商,自己是没有办法的。一般来说一级运营商(电信/联通)比较容易,而一些二级甚至三级运营商(长城)就没什么希望了。如果拿不到公网 IP,只能期望运营商不要把 NAT 类型限制太死吧。
猫改为桥接模式
区分猫和路由器
猫
是调制解调器,仅仅负责将数字信号与电/光信号互相转换,功能单一。路由器
可以扩展多个接口、进行组网以及相关配置,功能强大。无线路由器可以建立 WiFi 热点。
区分桥接与路由模式
现在原来越多的猫“越权管理”,增加了路由功能,也就是说猫和路由器一体化了。每一个路由器可以理解为一层网络,我们不希望层数过多。同时猫的路由功能往往不完善,难以进行高级配置。而桥接模式就是让猫回归本质,只负责信号转换。
区分路由与桥接模式最方便的办法是:如果你的路由器(电脑)直接连到猫上就可以上网,那么是路由模式;如果路由器需要配置 PPPoE 拨号那么就是桥接模式。
更改模式
一般来说更改模式需要猫的超级密码,这个用户是没有的。请联系运营商客服请求修改。改为桥接后②也不会发生 NAT 了。
警告:没能力折腾的不建议自己破解改。更改桥接模式之后记得重新配置路由器,输入宽带账号密码才可以正常上网。
更改路由器设置
首先要修改 NAT 类型,并不是所有的路由器或者路由器系统都支持这一设置。很幸运我的华硕路由器支持。打开 NAT 并将类型设置为最宽松的 NAT1(Fullcone)。
接着启用 UPnP,绝大部分路由器都支持的,耐心找一找。如果真的不支持那我建议换路由器。
如果不支持上述的 NAT 类型设置,我们还有一个大招。大部分的路由器都支持 DMZ (非军事化区),DMZ 指定的设备完全暴露在公网上。但是一个网络一般只能够设置1个 DMZ,显然如果设置多个路由器就不知道应该把数据包交给谁了。由于 DMZ 是和 IP 绑定的,而 IP 是动态分配的。所有首先我们将 IP 与 MAC 绑定(不同的路由器设置不同),然后将此 IP 设置为 DMZ 即可。
更改系统设置
最后如果你的系统启用了防火墙那么记得将需要的程序添加例外,或者关闭防火墙(不推荐)。最后进行测试,我已经提升到 NAT1 啦~