小白如何优雅的使用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.25510.0.0.0/8约1677万个大型企业内网 云服务商内网 NAT VPS常用
B类私有地址172.16.0.0 - 172.31.255.255172.16.0.0/12约104万个中型企业网络 Docker默认网络
C类私有地址192.168.0.0 - 192.168.255.255192.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站

  1. 电脑(192.168.1.100)发出请求:“我要访问google”
  2. 路由器收到,用自己的公网IP(11.4.51.4)转发出去
  3. google 服务器回复数据到 11.4.51.4
  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:30001192.168.0.2:22 (SSH登录)
  • 1.2.3.4:30002192.168.0.2:80 (网站)
  • 1.2.3.4:30003192.168.0.2:443 (HTTPS)
  • 1.2.3.4:30004192.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

  • :cross_mark: 错误:http://192.168.0.2:8080 (内网IP,外网访问不到)
  • :white_check_mark: 正确: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:

  • :white_check_mark: 需要:商家没提供DDNS,且公网IP会变化
  • :cross_mark: 不需要:商家提供了DDNS域名,或公网IP固定

购买厂商服务器前,确认NAT机器给几个端口,比如常见的有

Unlimited IPv4 NAT Port //不限制端口数,可以按需要自己进行映射,用多少映射多少
计算型端口映射 //商家已经提前帮你映射好了,购买后可直接使用,部署服务记得部署到对应的端口上
20 IPv4 NAT Ports //商家只给20个端口

端口映射的注意事项

购买后按照商家的说明去映射端口即可,一般而言,建议内外服务端口保持一致,即公网IP:40001 → 内网IP:40001,不然有些服务容易出bug。

为什么建议端口一致?

  • 有些应用硬编码了端口号,内外不一致会出问题
  • 配置文件更容易管理,不容易搞混
  • 排查问题时更方便,不用来回转换

什么时候端口不一致?

  • 当你的可用端口范围不包含服务默认端口时
  • 例如:你的端口是 30001-30100,但服务默认用 8080
  • 这时你可以映射 30004 → 8080,外网访问 公网IP:30004 即可

映射端口的基本步骤:

  1. 确认内网IP(邮件或面板查看)
  2. 确认要运行的服务需要什么端口
  3. 在面板添加映射规则:
    • 协议:TCP(大部分服务)或 UDP(游戏/语音)
    • 公网端口:从你的端口范围中选一个
    • 内网端口:服务实际监听的端口
  4. SSH登录测试连通性
  5. 部署服务并测试

3.NAT服务器实战使用

终于来到最喜欢的实操环节了,说一千道一万,不如做做实战看一看。

下面我会详细讲述我的思路和使用方法,并会用常见厂商作为例子,帮助小白使用。

nmcloud(牛马云)

首先来到NAT机购买页面

image

可以看到他们的政策是 Unlimited IPv4 NAT Port No IPv6 就是无限制端口数但无IPV6

购买后第一步,先要找找我的机器的内网ip是多少,不然没有办法映射。在购买邮件中,NMcloud发来了我的内网ip172.16.1.71和ssh密码

1759837097948

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

1759837449781

看到左下角有个DDNS,哎,这就是公网ip了,而且下方有个默认ip,就是内网ip,和邮件相同。

有些厂商面板和邮件的内网ip是不一样的,这种是面板/邮件有问题,都尝试映射一下即可。

现在有了公网ip和端口,我们现在找映射方法即可。面对一个陌生的服务商,最好的办法就是去看知识库和文档,我在公告中心里找到了这个

image

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

1759837576995

点击右边弹出框

1759837605199

点击 Domain Forwarding

image

点击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

首先来到购买页面

image

商家政策为:

20 IPv4 NAT Ports 1 /64 |de/tr /80 IPv6 Addresses

就是只有20个端口,但是有独立ipv6,有时候可以借助ipv6来获取ipv4,会玩也可以单独玩ipv6.

购买后第一步还是找内网ip,我们先看看邮件,商家发来了这个

1759838172263

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

image

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

1759838286838

我们点击查看公网ipv4

1759838407458

哇哦,商家已经帮我们映射好了,公网ip为nattr7.bytevirt.net,端口36001映射到了内网机器的22端口,此时我们执行

ssh -p36001 root@nattr7.bytevirt.net

即可登录机器。和牛马云不同,这个端口已经映射好了,如果你要部署服务,就可能要更改默认端口(有些服务端口默认是8080,但你只有36001~36020的端口,你就要改到你需要的端口上)。

sudavps

同样的来到购买页面

image

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

1759838639955

可以看到内网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

即可登录。 当然了,不想算的话可以用商家提供的工具,商家官网一般会有

image

喵云

来到NAT购买页面

image

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

image

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

image

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

image

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

image

image

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

image

ssh root@118.141.232.160 -p 44323

即可登录,有需要还请DDNS,不然动态ip真的很麻烦。

4.有哪些参考资料和想法?

看到这里,恭喜你已经完全掌握了NAT服务器的使用!:tada:

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