变更记录
routerd 的版本历程。格式遵循 Keep a Changelog。
本软件仍处于 v1alpha1 阶段,0.x 之间的小版本号变更也可能含有破坏性改动。
0.4.0
新增
- nftables 的隐式拒绝包记录由
routerd-firewall-logger接收并写入firewall-logs.db。Linux 直接读取nfnetlink,FreeBSD 通过tcpdump读取pflog。 - Web Console 新增「Connections」选项卡(实时 conntrack / pf state)、「Clients」选项卡(DHCP 租约与流量整合)以及「Firewall」选项卡(拒绝排行 + 时间序列)。
WebConsole.spec.listenAddressFrom与DNSResolver系列的监听地址,可由Interface/<name>.status.ipv4Addresses推导。允许用引用代替字面值。- 默认启用 conntrack 计数(
net.netfilter.nf_conntrack_acct=1),SysctlProfile/router-linux已纳入;TrafficFlowLog因此能聚合bytesOut/bytesIn。
变更
- 实时连接视图的 API / CLI 统一命名为
connections(旧称conntrack-snapshot)。请使用/api/v1/connections、routerctl connections。IPv6 也并入同一张表。 - 扩展了 NixOS 的声明式渲染。
Package(NixOS 包声明)、SysctlProfile、NetworkAdoption、SystemdUnit都会输出到routerd render nixos。NixOS 上的Package不再于运行时安装,由生成的 NixOS 配置接管。 SystemdUnit可生成 FreeBSDrc.d脚本(routerd render freebsd --out-dir)。
修复
- 当
Link/<name>状态为空时,IPv6DelegatedAddress不再跳过将 PD 派生地址绑定到主机接口的步骤。 SystemdUnit不再对未变动的 active unit 进行不必要的重启。
0.3.0
新增
- 声明式 OS bootstrap 资源
Package与SysctlProfile。覆盖 apt、dnf、nix、pkg 的包声明,以及面向路由器场景的 sysctl 推荐值(nf_conntrack_max、socket buffer、TCP/UDP timeout、ip_forward等)。 NetworkAdoption可由 YAML 关闭 systemd-networkd 的 DHCP / RA。SystemdUnit由 routerd 自身渲染、安装、启用 unit 文件。routerctl events --limit N --topic X --resource K/N -o json不再依赖sqlite3即可查看 bus event。routerd plan --diff提供 apply 前的差异预览。DNSResolver支持 bootstrap forwarder(内部 DNS 优先,公共 DNS 作为兜底)。
变更
- 配置文件中的
${...status.field}字符串引用改为类型化*From字段(addressFrom、ipv4From、ipv6From、upstreamFrom、prefixFrom、rdnssFrom、dependsOn)。没有兼容别名。 - controller chain 重构为纯 event-loop。共用
framework.FuncController(Subscriptions + Bootstrap + PeriodicFunc)与eventedStore,状态保存时必发routerd.resource.status.changed,由下游 controller 触发再评估。 - bus event 通过
slog输出到 systemd journal(journalctl -u routerd.service -f | grep "routerd event"即可追踪 controller 行为)。高频事件为 debug 级别。 - 全部 binary 改为静态链接(
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w")。OS 别包清单(dnsmasq-base、nftables、conntrack、iproute2、ppp、wireguard-tools、strongswan-swanctl、radvd、tcpdump等)按 Ubuntu / NixOS / FreeBSD 整理。 HealthCheck.sourceInterface在 YAML 上以资源名书写,运行时解析为 OS 接口名。
修复
SystemdUnit之间的RuntimeDirectory冲突会在重启时删除 socket,已通过runtimeDirectoryPreserve声明式解决。state: absent的SystemdUnit现可正确判定为 Drifted,并加入 plan 中删除。SysctlProfile观测时的类型漂移误判已抑制。
0.2.0
新增
- 状态化 firewall:
FirewallZone、FirewallPolicy、FirewallRule生成 nftables 的inet routerd_filtertable。 EgressRoutePolicy(原名WANEgressPolicy)新增destinationCIDRs、gateway、gatewaySource。HealthCheck可通过via、sourceInterface、sourceAddress指定 probe 路径。- DNS 子系统重构:
DNSZone(权威区)与DNSResolver(转发 / 缓存)分离。覆盖本地区、条件转发、DoH / DoT / DoQ、明文 UDP DNS。dnsmasq 仅限 DHCPv4 / DHCPv6 / RA / 中继。 - DS-Lite(
DSLiteTunnel)、PPPoE(PPPoESession、routerd-pppoe-client)、DHCPv4 client(routerd-dhcpv4-client、DHCPv4Lease)。 - NAT44(
NAT44Rule)与 conntrack 观测。在无/proc/net/nf_conntrack环境中回退到 sysctl 统计。
变更
WANEgressPolicy改名为EgressRoutePolicy。没有兼容别名。- DHCP 相关 Kind 与 binary 名称对齐 RFC 表记法(
routerd-dhcpv4-client、routerd-dhcpv6-client)。没有兼容别名。
0.1.0
最初的 v1alpha1 实现。
- 引入 DHCPv6-PD client、daemon contract、event bus、controller framework。
- 实现从 DHCPv6-PD 到 LAN 地址推导再到 DNS 响应的 controller chain。
- 新增 DHCPv6 information-request、DS-Lite(试做)、IPv4 路由、RA、DHCPv6 server、
HealthCheck、EventRule、DerivedEvent。
之后出货前整理过程中,API 名称与实现策略做了大幅调整。请参考上方 Unreleased 与 examples/ 获取最新使用方式。