跳到主要内容

WAN 侧服务

处理 DHCPv4、DHCPv6-PD、PPPoE、DS-Lite、health check、egress selection、NAT44 与 downstream status input 的 WAN-side routerd services

本页介绍处理路由器 WAN 侧的 routerd 资源。 WAN 侧资源负责建立上游链路、从 ISP 获取 IP 地址与前缀、终结隧道,以及向控制器链提供多条上游路由等功能。

LAN 侧(路由器向内侧提供的服务)请参阅 LAN 侧服务

一览

功能资源负责守护进程
物理 / 虚拟接口InterfaceIPv4StaticAddress(kernel)
通过 DHCP 从 ISP 获取 IPv4DHCPv4Clientrouterd-dhcpv4-client
从 ISP 获取 IPv6 前缀DHCPv6PrefixDelegationIPv6DelegatedAddressrouterd-dhcpv6-client
其他 DHCPv6 选项(DNS、AFTR 等)DHCPv6Informationrouterd-dhcpv6-client
上游时间服务器NTPClientsystemd-timesyncdntpd
PPPoE 会话PPPoESessionrouterd-pppoe-client
IPv6 上的 IPv4(DS-Lite)DSLiteTunnel(kernel ip6tnl
WAN 路由选择EgressRoutePolicyHealthCheckrouterd-healthcheck@<name>
IPv4 NAT(masquerade)NAT44Rule(nftables)
静态 IPv4 路由IPv4Route(kernel)

请根据 ISP 的提供形态,选择所需资源的组合。

模式 A:原生双栈(IPv4 + IPv6)

ISP 在同一 WAN 接口上同时发送 IPv4(DHCPv4)与 IPv6 前缀(DHCPv6-PD)的配置。

- apiVersion: net.routerd.net/v1alpha1
kind: Interface
metadata: {name: wan}
spec:
ifname: ens18
role: untrust

- apiVersion: net.routerd.net/v1alpha1
kind: DHCPv4Client
metadata: {name: wan-v4}
spec:
interface: wan

- apiVersion: net.routerd.net/v1alpha1
kind: DHCPv6PrefixDelegation
metadata: {name: wan-pd}
spec:
interface: wan

- apiVersion: net.routerd.net/v1alpha1
kind: IPv6DelegatedAddress
metadata: {name: lan-base}
spec:
pdRef: wan-pd
interface: lan
suffix: ::1/64

- apiVersion: net.routerd.net/v1alpha1
kind: NAT44Rule
metadata: {name: lan-to-wan}
spec:
type: masquerade
egressInterface: wan
sourceRanges:
- 192.0.2.0/24

DHCPv4Client 启动 routerd-dhcpv4-client,并将租约内容写入 lease.json。地址本身由 kernel 持有,routerd 向下游资源发出事件。

DHCPv6PrefixDelegation 使用 routerd-dhcpv6-client 获取 IA_PD。IPv6DelegatedAddress 从获取的前缀中切出分配给 LAN 侧的 /64(或其他长度)。

上游 NTP / SNTP

NTPClient 可从 DHCPv4 option 42 或 DHCPv6 option 31 中提取时间服务器。 若上游不发送时间服务器,则将指定的公共 NTP 服务器配置至 OS 的 NTP 客户端。 Linux 使用 systemd-timesyncd,FreeBSD 使用 ntpd

- apiVersion: system.routerd.net/v1alpha1
kind: NTPClient
metadata: {name: system-time}
spec:
provider: systemd-timesyncd
managed: true
source: auto
serverFrom:
- resource: DHCPv4Client/wan-v4
field: ntpServers
- resource: DHCPv6Information/wan-info
field: sntpServers
fallbackServers:
- ntp.jst.mfeed.ad.jp
- ntp.nict.jp

若要将路由器本身作为 LAN 客户端的时间参考来源,请并用 LAN 侧的 ntpServerFromsntpServerFrom

模式 B:PPPoE(IPv4)+ DHCPv6-PD(IPv6)

旧式 xDSL 系配置,IPv4 通过 PPPoE 获取,IPv6 通过相同物理链路的原生 DHCPv6-PD 获取。

- apiVersion: net.routerd.net/v1alpha1
kind: PPPoESession
metadata: {name: wan-pppoe}
spec:
interface: wan
passwordFromSecret: pppoe-password
mtu: 1454
mru: 1454

- apiVersion: net.routerd.net/v1alpha1
kind: DHCPv6PrefixDelegation
metadata: {name: wan-pd}
spec:
interface: wan

PPPoESession 启动 routerd-pppoe-client,在 Linux 上封装 pppd/rp-pppoe,在 FreeBSD 上封装 ppp(8)。PPPoE 会话的接口(通常为 ppp0)可作为路由或 NAT44Rule 的参照对象。

模式 C:DS-Lite(在仅 IPv6 的接入网络上隧道 IPv4)

ISP 不提供原生 IPv4,仅提供 IPv6 的配置。IPv4 通过连往 AFTR(Address Family Transition Router)的 DS-Lite 隧道实现。

- apiVersion: net.routerd.net/v1alpha1
kind: DHCPv6PrefixDelegation
metadata: {name: wan-pd}
spec:
interface: wan

- apiVersion: net.routerd.net/v1alpha1
kind: DHCPv6Information
metadata: {name: wan-info}
spec:
interface: wan

- apiVersion: net.routerd.net/v1alpha1
kind: DSLiteTunnel
metadata: {name: ds-lite-primary}
spec:
sourceInterface: wan
aftrFQDN: gw.transix.jp
aftrFQDNResolverFromResource:
resource: DHCPv6Information/wan-info
field: dnsServers
mtu: 1454

DSLiteTunnel 在解析到 AFTR 地址后,以 kernel 的 ip6tnl 设备建立。 AFTR 记录通常只能通过接入网络内的 DNS 解析,因此请使用 aftrFQDNResolverFromResource 指定 ISP 的 DNS。

模式 D:多 WAN(主线路 + 备援)

有多条路由时,请将 EgressRoutePolicyHealthCheck 组合至 WAN 获取资源中使用。详细请参阅多 WAN 切换

状态确认

各 WAN 资源的状况可通过 routerctl describe <kind>/<name> 确认。示例:

routerctl describe DHCPv6PrefixDelegation/wan-pd # phase: Bound, prefix: 2001:db8:1::/56
routerctl describe DSLiteTunnel/ds-lite-primary # phase: Up, aftr: 2001:db8:cafe::1
routerctl describe EgressRoutePolicy/ipv4-default # selectedCandidate: ds-lite-primary

亦可从 Web 管理界面的「Overview」「Resources」分页确认相同信息。「Connections」分页显示各 WAN 路由的实际 conntrack/pf 状态。

相关项目