Debian 13关闭ipv6隐私扩展(SLAAC 和 EUI64)

8–12 分钟

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

NetplanUbuntu 和 Debian 系列系统中(包括 Debian 13 “Trixie”)用于配置网络的一个工具。
它是传统网络配置方式(例如 /etc/network/interfacesifupdown)的现代替代方案。

它是一个基于 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 工作原理

  1. 你在 /etc/netplan/ 下编写 YAML 配置文件。
  2. 运行命令:sudo netplan apply
  3. Netplan 解析配置文件,并根据后端类型生成相应的配置(如 systemd-networkd 的 .network 文件)。
  4. 后端服务(例如 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地址

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注