PHASE 2 · 路由器解剖

2.6WAN 接入

DHCP 客户端与 PPPoE 拨号

Phase 2 到这,LAN 那一侧你全懂了——发地址(2.3)、防火墙(2.4)、WiFi(2.5)。但路由器还有另一面:朝 ISP 的 WAN。你家能上网,前提是路由器先从运营商那里"拿到上网能力"——一个自己的地址、一条默认路由、一个网关。这章讲这一面:两种主流接入方式(DHCP 动态获取 vs PPPoE 拨号)、它们对应 2.2 的哪个 proto,以及那条让全家能出网的默认路由到底从哪来。顺带解释 0.6 / 加餐章里"公网 IP"和"CGNAT"是怎么落到你头上的。

一句话定义

WAN 接入 = 路由器在朝 ISP 的接口上"上线":通过 DHCP 客户端或 PPPoE 拨号,从运营商拿到自己的 IP、网关和默认路由,从此内网流量有了出口。

1WAN:朝 ISP 的那一面

一台路由器至少有两副面孔,而且角色相反:

← 面向内网设备
LAN 侧:当服务端(庄家)
  • DHCP 服务器,给设备发 IP(2.3)
  • 当网关
  • 防火墙 lan 区域(2.4)
同一台
路由器
面向 ISP →
WAN 侧:当客户端(玩家)
  • 向 ISP 要 IP(DHCP 客户端 / PPPoE)
  • 拿网关 + 默认路由
  • 可能撞上 CGNAT

这个视角转换很重要:2.3 里路由器是 DHCP 服务器(给 LAN 发地址);而在 WAN 侧,路由器可能是 DHCP 客户端(向 ISP 要地址)。同一台设备,两侧角色相反。WAN 侧要拿到三样,内网才能出网:一个自己的地址、一个网关(下一跳)、由此得到的默认路由(0.3:"其他都走这个网关")。

一台路由器 = 两侧角色的二传手

LAN 侧路由器是"发牌的庄家"(DHCP 服务器 + 网关),WAN 侧它是"来拿牌的玩家"(DHCP 客户端 / 拨号方)。它把从 WAN 拿到的"出网能力",通过 NAT(0.6)分享给 LAN 一堆设备。理解路由器,就是理解它怎么在这两侧之间当二传手。

2方式一:DHCP 客户端

最简单的 WAN 接入:路由器在 WAN 口当 DHCP 客户端,像你设备连网那样,自动从 ISP 拿到 IP / 网关 / DNS。2.2 讲过 netifd 的 proto 决定接口怎么拿地址——WAN 口设成 dhcp,netifd 就在这口跑一个 DHCP 客户端,发 Discover、收 Offer(0.5 的 DORA,只是这次路由器是客户端),拿到:一个 IP、网关 + 默认路由(自动装上,0.3/1.2)、上游 DNS(给 dnsmasq 当上游,2.3)。

/etc/config/network · wan
config interface 'wan'
    option device 'eth0'      # WAN 物理口
    option proto 'dhcp'       # 当 DHCP 客户端

谁用它:很多光纤入户(桥接模式)、有线电视宽带(cable)、以及运营商用 DHCP 下发地址的场景。插上就通,不用账号密码。

路由器关联 router-link

这就是 2.3 的镜像:LAN 侧 dnsmasq 是 DHCP 服务器,WAN 侧 netifd 是 DHCP 客户端。同一套 0.5 的 DORA 协议,路由器在两侧分别演服务端和客户端——你把 2.3 和这节对照,DHCP 的两端就全见过了。

3方式二:PPPoE 拨号

很多宽带(尤其国内、DSL / 部分光纤)要用账号密码拨号。运营商想对每个用户认证、计费、管理,于是不直接发地址,而要你"拨号上线"。PPPoE(PPP over Ethernet)就是干这个:在 WAN 口先和运营商接入设备建一条 PPP 会话,过程中用你的宽带账号 + 密码认证(0.5 那种身份验证),认证通过后运营商通过这条会话给你分配 IP、网关。

/etc/config/network · pppoe
config interface 'wan'
    option device 'eth0'
    option proto 'pppoe'      # 拨号(netifd 触发 pppd)
    option username '你的宽带账号'
    option password '你的宽带密码'

proto 设 pppoe,netifd 的 pppoe 协议处理器会触发 pppd(2.1 名单里那个)去拨号;成功后创建一个 pppoe 虚拟接口(如 pppoe-wan),IP 和默认路由挂在它上面。

必须知道的坑:MTU = 1492

PPPoE 的封装会占用 8 字节,所以 PPPoE 链路的 MTU 通常是 1492(而不是 0.2 那个标准 1500)。MTU 没配对会导致"能上小网页、大文件 / 某些网站却卡住"的诡异问题——这是 0.2 的 MTU 概念在 WAN 接入里最常见的实战陷阱。

类比:DHCP 是"插上就发号",PPPoE 是"先刷卡登录"

DHCP 插上就发号(无需认证);PPPoE 先用账号密码验明正身、再放你进来并发号——它把 0.5 的认证思想搬到了链路接入层。而它多出的封装开销,又逼你回到 0.2 去关心 MTU:一个协议,连带牵动了两章的知识。

4默认路由、公网 IP 与 CGNAT

无论 DHCP 还是 PPPoE,WAN 上线后都给你同样的三件套:一个 IP、一个网关、一条默认路由。

默认路由的来历(终于讲清):Phase 0/1 反复出现的那条 default via <网关>(0.3/1.2),就是 WAN 接入时装上的。DHCP 从 Offer 带来网关、PPPoE 从拨号协商拿到网关,netifd 据此加一条默认路由——从此"目的地不在直连网段的包,全走 WAN 出去"(0.3 的 LPM)。你内网能上网的最后一环,就是这条路由。

公网 IP vs CGNAT(回扣 0.6 / 加餐章):你从 WAN 拿到的地址有两种命运:

  • 真公网 IP:外部可直接到达你——端口转发(2.4)有效、能自建对外服务、WireGuard(1.6)能被主动连。
  • CGNAT 地址:运营商给你的其实是它内部的私网地址(你在运营商那层 NAT 后面)。此时你的"公网 IP"是假的——端口转发失效(2.4 早提过)、外部主动连不进来。加餐章说的 CGNAT,就发生在这一步。
  • 怎么判断:看 WAN 口 IP 是否落在 100.64.0.0/10(运营商级 NAT 专用段)或私网段,或和"外面看到的你的 IP"是否一致。

IPv6 侧:WAN 接入时除了 IPv4,通常还通过 DHCPv6-PD(前缀委派)向 ISP 要一段 IPv6 前缀(2.3 的 odhcpd 干的),再下放给 LAN——这就是加餐章"每台设备拿全局地址"的源头,前缀从这条 WAN 链路进来。

路由器关联 router-link

到这里,几条从 Phase 0 埋下的线全接上了:0.3 的默认路由(WAN 装的)、0.6 的公网 IP 和 masquerade(WAN 拿的地址 + wan 区域 masq)、加餐章的 CGNAT(WAN 拿到的是运营商私网)和 IPv6 前缀(WAN 的 DHCPv6-PD)。WAN 接入是"你家网络和外部世界的接缝"——上线拿到的这三件套,是内网一切出网流量的起点。

本章小结

  • WAN 是路由器朝 ISP、当客户端的一面(与 LAN 侧当服务端相反);它要拿到 IP、网关、默认路由,内网才有出口。
  • 方式一 DHCP 客户端(proto 'dhcp'):像设备连网那样自动拿地址;是 2.3 的镜像(WAN 客户端 vs LAN 服务器)。
  • 方式二 PPPoE(proto 'pppoe'):账号密码拨号(netifd 触发 pppd),认证后拿 IP;注意 MTU=1492(0.2 的实战坑)。
  • 拿到的三件套里,默认路由就是 Phase 0/1 那条 default via 网关(0.3/1.2)的来历;WAN 的 IP 是真公网还是 CGNAT(100.64/10),决定端口转发 / 主动入连是否可行(0.6/加餐章)。
  • IPv6 靠 WAN 的 DHCPv6-PD 拿前缀下放 LAN(2.3);WAN 接入是内网出网的起点,接上了 Phase 0 埋的默认路由 / 公网 IP / CGNAT / IPv6 几条线。

动手练习

  1. 若有 OpenWRT:cat /etc/config/network 看 wan 的 proto(dhcp 还是 pppoe);ip addr show <wan口> 看拿到的地址,ip route 找那条 default——确认它指向 ISP 网关。
  2. 判断你是否在 CGNAT 后面:看 WAN 口 IP,若落在 100.64.0.0/10 或和"外部查到的你的 IP"不一致,你就在 CGNAT 后。想想这对自建服务 / WireGuard 意味着什么(1.6/2.4)。
  3. 思考题:DHCP 接入和 PPPoE 接入,最大区别是什么?为什么 PPPoE 要配账号密码而 DHCP 不用?(认证 / 计费;PPPoE 把 0.5 的认证搬到接入层。)
  4. 进阶:把"内网设备到打开网页"整条路补全——DHCP 从 dnsmasq 拿内网 IP + 网关(2.3)→ 包经防火墙 FORWARD + masq(2.4)→ 走 WAN 那条默认路由(本章)→ 从 WAN 的公网 IP 出门(本章)。指出每步依赖前面哪一章。