linux内核版本:6.12.57+deb13+cloud+amd64
1. 前提概要
最近我用我的vps搭建邮件服务器的时候,我给我的mail.bytevibe.dev这个域名配置ipv6地址2606::10(中间有些数字省略了).但是我部署完了我的邮件服务器,给Google发送电子邮件的时候,发现我的邮件的 SPF 出现 softfail,这对我的邮局的信誉有很大的影响,经过我的排查,发现debian 13系统自动给我分配了一个别的ipv6地址,导致邮件服务器用这个ipv6发送邮件,与我dns配置的ipv6不符,所以 SPF 出现 softfail。
2. 为什么会出现随机的ipv6地址
Debian 13 默认启用了 IPv6 隐私扩展,所以系统会自动生成一个随机的 IPv6 地址。其实这也是一种安全的做法,随机的ipv6可以防止黑客攻击
3.怎么关闭Debian的ipv6隐私扩展
我一开始修改了systemd-networkd的配置文件,文件夹在/etc/systemd/network/,修改完后发现似乎不起作用,我手动将随机的ipv6删除后过了几秒这个ipv6又回来了。
后来,经过我的研究,发现了Debian 13 的 systemd-networkd 会自动生成 IPv6 地址(EUI-64 方式),并且 SLAAC是 开启 的,所以系统从路由器收到 RA后,会:
- 自动生成一个基于网卡 MAC 的全局 IPv6(就是我不想要的那个ipv6)
- 永远自己重新创建这个地址
- 即使你删除,它也会再次出现
但是上面我自己修改了systemd-networkd的配置文件怎么还不起作用,后来我发现罪魁祸首是netplan。
4. 什么是Netplan
Netplan 是 Ubuntu 和 Debian 系列系统中(包括 Debian 13 “Trixie”)用于配置网络的一个工具。
它是传统网络配置方式(例如 /etc/network/interfaces 或 ifupdown)的现代替代方案。
它是一个基于 YAML 文件的网络配置框架,用于定义网络接口(有线、无线、桥接、虚拟接口等)的设置。
它本身不直接控制网络,而是作为一个前端配置层,把你的配置文件转换并应用到不同的底层网络后端(backend),比如:
- systemd-networkd
- NetworkManager
这样,Netplan 负责解析和生成配置,而底层服务负责真正的网络管理。
4. 1 配置文件位置
Netplan 的配置文件通常存放在:
/etc/netplan/
常见文件名示例:
/etc/netplan/01-netcfg.yaml
/etc/netplan/50-cloud-init.yaml
这些文件使用 YAML 格式定义网络接口和设置。
4.2 工作原理
- 你在
/etc/netplan/下编写 YAML 配置文件。 - 运行命令:sudo netplan apply
- Netplan 解析配置文件,并根据后端类型生成相应的配置(如 systemd-networkd 的
.network文件)。 - 后端服务(例如 NetworkManager)根据这些生成的配置实际管理网络接口。
4.3 常用命令
| 命令 | 功能 |
| netplan apply | 应用配置 |
| netplan try | 临时应用配置(可自动回滚) |
| netplan generate | 生成后端配置文件,但不应用 |
| netplan get | 查看当前配置 |
| netplan set | 临时修改配置(测试用) |
5. 编辑 netplan YAML 文件来禁用 SLAAC 和 EUI64
步骤 1:编辑 netplan 禁用 IPv6 自动地址
找到 netplan 文件并编辑,例如:
nano /etc/netplan/50-cloud-init.yaml
添加以下配置(按你的 eth0 修改名称):
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no # 禁用 DHCPv6
accept-ra: no # 禁用 Router Advertisements
addresses:
- **.**.**.**/29
- **:**:**:**::10/64
gateway4: **.**.**.**
gateway6: **:**:**:**::1
nameservers:
addresses:
- 8.8.4.4
- 8.8.8.8
关键是这两行:
dhcp6: no
accept-ra: no
这会 完全阻止系统自动生成 IPv6 地址。
步骤 2:应用配置
netplan apply
步骤 3:删除残留的自动 IPv6
ip -6 addr del **::**/64 dev eth0
步骤 4:确认只有你指定的 IPv6 存在
ip -6 addr show dev eth0
应该只看到:
****::10/64
fe80::xxxx (link-local, 正常)
不会再看到临时生成的ipv6地址
发表回复