为什么需要NAT?
有些业务可能并不需要一个独立的IP(是的,在某些情况下,有点浪费钱),比如:
- 小A想要通过雨云服务器将寝室内网搭建的MC生存(对局域网开放)映射到公网,给远在他乡的小B一起玩
- 小C想要和朋友一起玩MC,奈何自己电脑CPU太垃圾了,于是到雨云购买了游戏云,恰好他会SRV技术(#后面会讲到),于是选择了NAT机
- 小D想开网站,但没有零花钱买国内独立IP,于是买了一个NAT机通过端口访问
你可以这么理解NAT:
- 每个服务器是独立的,雨云通过PVE开虚拟机给大家用,这就是:
- 如果是IP机,相当于雨云给每个虚拟机塞一个虚拟网卡,这个网卡映射到公网IP,所有端口服务直接到外网,比如假设服务器IP为
114.51.41.91
,内网有一个9810
的端口,在没有防火墙的情况下,外部通过114.51.41.91:9810
访问服务; - 如果是NAT机,相当于雨云给每个虚拟机同样塞一张网卡,虚拟机内部网络服务(
127.0.0.1
,localhost
)相对独立,只有在雨云控制台中明确这个服务的端口要对外网开放,才能从外网访问这个服务。比如公共IP是114.51.41.91
,内网的服务端口为25565
,那么9810->25565
就代表114.51.41.91:9810
指向了服务器内网中的127.0.0.1:25565
。
嗯,就是这样。NAT就是把内网服务映射到外网。
如何映射NAT
默认的远程连接
一般服务器都需要远程连接吧。Windows下使用RDP
,端口为3389
。Linux则使用SSH
,端口为22
。当然,你既然使用的是NAT,肯定不能直接使用公共IP进行远程连接。一般雨云控制台在服务器创建时就会自动帮你把远程连接的NAT映射好,除非你改了SSH监听的端口
以我的重庆服务器为例,这是控制台中的远程连接信息:
在右边可以看到相关的映射:
可以看到,我们的公共IP为183.66.27.22
。内网的ssh端口监听在0.0.0.0:22
(0.0.0.0
即允许任何IP监听),通过NAT功能,公共IP的53986
端口映射到了服务器的127.0.0.1:22
。我们可以通过这个信息连接:
ssh root@183.66.27.22 -p53986
和正常SSH一样。
网站、其他端口映射
先说明,通过NAT机开的网站,不支持1Panel/BT面板的HTTP验证生成SSL证书。
比如我现在已经在后台跑了一个Nginx服务,通过lsof -i:80
可以看到Nginx正在监听内部的80
端口:
通过curl http://localhost/
你可以看到默认的Nginx欢迎界面:
不过你并不能通过无端口公共IP访问这个界面,你应该添加一条NAT记录,想这样操作:
第一步:打开面板
点击这里的端口设置,会自动跳转:
第二步:新建规则
点击 + 新建规则 :
- 协议,一般HTTP类服务是
TCP
,MC的Java版本是TCP+UDP
,基岩版是UDP
- 内网端口,比如Nginx服务就是
80
- 外网端口,随便填,只要不跟其他人的重复就好(重复了会有提示)
- 标签,最好明显一些,免得NAT映射一多看不过来
示例:
第三步:测试
那么就可以通过183.66.27.22:53155
访问我们的Nginx了: