网络里天天有人把公网、私网、内网、外网这几个词混着用,聊着聊着就吵起来了,其实很多时候大家说的根本不是一回事。我自己做运维和组网这些年,被问得最多的就是“我家宽带到底有没有公网IP”“easytier组网是不是必须有公网”“内网穿透和端口映射到底差在哪”。这些问题看着零散,根子上都是同一件事:没把这几组概念的地基打牢。这篇就把公网、私网、内网、外网、NAT这几个词彻底掰开揉碎,从地址规划讲到家庭宽带、内网穿透、组网选型,尽量让刚入门的朋友也能一遍看懂,老手也能顺手捡几个排查技巧。
1. 先把四个词的地基打牢
1.1 公网和私网:说的是IP地址的“户口性质”
公网和私网,描述的是一个IP地址本身的属性,跟你在哪用、怎么用没关系,纯粹看这个地址段是不是被全球统一分配、能不能在互联网上被直接路由。
公网IP,也叫全局IP,是由国际互联网号码分配机构统一规划、再由各地区机构逐级下发给运营商和大型机构的地址。它的特点是全球唯一,任何一个公网IP在世界范围内不会重复。你拿着一个公网IP,理论上从地球上任何一台能上网的设备都能直接访问到它,中间不需要做地址转换。
私网IP就不一样了。它是一批被专门保留出来、不允许在公网骨干上路由的地址段。RFC 1918 定义了三个经典私网段:
| 地址段 | 掩码 | 可用地址数量 | 常见用途 |
|---|---|---|---|
| 10.0.0.0 | 255.0.0.0 | 约1677万 | 大型企业、云内网 |
| 172.16.0.0 | 255.240.0.0 | 约104万 | 中型网络、容器网络 |
| 192.168.0.0 | 255.255.0.0 | 约6.5万 | 家庭、小型办公 |
除了这三个,还有 169.254.0.0/16 这种链路本地地址,以及 127.0.0.0/8 环回地址,它们也都不属于公网。私网地址的核心价值在于复用:全世界无数个家庭和小公司都在用 192.168.1.0/24 这一模一样的网段,彼此井水不犯河水,因为大家的私网包根本不会直接跑到公网上。
这里有个特别容易踩的坑:很多人以为“192.168 开头就是内网,其他都是公网”。实际上 100.64.0.0/10 这个段(运营商级NAT常用)、还有 198.18.0.0/15 这类保留段,既不是标准私网也不是公网,属于特殊用途。判断一个地址是不是公网,最靠谱的办法是查它有没有落在保留段里,而不是靠记忆开头数字。
1.2 内网和外网:说的是“站在谁的角度看”
内网和外网这组词,跟公网私网完全不是一个维度。它们描述的是相对位置关系,是站在某个特定网络边界上说的。
内网,指的是你当前所在、受你或你所在组织管理的那个网络。对家庭用户来说,你家路由器下面那一堆设备组成的局域网就是内网;对公司员工来说,公司办公网就是内网。内网里的设备通常用私网地址,但这不是强制的——一个公司完全可以给自己的服务器配公网IP,只要它还在公司防火墙保护范围内,员工照样管它叫“内网服务器”。
外网,就是内网边界之外的一切。对家庭网络来说,运营商和整个互联网都是外网;对公司来说,除了自己管理范围之外的网络都算外网。
所以你会发现一个很有意思的现象:同一个地址,在不同人嘴里身份完全不同。你公司服务器是 203.0.113.10 这个公网IP,对你自己来说它是“内网服务器”,因为你从公司内网访问它;但对一个在家办公的同事来说,他访问这个地址走的是“外网”。公网私网是地址的固有属性,内网外网是观察者的相对视角,这两组词千万别混。
1.3 一张表把四者关系理清
| 概念 | 描述维度 | 判断依据 | 会变吗 |
|---|---|---|---|
| 公网 | 地址属性 | 是否在保留段之外、可全球路由 | 地址本身固定,但归属会变 |
| 私网 | 地址属性 | 是否落在RFC1918等保留段 | 固定 |
| 内网 | 相对位置 | 是否在你管理的边界内 | 换个位置就变 |
| 外网 | 相对位置 | 是否在你管理的边界外 | 换个位置就变 |
理解了这张表,后面聊NAT、聊内网穿透、聊组网,就都有了统一的语言基础。
2. NAT:让私网和公网握手的翻译官
2.1 NAT到底解决了什么问题
私网地址不能直接在公网上路由,那家里十几台设备怎么上网?答案就是NAT(网络地址转换)。它工作在路由器的转发路径上,干的事情说白了就是改包头的源地址或目的地址,让私网包出门时换上公网“马甲”,回来时再换回原来的私网地址。
最典型的是SNAT(源地址转换),也就是常说的“NAT上网”。你家电脑 192.168.1.100 要访问某个网站,包发到路由器,路由器把源地址改成自己WAN口的公网IP,同时在自己的NAT表里记一笔“这个公网端口对应内网192.168.1.100的某个端口”。网站回包时目的地址是路由器公网IP,路由器查表把目的地址改回 192.168.1.100,再转发给电脑。整个过程对两端都是透明的。
NAT最大的贡献是极大延缓了IPv4地址枯竭。没有NAT,全球几十亿设备根本不够分那40多亿个IPv4地址。但NAT也带来了副作用:外部主动发起的连接进不来,因为NAT表里没有对应记录,路由器不知道该转给谁。这就是为什么家里没做端口映射时,外面访问不了你的NAS。
2.2 家庭宽带里的NAT层级
家庭宽带其实经常是多层NAT叠加的。典型链路是这样的:
你的电脑(192.168.1.100) ↓ 你家路由器(私网192.168.1.1 / 公网或运营商私网) ↓ 光猫(可能也做了一层NAT) ↓ 运营商接入网(可能还有一层CGNAT) ↓ 真正的公网如果运营商在接入侧又做了一层NAT,用的就是 100.64.0.0/10 这个段,这叫运营商级NAT(CGNAT)。这时候你光猫WAN口拿到的“公网IP”其实是运营商私网地址,你根本没有真正的公网入口。河北省有朋友问怎么申请电信家庭宽带的动态公网IPv4,本质就是要让运营商把你从CGNAT里挪出来,给你分配一个真正可路由的公网地址。这个能不能办、怎么办,各地政策差异很大,得直接打运营商客服问,别信网上“一招搞定”的帖子。
判断自己是不是在CGNAT里,最简单的办法是对比:登录路由器看WAN口IP,再去某个查IP的网站看显示的出口IP,如果两者不一致,基本就是多层NAT了。
2.3 端口映射、DMZ和NAT回流
既然NAT挡住了外部主动连接,想让外面访问内网服务,就得手动开洞。常见三种手段:
- 端口映射(Port Forwarding):把公网某个端口固定转发到内网某台机器的某个端口。比如公网 8080 转到 192.168.1.100:80。精准、安全,推荐优先用。
- DMZ主机:把某台内网机器完全暴露在公网,所有未映射端口都转给它。方便但危险,等于把这台机器直接扔到公网上,除非你清楚在干什么,否则别开。
- UPnP自动映射:让内网程序自己向路由器申请开洞,很多游戏、下载工具用这个。省事但不可控,安全上要留个心眼。
还有个经常被忽略的问题叫NAT回流(NAT Loopback/Hairpin)。场景是这样:你在内网,想用公网域名或公网IP访问自己内网的服务。很多路由器默认不支持这种“出门再回来”的流量,导致内网访问不了、外网却正常。绿盟等设备上就有专门的NAT回流配置项。排查这类问题时,先分清是“外网访问不了”还是“只有内网用公网地址访问不了”,能省一大半时间。
3. 内网穿透:没有公网IP时的救命方案
3.1 内网穿透的本质
内网穿透要解决的核心矛盾是:我想从外网访问内网服务,但手上没有可用的公网入口。它和端口映射的区别在于,端口映射需要你有一个公网IP加一台能配置的路由器;内网穿透则绕开了这个前提,靠一台有公网IP的中转服务器来牵线。
原理不复杂:内网机器主动向中转服务器建立一条长连接(因为是内网主动往外连,NAT不拦),中转服务器记住这条连接。当外部用户想访问内网服务时,请求先到中转服务器,服务器通过那条已建立的长连接把流量“喂”回内网机器。整个过程中,内网机器始终是连接的发起方,所以不需要公网IP,也不需要动路由器。
3.2 主流工具横向对比
| 工具 | 是否需要公网 | 部署难度 | 典型场景 | 备注 |
|---|---|---|---|---|
| frp | 需要一台公网服务器 | 中 | 自建穿透、长期稳定 | 配置灵活,社区活跃 |
| ngrok | 不需要(用官方服务) | 低 | 临时演示、快速验证 | 免费版有连接数和域名限制 |
| cpolar | 不需要(用官方服务) | 低 | 个人测试、小流量 | 国内访问速度相对友好 |
| 樱花内网穿透 | 不需要 | 低 | 游戏联机、远程桌面 | 面向个人用户 |
| EasyTier | 视模式而定 | 中 | 异地组网、虚拟局域网 | 组网思路和穿透不同 |
这里要专门说一句EasyTier 组网是不是必须有公网。EasyTier 这类组网工具的思路是构建一个虚拟局域网,让分布各地的设备像在同一个内网里。它通常需要至少一个有公网可达性的节点来做中继或协调,但这个节点可以是官方提供的公共节点,也可以是你自己的一台云服务器。所以严格说,用官方公共节点时你不需要自己有公网;想完全自建、不依赖第三方,那就得有一台公网服务器。这个区别很多人搞混,以为“组网=必须公网”,其实取决于你走不走官方中继。
3.3 自建frp穿透的完整实操
以 frp 为例,走一遍自建流程。假设你有一台公网云服务器(服务端)和一台内网机器(客户端)。
服务端frps.toml:
bindPort = 7000 auth.method = "token" auth.token = "换成你自己的强密码"客户端frpc.toml:
serverAddr = "你的公网服务器IP" serverPort = 7000 auth.method = "token" auth.token = "换成你自己的强密码" [[proxies]] name = "nas-web" type = "tcp" localIP = "192.168.1.100" localPort = 5000 remotePort = 15000启动服务端./frps -c frps.toml,客户端./frpc -c frpc.toml。之后访问公网服务器IP:15000就等于访问内网的192.168.1.100:5000。
几个实操要点:
- token一定要改,默认配置等于把门敞开。
- 云服务器安全组要放行 7000 和 15000 端口,很多人卡在这一步,客户端连不上先查安全组。
- 想用域名访问,把域名解析到公网服务器,再用 frp 的 http 类型代理,配合 Nginx 反代更灵活。
- 长期跑建议用 systemd 托管,别用 nohup 凑合,机器一重启就没了。
3.4 动态公网IP加DDNS:另一条路
如果你运气好,运营商给了动态公网IPv4,那不一定非要内网穿透。动态公网IP的问题是地址会变,解决办法是DDNS(动态域名解析):内网有个小脚本定时检测当前公网IP,一旦变化就调用域名服务商的API把域名解析更新到新IP。这样你用固定域名就能一直访问到NAS。
DDNS和frp的区别:DDNS依赖你有公网IP,流量直连,延迟低、带宽足;frp不依赖公网IP,但流量要过中转服务器,带宽和延迟受中转服务器限制。有公网就优先DDNS,没公网才考虑穿透,这是选型的基本顺序。
4. 组网、虚拟化与内网环境里的那些坑
4.1 VirtualBox的NAT和NAT网络,别再搞混
VirtualBox 里两种网络模式名字很像,行为差很远:
- NAT模式:虚拟机共享宿主机网络,能上外网,但外部访问不了虚拟机,除非手动配端口转发。每台虚拟机相互隔离。
- NAT网络:多台虚拟机接在同一个NAT网络里,彼此可以互通,也能上外网,同样需要端口转发才能被外部访问。
简单记:NAT模式是“各过各的”,NAT网络是“抱团取暖”。做多机实验、搭集群时用NAT网络,单机测试用NAT模式就够。
4.2 WSL的NAT模式和代理问题
WSL2 默认走NAT模式,这带来一个经典报错:“检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理”。原因是WSL2在一个独立的虚拟网络里,和Windows主机不是同一个网络命名空间,Windows上的代理监听在 127.0.0.1,WSL里访问不到。
解决办法有两个方向:一是开启WSL的镜像网络模式(在.wslconfig里配networkingMode=mirrored),让WSL和主机共享网络;二是手动把代理地址改成主机的虚拟网卡IP,而不是 127.0.0.1。前者更彻底,后者兼容性更好,看你的WSL版本。
4.3 纯内网环境下的软件安装
很多企业内网、涉密网络是完全隔离的,机器上不了外网。这种环境下装软件是个技术活。以在纯内网 aarch64 机器上装 Nginx 为例,思路是在外网机器上把依赖全部下齐,再整体搬进去:
# 外网机器上,下载deb包及其所有依赖 apt-get download nginx apt-get install --download-only -o Dir::Cache::archives="./pkgs" nginx # 把 pkgs 目录打包拷进内网 tar czf nginx-offline.tar.gz pkgs/ # 内网机器上安装 dpkg -i pkgs/*.debRHEL 6.10 这种老系统配外网yum源,思路类似,要么搭本地yum仓库,要么用离线rpm包。pnpm项目迁移到内网、GitLab内网安装、内网机器下载uv,本质都是同一套“外网准备、内网落地”的打法。关键点是依赖要下全,尤其是那些间接依赖,漏一个就装不上,建议用--download-only或专门的离线打包工具。
4.4 内网渗透视角下的横向移动
从防御和排查角度,内网横向渗透是安全运营的重点。攻击者拿到一台内网机器后,会尝试用各种手段横向移动到其他机器。对应的告警信息通常包括:异常的SMB/RDP连接、短时间内大量主机间的端口扫描、异常的凭据使用、计划任务或服务的异常创建。
排查思路是先看流量再看行为:内网主机之间突然出现大量445、3389、22端口的连接尝试,基本可以判定有横向扫描;再结合登录日志看是否有异常账号在非工作时间登录多台机器。这类告警的价值在于早发现,一旦横向成功,后面就是数据外泄了。
5. 常见问题速查与避坑心得
5.1 问题速查表
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 外网访问不了内网服务 | 没做端口映射/在CGNAT里 | 查WAN口IP与出口IP是否一致 |
| 内网用公网地址访问不了 | NAT回流未开启 | 路由器找Hairpin/Loopback选项 |
| frp客户端连不上 | 安全组/防火墙没放行 | 查云安全组和本机防火墙 |
| SSH公网IP超时但能ping通 | 22端口被拦或服务没起 | 查sshd状态和端口放行 |
| WSL里代理不生效 | NAT模式隔离 | 开镜像网络或改代理地址 |
| 光猫路由NAT下DNS延迟高 | 光猫性能或DNS配置 | 改桥接或换DNS |
5.2 几条踩坑心得
第一,先确认自己有没有公网,再决定方案。很多人一上来就折腾内网穿透,结果发现自己其实有公网IP,白白绕了远路。判断方法前面说过,对比WAN口IP和出口IP,一分钟的事。
第二,端口映射比DMZ安全得多。我见过太多人图省事直接开DMZ,结果内网机器被扫。只开需要的端口,用完就关,这是基本纪律。
第三,内网穿透的中转服务器带宽是瓶颈。免费或低配的中转服务器带宽往往只有几兆,传大文件会很难受。如果流量大,要么升级中转服务器,要么想办法搞公网IP走直连。
第四,纯内网环境装软件,依赖一定要下全。我吃过亏,外网下了主包,内网装的时候报缺依赖,又得重新搬一遍。用--download-only或者专门的离线打包工具,一次搞定。
第五,组网工具选型看需求。只是临时访问一台机器,ngrok、cpolar这种开箱即用的够了;要长期稳定、多机互联,frp自建或EasyTier这类组网方案更合适。别为了一个临时需求去搭一套复杂架构。
5.3 关于家庭公网申请的现实情况
最后聊聊“家庭公网”这个热词。现在IPv4地址极度紧张,很多地区的新装宽带默认就是CGNAT,不给公网IPv4。想申请的话,直接打运营商客服,说明用途(比如家里有监控、NAS需要远程访问),部分地区可以免费开通动态公网IPv4,部分地区要加钱或者根本不给。IPv6倒是普遍下发了,如果你的设备和运营商都支持IPv6,用IPv6做远程访问是更现代的思路,地址够用、不用NAT,只是要注意防火墙策略和地址变化的DDNS问题。
我自己折腾下来最大的体会是:把公网私网、内网外网这两组概念彻底分清,后面90%的组网和穿透问题都能自己推出来。剩下的就是动手试,试的时候记得先确认网络拓扑,别在错误的前提上瞎调参数。