小白如何优雅的使用NAT机器?
在选购服务器的时候,大家往往会发现NAT服务器会比拥有独立IP的服务器便宜很多,尤其是在家宽ip服务器上表现更加明显,甚至价格不到独立ip服务器的1/10.但是对于小白来说,弄明白独立ip服务器已经够头疼了,对于NAT更是无从下手,对于NAT的玩法完全不明白,本文就是来解答NAT服务器的相关性质和具体实践玩法,让小白看完一文彻底玩明白NAT服务器。
本文所有推荐都是我的使用后的主观感受,是否适用还请自行判断
下面文章分为多个章节,每个章节回答的问题为:
- 什么是NAT服务器,和平时我们说的普通服务器有何区别(独立ip)?
- NAT服务器的大致使用流程?
- 常见NAT服务器的操作实践例子
- 有哪些参考资料和想法?
本文为科普文,面向小白,所有涉及的陌生概念会详细,无需任何其他文章辅助即可食用。
不特殊说明,默认为ipv4
1.NAT服务器的概念
讲解NAT前,先来介绍一下什么是普通服务器(独立ip)?
云服务器都对应一台物理机。物理机本身无法被互联网访问,因为网络中无法确定它的位置。 但当我们给这台物理机********分配一个公网IPv4地址********时,全世界的人都能通过这个IP访问它。互联网上的数据包都能通过这个ipv4找到这台物理服务器。
比如:
你买了一台日本机房的服务器,服务商给你分配公网IP:11.4.51.4 ,这个IP直接绑定在服务器上,任何人在互联网上访问 11.4.51.4,数据包就能直达你的服务器。
但是你会发现我们光靠一个ipv4无法完成很多我们日常需要的任务,比如说你想在服务器同时运行两个服务,那其他人访问这个ipv4的时候,怎么知道访问的是哪个服务?这就涉及到另一个概念:端口。可以给不同的服务分配不同的端口用于标识不同的服务。比如 服务A用了443端口,服务B用了8080端口,这样其他人想使用A服务就可以访问 11.4.51.4:443,想使用B就访问11.4.51.4:8080.
TCP/IP协议规定,每个IPv4有 ***65536个端口*****(0-65535):
| 端口范围 | 名称 | 用途 | 举例 |
|---|---|---|---|
| 0-1023 | 系统保留端口 | 常见服务专用 | 80(HTTP), 443(HTTPS), 22(SSH) |
| 1024-49151 | 注册端口 | 应用程序使用 | 3306(MySQL), 8080(备用HTTP) |
| 49152-65535 | 动态端口 | 临时随机分配 | 浏览器访问网站时随机使用 |
至此,你已经可以通过公网ip:端口来访问任何一个具有公网ip的服务器上运行的服务了。
现在,你已经理解了独立IP服务器的工作原理:
- 服务器拥有独立的公网IP:11.4.51.4
- 65536个端口完全由你支配
- 全世界任何人都能通过 IP:端口 访问你的服务
但是!有没有办法让多台服务器共用一个公网IP呢?
这就要引入另一个概念:内网IP
内网IP(也叫私有IP、局域网IP),它只在局部网络内有效,就像是”内部员工编号”,外面的人看不到也访问不到。
前面提到的11.4.51.4则是公网IP。
公网IP = L站的办公地址”日本东京下北泽114街514号”
- 任何人都能通过这个地址找到公司
- 全球唯一,不会重复
内网IP = 员工工位号”114楼-5区-14号工位”
- 只有公司内部人知道
- 其他公司也可能有”114楼-5区-14号工位”,不冲突
- 外面的人无法直接找到这个工位
国际互联网组织(IANA)规定了三个私有IP地址段,专门用于内网,这些IP在公网上是不会出现的:
| IP段 | 范围 | CIDR表示 | 可用IP数量 | 常见用途 |
|---|---|---|---|---|
| A类私有地址 | 10.0.0.0 - 10.255.255.255 | 10.0.0.0/8 | 约1677万个 | 大型企业内网 云服务商内网 NAT VPS常用 |
| B类私有地址 | 172.16.0.0 - 172.31.255.255 | 172.16.0.0/12 | 约104万个 | 中型企业网络 Docker默认网络 |
| C类私有地址 | 192.168.0.0 - 192.168.255.255 | 192.168.0.0/16 | 约6.5万个 | 家庭路由器 |
关于公网ip&内网ip,再举个例子
【你家路由器】 ├─ 公网IP: 11.4.51.4 (电信给你的,全球唯一) └─ 内网IP段: 192.168.1.0/24 ├─ 路由器自己: 192.168.1.1 (网关) ├─ 你的电脑: 192.168.1.100 ├─ 你的手机: 192.168.1.101 ├─ 你的iPad: 192.168.1.102 └─ 你的杯子: 192.168.1.103
你要访问L站
- 电脑(192.168.1.100)发出请求:“我要访问google”
- 路由器收到,用自己的公网IP(11.4.51.4)转发出去
- google 服务器回复数据到 11.4.51.4
- 路由器记得是192.168.1.100发的请求,转发回你的电脑
这就是内网ip和公网ip的转换,多个处于内网的设备可以通过同一个公网ip来访问全世界。
既然路由器可以转发多个内网设备的流量,使之通过一个公网ip来访问网络,那么这些内网设备能不能是服务器呢?
恭喜你,你已经理解了NAT的核心原理!
接下来,让我们详细看看NAT服务器到底是怎么工作的。
在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。NAT是将IP数据包包头中的IP地址转换为另一个IP地址的协议。当IP数据包通过路由器或者安全网关时,路由器或者安全网关会把IP数据包的源IP地址和/或者目的IP地址进行转换。
说白了就是,NAT的核心将一个公网ip地址映射给多个内网机器,让多个内网机器可以共用一个IPV4出口。
NAT机器有显而易见的好处:便宜。因为你用的是共享IPV4出口,不必独自一人承担整个ip的价格,尤其是昂贵的家宽机器,动辄30刀/月的家宽ip,如果变成NAT,让10个人来使用,那么价格一下就变成了3刀/月,瞬间便宜。
当然了,NAT机因为共享ip出口,所以很容易就变成滥用ip,各种滥用报告满天飞。
举个例子:假设我有个AT&T的公网IP 1.2.3.4,成本是30刀/月。
现在我开20台NAT服务器,给第一台用户(192.168.0.2)分配端口段 30001-30100:
端口映射示例:
1.2.3.4:30001→192.168.0.2:22(SSH登录)1.2.3.4:30002→192.168.0.2:80(网站)1.2.3.4:30003→192.168.0.2:443(HTTPS)1.2.3.4:30004→192.168.0.2:8080(EMBY)- … 还有 30005-30100 可用(共100个端口)
此时,我想SSH登录就用 ssh [email protected] -p 30001 即可。
如果用户需要在8080端口托管服务,就将 1.2.3.4:30004 映射到 192.168.0.2:8080:
错误:http://192.168.0.2:8080(内网IP,外网访问不到)
正确:http://1.2.3.4:30004(公网IP + 映射端口,访问成功)
一个公网ip的65536个端口不可能全被用完,平均分给每个内网机器100个端口都绰绰有余,这也是NAT技术广泛应用的原因。
NAT服务器 vs 独立IP服务器
| 特性 | 独立IP服务器 | NAT服务器 |
|---|---|---|
| 公网IP | 独享 | 多人共享一个(10人以上) |
| 端口数量 | 65536 | 分配 10-100 或按需分配 |
| 价格 | 30刀/月 | 3刀/月 |
| IP被墙/滥用 | 独立,只和你有关 | 共担,一人违规全体受影响 |
| 建站 | 方便 | 困难(需要非标端口) |
| 适用场景 | 正经业务 | 学习、轻量使用 |
2.NAT服务器使用大致流程和思路
既然已经知道了NAT机器和独立ip机器的区别,那么使用也很容易可以理解了。
购买NAT服务器 → 获取内网IP → 获取公网IP/域名 → 添加端口映射 → SSH登录测试 → 部署服务 → 配置DDNS(可选) → 正常使用
DDNS技术:Dynamic DNS(动态域名解析)- 当你的公网IP变化时,自动更新域名指向新IP,就不用我们每次更新后上来看新ip是多少再修改服务。有些厂商会提供DDNS,有些厂商不会。
判断你是否需要DDNS:
需要:商家没提供DDNS,且公网IP会变化
不需要:商家提供了DDNS域名,或公网IP固定
购买厂商服务器前,确认NAT机器给几个端口,比如常见的有
Unlimited IPv4 NAT Port //不限制端口数,可以按需要自己进行映射,用多少映射多少
计算型端口映射 //商家已经提前帮你映射好了,购买后可直接使用,部署服务记得部署到对应的端口上
20 IPv4 NAT Ports //商家只给20个端口
端口映射的注意事项
购买后按照商家的说明去映射端口即可,一般而言,建议内外服务端口保持一致,即公网IP:40001 → 内网IP:40001,不然有些服务容易出bug。
为什么建议端口一致?
- 有些应用硬编码了端口号,内外不一致会出问题
- 配置文件更容易管理,不容易搞混
- 排查问题时更方便,不用来回转换
什么时候端口不一致?
- 当你的可用端口范围不包含服务默认端口时
- 例如:你的端口是 30001-30100,但服务默认用 8080
- 这时你可以映射
30004 → 8080,外网访问公网IP:30004即可
映射端口的基本步骤:
- 确认内网IP(邮件或面板查看)
- 确认要运行的服务需要什么端口
- 在面板添加映射规则:
- 协议:TCP(大部分服务)或 UDP(游戏/语音)
- 公网端口:从你的端口范围中选一个
- 内网端口:服务实际监听的端口
- SSH登录测试连通性
- 部署服务并测试
3.NAT服务器实战使用
终于来到最喜欢的实操环节了,说一千道一万,不如做做实战看一看。
下面我会详细讲述我的思路和使用方法,并会用常见厂商作为例子,帮助小白使用。
nmcloud(牛马云)
首先来到NAT机购买页面

可以看到他们的政策是 Unlimited IPv4 NAT Port No IPv6 就是无限制端口数但无IPV6
购买后第一步,先要找找我的机器的内网ip是多少,不然没有办法映射。在购买邮件中,NMcloud发来了我的内网ip172.16.1.71和ssh密码

接下来下一步就是找公网ip和映射方法,我在邮件中没有看到公网ip 那我们就打开产品服务中的产品面板

看到左下角有个DDNS,哎,这就是公网ip了,而且下方有个默认ip,就是内网ip,和邮件相同。
有些厂商面板和邮件的内网ip是不一样的,这种是面板/邮件有问题,都尝试映射一下即可。
现在有了公网ip和端口,我们现在找映射方法即可。面对一个陌生的服务商,最好的办法就是去看知识库和文档,我在公告中心里找到了这个

点进去看了一下,发现是手动映射的,那么我们按照操作方法一步步做即可。

点击右边弹出框

点击 Domain Forwarding

点击ADD,并选择TCP协议,然后输入你要用的端口即可,比如一个ssh端口,让公网的30001映射到内网机器的22端口用于ssh,点击add,完成!
注意:转发的协议一般都是TCP的,有些会提供UDP,有些可以选择TCP&UDP转发,有时候你的应用连不上可能是因为你的应用要UDP,而你转发了TCP,自然不通。 ssh也不一定是22端口,默认是22,你可以改称43233,映射的时候记得也映射到43233.
//已经有了公网ip+公网端口+内网ip+内网端口,直接ssh即可
ssh root@hinet.xxxx.xyz -p 30001
//如果需要其他服务,端口映射也是同理
bytevirt
首先来到购买页面

商家政策为:
20 IPv4 NAT Ports 1 /64 |de/tr /80 IPv6 Addresses
就是只有20个端口,但是有独立ipv6,有时候可以借助ipv6来获取ipv4,会玩也可以单独玩ipv6.
购买后第一步还是找内网ip,我们先看看邮件,商家发来了这个

可以看到我的内网ip为172.16.59.73,现在我们去找公网ip,点击商家的链接

这就尴尬了,好像是无效的页面,没关系,我们还是点开面板

我们点击查看公网ipv4

哇哦,商家已经帮我们映射好了,公网ip为nattr7.bytevirt.net,端口36001映射到了内网机器的22端口,此时我们执行
ssh -p36001 root@nattr7.bytevirt.net
即可登录机器。和牛马云不同,这个端口已经映射好了,如果你要部署服务,就可能要更改默认端口(有些服务端口默认是8080,但你只有36001~36020的端口,你就要改到你需要的端口上)。
sudavps
同样的来到购买页面

商家政策是 计算型端口映射(映射规则详见群组和帮助中心) 那就是根据内网ip自动计算映射好的端口。 购买后查看商家发来的邮件

可以看到内网ip为10.10.18.55,公网ip为hkt-ty-line-1.sudatech.store,端口映射规则写在了下方
Use the port to calculate the mantissa of the intranet IP by yourself
SSH 10000 + intranet IP mantissa
Free port 20000+(Intranet IP mantissa*10)+0-9
like:
The internal IP is 10.0.0.14, the ssh port is 10014, and the free port is 20140-20149
The internal IP is 10.0.0.26, the ssh port is 10026, and the free port is 20260-20269
我们的内网ip是.55结尾,那么我们的ssh 端口就是10000+55=10055,自由端口即为20000+55*10+09 也就是2055020559端口。
那么我们就是可以用10个端口+ssh端口
ssh root:hkt-ty-line-1.sudatech.store -p 10055
即可登录。 当然了,不想算的话可以用商家提供的工具,商家官网一般会有

喵云
来到NAT购买页面

商家政策为 10个NAT转发规则 那就是10个端口,购买后打开商家邮件

看到内网ip为10.102.0.99,没写怎么映射和公网ip,那就先去面板看看

左上角有个转发面板,点进去看看

下方给了公网ip,但没给DDNS,意味着如果不部署DDNS每次更换ip后你都要上来改成新的ip才能使用,这很麻烦,好在商家给了教程,那我们先看看怎么映射


这里没要我们填写内网ip,可能是面板点击进去的时候就帮我填写好了,按我们就选择一个TCP+44323+22来进行ssh登录。

ssh root@118.141.232.160 -p 44323
即可登录,有需要还请DDNS,不然动态ip真的很麻烦。
4.有哪些参考资料和想法?
看到这里,恭喜你已经完全掌握了NAT服务器的使用!
NAT机器是很便宜的机器,不过我还是建议小白花钱买完整IPV4机器,NAT机器遇到的问题有很多,小白不一定能解决,不过你都看到这里了,算是NAT机器入门了,去玩吧少年,nat机器就是如此简单又容易。
常见问题
Q: 端口映射了,但连不上?
- 检查协议是否选对(TCP/UDP)
- 检查服务是否监听
0.0.0.0 - 检查防火墙是否放行端口
- 检查公网ip是否被墙
Q: 内外网端口必须一致吗?
- 不是必须,但强烈建议
- 有些应用硬编码了端口,不一致会出bug
Q: 能不能映射80/443端口?
- 大部分NAT不允许映射1024以下的端口
- 建站需要用非标端口(如8080、30002等)
Q: IP被墙了怎么办?
- 如果是NAT共享IP:联系商家,可能需要等商家换IP
- 所有共享这个IP的用户都会受影响
- 这是NAT的最大风险:邻居作死,全体连坐
NAT服务器是个好东西,但要用对场景。
参考资料: RFC 3022: Traditional IP Network Address Translator RFC 2663: IP Network Address Translator Terminology