文章
关于NAT
一、NAT 的全称与本质#
- NAT = Network Address Translation(网络地址转换)
- 本质:把私有网络的 IP 地址映射到公网 IP,允许多个内网设备共用一个公网 IP。
二、为什么会有 NAT#
- IPv4 地址不足
- IPv4 地址有限(约 42 亿个)
- 很多设备都需要上网
- NAT 让多个设备共享同一个公网 IP
- 安全与隔离
- 内网设备默认不能直接被外网访问
- 防火墙和 NAT 提供了天然隔离
三、NAT 的工作原理#
假设你家里有两台设备:
设备A (192.168.0.2) ─┐
设备B (192.168.0.3) ─┤ NAT 路由器
公网 IP: 203.0.113.5 ─┘
- 内网设备发出请求时:
- NAT 会把源地址(192.168.0.2)改成公网 IP(203.0.113.5)
- 并记录端口映射,例如 50000 → 203.0.113.5:40001
- 返回的数据包:
- NAT 根据映射把数据包送回正确内网设备
这就解释了为什么内网设备能访问互联网,但互联网设备通常不能主动访问内网。
四、NAT 的类型(对 iroh 很重要)#
- Full Cone NAT(全锥型)
- 内网 IP + 端口 → 公网 IP + 端口 是固定的
- 任意外部主机都能访问这个映射端口
- Restricted / Port Restricted NAT(受限型 / 端口受限型)
- 外部主机只有在内网设备主动发过包后才能访问
- Symmetric NAT(对称型)
- 每次外发包到不同目标 IP / port 都会分配不同映射
- 最难穿透
iroh 要做内网穿透,实际上就是在“试探 NAT 类型”,找出可用路径。
五、NAT 对 iroh 的影响#
- 无法直接用 IP 联系内网节点
- 如果你用传统 socket,你需要知道对方公网 IP + 映射端口
- NAT 对外隐藏了你的真实位置
- 端口映射可能随时变
- DHCP、重新连接 WiFi,端口映射可能改变
- Endpoint 必须动态维护
- 穿透方式依赖 NAT 类型
- UDP 打洞(UDP hole punching)
- Relay(当 NAT 太严格时)
所以 iroh 的 Endpoint 才需要维护“多条可达路径”和“中继 fallback”。
六、简单类比#
- NAT = 家里的门卫
- 你家人可以出去找别人
- 别人很难直接进你家
- iroh 的穿透机制 = 教别人“怎么通过门卫找到你”,或者给门卫一条临时通道