甲骨文云 DD Debian 系统自动获取 IPv6
DD 重装会改变系统镜像和网络配置;即使控制台已经给 VNIC 分配 IPv6,新系统也不一定已配置获取方式。先完成 Oracle Cloud 云端 IPv6 配置,再检查系统。Debian 镜像可能使用 ifupdown、systemd-networkd、NetworkManager,或由 cloud-init / Netplan 生成配置,不能按发行版名称直接判断。
本文的 .network 示例适用于使用 systemd-networkd、IPv4 由 DHCP 获取、IPv6 使用 DHCPv6 与路由通告(RA)的实例;配置语义参考 Debian 12 对应的 systemd 252。静态 IPv4、多网卡、策略路由或专用网络镜像需要保留其额外配置,不能直接替换成此最小示例。
识别网卡与当前管理器
sh
cat /etc/os-release
ip -br link
ip -br address
ip route
ip -6 route
systemctl is-active networking systemd-networkd NetworkManager
systemctl is-enabled networking systemd-networkd
ls -l /etc/resolv.conf
cat /etc/resolv.conf结合服务状态和配置文件核对实际接口。ens3、enp0s6 等都只是可能的名称,与 CPU 类型不能形成可靠的一一对应关系。
设置后续检查使用的变量,把示例值替换为实际接口;更换终端会话后也需重新设置:
sh
net_if='ens3'| 当前配置来源 | 处理方式 |
|---|---|
| 已由 systemd-networkd 直接管理 | 用 networkctl status 接口名 找到命中的 .network 文件,在原配置中合并 IPv6 设置 |
| Netplan 或 cloud-init 生成 | 修改其源配置,避免只改生成文件导致重启后被覆盖 |
| ifupdown | 查看 /etc/network/interfaces 及其引入文件;需要迁移时按后文控制台流程处理 |
| NetworkManager | 使用其连接配置管理 IPv6,不同时让 networkd 接管相同接口 |
DNS 要单独确认:networkd 获得 DNS 地址不等于应用已经在使用它。若已使用 systemd-resolved,应确认服务和 /etc/resolv.conf 链接有效;若 DNS 文件依赖 ifupdown/resolvconf 生成,必须先安排迁移后的解析方式,不能停掉旧管理器后还依赖其更新该文件。
创建或合并 .network 配置
先保留现有配置和服务启用状态。下面以确实存在 /etc/network 的 ifupdown 主机为备份示例;根据已确认的管理方式备份对应目录,并把备份路径另行记录:
sh
network_backup="$HOME/network-before-$(date +%Y%m%d-%H%M%S)"
mkdir -m 700 "$network_backup"
sudo cp -a /etc/network "$network_backup/network"
if [ -d /etc/systemd/network ]; then
sudo cp -a /etc/systemd/network "$network_backup/networkd"
fi
sudo cp -a /etc/resolv.conf "$network_backup/resolv.conf"
systemctl is-enabled networking systemd-networkd > "$network_backup/unit-state.txt"
printf '%s\n' "$network_backup"is-enabled 遇到 disabled 等状态可返回非零;检查记录内容,区分正常状态和单元不存在。任一配置备份失败时先处理失败,不进入切换。
已由 networkd 管理时,编辑 networkctl status 显示的源文件并保留原有配置。首次从 ifupdown 迁移时,可新建 /etc/systemd/network/10-oracle-ipv6.network,但要先确认这个文件名未被使用,且没有排序更靠前、会匹配同一接口的 .network 文件。
ini
[Match]
Name=ens3
[Network]
DHCP=yes
IPv6AcceptRA=yes
LinkLocalAddressing=ipv6把 ens3 换为真实接口名。DHCP=yes 启用 DHCP 客户端支持,IPv6AcceptRA=yes 允许接收路由通告;IPv6 地址和默认路由需要分别核对。保留原镜像要求的 DHCP 标识、MTU、路由和 DNS 设置,不用这个最小示例覆盖它们。networkd 采用第一个匹配的 .network 文件,新增文件不一定会生效。systemd 252 的 network 配置说明
通过控制台切换到 systemd-networkd
如果接口已经由 networkd 管理,只需在具有恢复条件时应用修改,并进入下一节验证。下面的迁移流程限定为:单网卡、当前由 ifupdown 管理 IPv4 DHCP、networkd 原先未运行,且 DNS 已有迁移后仍可工作的配置。
WARNING
切换会中断网络。先实际登录云平台串行控制台,确认能执行管理命令;只有 SSH 入口时不要继续。把配置备份路径和下方回退步骤保留在控制台可访问的位置,不依赖中断后的 SSH 会话。
在控制台重新设置前文已核对的接口变量,并检查是否还有对应的 ifup 实例单元:
sh
net_if='ens3'
systemctl status networking "ifup@${net_if}.service" --no-pager逐步停止已确认的旧管理单元,再启动 networkd。不要在 SSH 会话中把停止与启动命令串成一条来赌连接恢复。
sh
sudo systemctl stop networking只有上一步确认对应 ifup@ 单元存在且活动时,才额外停止它:
sh
sudo systemctl stop "ifup@${net_if}.service"确认旧管理器已释放目标接口后启动新管理器:
sh
sudo systemctl start systemd-networkd
networkctl status "$net_if"
sudo journalctl -u systemd-networkd -b -n 80 --no-pager检查日志中的配置解析、匹配文件、DHCP 和 RA 情况。如果新配置没有正确接管,先按本页末尾回退,再诊断原因;不要立即移除 ifupdown 或 DHCP 客户端。
验证后设置开机管理方式
在控制台检查地址、路由和 DNS;net_if 使用前文已经核对的接口名。
sh
ip -4 address show dev "$net_if"
ip -6 address show dev "$net_if"
ip -4 route show
ip -6 route show
getent ahostsv4 www.cloudflare.com
getent ahostsv6 www.cloudflare.com应看到预期的 IPv4、与 VNIC 分配一致的 IPv6 全局地址及所需默认路由。fe80:: 地址不足以证明公网可用。再通过已安装的 curl 测试两种协议的直连;--noproxy '*' 排除代理设置对检查结果的影响:
sh
curl --noproxy '*' -4 -I --connect-timeout 10 https://www.cloudflare.com/
curl --noproxy '*' -6 -I --connect-timeout 10 https://www.cloudflare.com/另开新的 SSH 会话并验证实际服务。SSH 恢复只证明该次连接可达,不能代替 IPv6、DNS 与重启测试。
从 ifupdown 迁移且以上检查都通过后,编辑原 /etc/network/interfaces 及其引入文件,移除目标接口的 auto / allow-hotplug / iface 段,保留回环接口等仍需使用的配置。然后设置启动方式:
sh
sudo systemctl enable systemd-networkd
sudo systemctl disable networking保留旧软件包和备份,在可接受中断的时间重启,再重复地址、路由、DNS、IPv4/IPv6 连接与新 SSH 会话检查。确认持久性后再评估是否清理旧组件;获取 IPv6 不要求立即卸载 ifupdown 或 isc-dhcp-client。
迁移失败时回退
以下仅对应本文“新建 10-oracle-ipv6.network、原由 ifupdown 管理”的迁移。若原本就是 networkd,应恢复编辑前的源配置并重新应用,而不是切换到 ifupdown。
在控制台把 network_backup 设为之前记录的真实备份目录,先确认备份存在。停止新管理器,将本次新文件移出匹配目录,恢复原 ifupdown 配置:
sh
network_backup='替换为先前记录的完整备份路径'
sudo systemctl stop systemd-networkd
sudo mv /etc/systemd/network/10-oracle-ipv6.network "$network_backup/10-oracle-ipv6.network.failed"
sudo cp -a "$network_backup/network/." /etc/network/
sudo systemctl start networking根据备份中的 unit-state.txt 恢复原来的开机启用状态;若曾修改 DNS 配置,也应恢复对应的源配置。重复检查原 IPv4、默认路由、DNS 和新 SSH 连接,待恢复后再排查 IPv6。不要在未确认备份与目标路径时照抄回退命令。