netplan 修改策略
1. 目标
定义首版 NetworkTool 在 Ubuntu 24 上修改 netplan 的具体策略,重点说明:
- 修改哪个文件
- 修改哪些字段
- 保留哪些字段
- 什么时候回滚
2. 首版场景
首版默认场景是新机器初始化。
特点:
- 一般只有一个 netplan YAML 文件
- 不重点处理复杂历史网络配置兼容
- 核心目标是把选中的真实接口配置正确写入系统
3. 文件定位规则
3.1 默认规则
- 扫描
/etc/netplan/*.yaml
- 如果只存在一个 YAML 文件:
- 如果不存在 YAML 文件:
- 如果存在多个 YAML 文件:
3.2 为什么这样定
原因:
- 符合新机器初始化场景
- 可避免误改错误文件
- 可避免首版陷入复杂多文件兼容
4. 修改方式
4.1 总体原则
首版不建议做字符串替换或正则替换。
建议方式:
- 先按 YAML 结构解析目标文件
- 找到目标真实接口对应节点
- 按结构化方式更新字段
- 再将整个文件重新写回
说明:
- 这是“修改现有文件”
- 但实现方式仍然应该是结构化重写
- 不建议做纯文本级局部替换
4.2 修改范围
首版只修改:
- 用户选中的目标真实接口配置
- 必要时补充当前管理接口的固定维护地址配置
不主动修改:
- 其他无关接口
- 与本次目标接口无关的系统网络字段
5. 目标接口字段处理规则
假设当前目标真实接口为 enp1s0。
5.1 需要写入或覆盖的字段
对于目标接口,首版建议由 NetworkTool 明确写入或覆盖以下字段:
dhcp4
addresses
routes
- 若用户填写默认网关或静态路由,则写入
- 默认网关表达为
to: default
- 若用户未填写路由,则删除该字段
nameservers.addresses
- 若用户填写 DNS,则写入
- 若用户未填写 DNS,则删除或置空
5.2 建议删除的旧字段
若目标接口原本存在以下字段,首版建议按新配置重置,避免旧状态残留:
- 旧的
addresses
- 旧的
gateway4
- 旧的
nameservers
- 旧的
dhcp4
- 旧的
routes
5.3 建议保留的字段
若目标接口下已存在且与本次配置无直接冲突,首版可考虑保留:
optional
mtu
wakeonlan
但首版如果实现复杂,也可以先不保留这些增强字段,重点保证主配置正确。
6. 管理接口字段处理规则
当前管理接口对应逻辑标识为 LAN2,但实际操作对象仍是真实接口名。
首版目标:
- 保证管理接口上有固定维护地址
169.254.100.2/16
- 允许该接口继续通过 DHCP 获取外联地址
建议处理:
- 若管理接口节点已存在:
- 若管理接口节点不存在:
7. 备份与回滚规则
7.1 备份规则
每次应用配置前:
- 先备份目标 netplan 文件
- 备份文件应完整保留原始内容
- 备份文件路径由实现决定,但应可用于立即回滚
7.2 应用规则
- 备份完成后写回修改后的文件
- 执行
netplan apply
- 客户端仍可连接时,在限定时间内自动确认保留配置
- 未自动确认或执行失败时恢复本次备份并再次执行
netplan apply
7.3 回滚规则
出现以下情况时执行回滚:
netplan apply 执行失败
- 客户端未能在超时时间内自动确认保留配置
- 其他明确判定为配置失败的情况
回滚步骤:
- 恢复备份文件
- 再次执行
netplan apply
- 记录回滚结果
8. 首版不处理的情况
首版建议明确不自动处理以下情况:
/etc/netplan 下存在多个 YAML 文件
- 多个文件共同描述同一接口
- 复杂路由策略合并
- IPv6 配置兼容
- 复杂自定义 nameserver/search 域保留
这些情况可直接返回错误,由后续版本再扩展。
9. 建议实现顺序
- 先完成“定位单个 netplan 文件”能力
- 再完成“读取并解析 YAML 结构”能力
- 再完成“修改目标真实接口字段”能力
- 再完成“备份、写回、apply、回滚”闭环
10. 当前推荐结论
首版 netplan 修改策略建议固定为:
- 默认认为系统只有一个 netplan YAML 文件
- 修改该现有文件
- 修改前先完整备份
- 按 YAML 结构更新目标真实接口字段
- 失败则用原文件回滚