公网IP与内网IP,以及NAT的完整解析
IP地址分为两类:在整个互联网中全球唯一、可路由的 公网地址,以及可在任意组织内部自由重复使用的 **内网(私有)**地址。理解二者的区别,就能明白为什么你电脑上的IP几乎从不等于网站看到的IP。
为什么需要私有地址
IPv4地址只有约43亿个,且多年前就已耗尽。如果每部手机、笔记本、电视和灯泡都需要唯一的公网地址,互联网早就停滞了。于是 RFC 1918 保留了三个范围,只要不直接出现在公网上,任何人都可在内部使用。
RFC 1918 私有范围
| 范围 | CIDR | 地址数 | 典型用途 |
|---|---|---|---|
10.0.0.0 – 10.255.255.255 |
10.0.0.0/8 |
约1670万 | 大型企业、云 |
172.16.0.0 – 172.31.255.255 |
172.16.0.0/12 |
约100万 | 中型网络 |
192.168.0.0 – 192.168.255.255 |
192.168.0.0/16 |
65,536 | 家庭/小型办公 |
由于它们到处被重复使用,无法在公网上路由——路由器必须用 NAT 转换。
你会遇到的其他特殊范围
| 范围 | 名称 | 含义 |
|---|---|---|
127.0.0.0/8 |
回环 | 你自己的机器(localhost) |
169.254.0.0/16 |
链路本地(APIPA) | DHCP失败时自动分配 |
100.64.0.0/10 |
CGNAT共享空间 | 路由器与ISP之间(CGNAT) |
更多内容见 特殊地址。
NAT(网络地址转换)
家用路由器把内网多台设备(内网IP)映射到运营商分配的那一个 公网IP 上:
[电脑 192.168.0.10]─┐
[手机 192.168.0.11]─┼─[路由器 / NAT]──→ [公网IP 203.0.113.5] ──→ 互联网
[电视 192.168.0.12]─┘
让这一切对多台设备同时成立的关键是 端口转换(NAPT/PAT)。路由器改写每条出站连接的源IP和源端口,并在表中记住该映射,从而把回复送回正确的设备:
| 内部 | → 在互联网上显示为 |
|---|---|
192.168.0.10:51000 |
203.0.113.5:40001 |
192.168.0.11:51000 |
203.0.113.5:40002 |
因此网站看到的是路由器的公网IP——也就是本站 首页 显示的地址——而非你电脑上的内网IP。
NAT会破坏什么(以及人们如何绕过)
由于连接必须从内部发起,NAT会悄悄阻断入站连接,这会影响:
- 在NAT之后托管服务器或游戏——需要端口转发把外部端口映射到内部设备。
- 双重NAT(你的路由器位于ISP路由器之后)——两端都要设置端口转发。
- CGNAT——当ISP本身把一个公网IP分给众多客户时,你根本无法做端口转发。见 CGNAT详解。
- VPN和代理会改变外界看到的公网IP——见 NAT、代理与VPN。
IPv6基本终结了NAT
IPv6的地址空间极其庞大,每台设备都能拥有自己的全球唯一地址,从而免去了对NAT的需要(访问控制仍由防火墙负责)。在漫长的迁移期内,大多数网络同时运行IPv4与IPv6。见 IPv6 与 IPv4。
检查你是否在NAT之后
比较你的两个地址。如果本地IP落在RFC 1918范围内,而 首页 显示的是另一个公网IP,那么你就在NAT之后(几乎人人如此)。
# Linux: 本地(内网)IP
ip -4 addr show
# Windows: 本地(内网)IP
Get-NetIPAddress -AddressFamily IPv4
备注: 如果路由器的WAN侧IP在
100.64.0.0/10,说明你的ISP正在使用CGNAT——你与其他用户共享一个公网IP,没有中继或付费静态IP就无法托管入站服务。