跳到主要内容

变更记录

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.listenAddressFromDNSResolver 系列的监听地址,可由 Interface/<name>.status.ipv4Addresses 推导。允许用引用代替字面值。
  • 默认启用 conntrack 计数(net.netfilter.nf_conntrack_acct=1),SysctlProfile/router-linux 已纳入;TrafficFlowLog 因此能聚合 bytesOut / bytesIn

变更

  • 实时连接视图的 API / CLI 统一命名为 connections(旧称 conntrack-snapshot)。请使用 /api/v1/connectionsrouterctl connections。IPv6 也并入同一张表。
  • 扩展了 NixOS 的声明式渲染。Package(NixOS 包声明)、SysctlProfileNetworkAdoptionSystemdUnit 都会输出到 routerd render nixos。NixOS 上的 Package 不再于运行时安装,由生成的 NixOS 配置接管。
  • SystemdUnit 可生成 FreeBSD rc.d 脚本(routerd render freebsd --out-dir)。

修复

  • Link/<name> 状态为空时,IPv6DelegatedAddress 不再跳过将 PD 派生地址绑定到主机接口的步骤。
  • SystemdUnit 不再对未变动的 active unit 进行不必要的重启。

0.3.0

新增

  • 声明式 OS bootstrap 资源 PackageSysctlProfile。覆盖 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 字段(addressFromipv4Fromipv6FromupstreamFromprefixFromrdnssFromdependsOn)。没有兼容别名。
  • 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-basenftablesconntrackiproute2pppwireguard-toolsstrongswan-swanctlradvdtcpdump 等)按 Ubuntu / NixOS / FreeBSD 整理。
  • HealthCheck.sourceInterface 在 YAML 上以资源名书写,运行时解析为 OS 接口名。

修复

  • SystemdUnit 之间的 RuntimeDirectory 冲突会在重启时删除 socket,已通过 runtimeDirectoryPreserve 声明式解决。
  • state: absentSystemdUnit 现可正确判定为 Drifted,并加入 plan 中删除。
  • SysctlProfile 观测时的类型漂移误判已抑制。

0.2.0

新增

  • 状态化 firewall:FirewallZoneFirewallPolicyFirewallRule 生成 nftables 的 inet routerd_filter table。
  • EgressRoutePolicy(原名 WANEgressPolicy)新增 destinationCIDRsgatewaygatewaySourceHealthCheck 可通过 viasourceInterfacesourceAddress 指定 probe 路径。
  • DNS 子系统重构:DNSZone(权威区)与 DNSResolver(转发 / 缓存)分离。覆盖本地区、条件转发、DoH / DoT / DoQ、明文 UDP DNS。dnsmasq 仅限 DHCPv4 / DHCPv6 / RA / 中继。
  • DS-Lite(DSLiteTunnel)、PPPoE(PPPoESessionrouterd-pppoe-client)、DHCPv4 client(routerd-dhcpv4-clientDHCPv4Lease)。
  • NAT44(NAT44Rule)与 conntrack 观测。在无 /proc/net/nf_conntrack 环境中回退到 sysctl 统计。

变更

  • WANEgressPolicy 改名为 EgressRoutePolicy。没有兼容别名。
  • DHCP 相关 Kind 与 binary 名称对齐 RFC 表记法(routerd-dhcpv4-clientrouterd-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、HealthCheckEventRuleDerivedEvent

之后出货前整理过程中,API 名称与实现策略做了大幅调整。请参考上方 Unreleasedexamples/ 获取最新使用方式。