You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 17.10无法禁用SLAAC:始终存在两个动态地址

解决Ubuntu 17.10无法禁用SLAAC、出现双动态IPv6地址的问题

我之前在Ubuntu 17.10上也碰到过一模一样的情况——没装NetworkManager,/etc/network/interfaces里只有回环配置,但网卡还是自动生成两个动态IPv6地址,SLAAC怎么关都没用。后来发现是systemd-networkd在后台接管了网络配置,这是Ubuntu 17.10默认的网络管理工具之一,很容易被忽略。

下面是我亲测有效的解决步骤:

第一步:确认网络管理工具与接口名

首先先确认你的系统正在用systemd-networkd管理网络,同时找到目标网卡的接口名:

  • 执行 networkctl status,查看输出里的网络接口状态,确认是否由systemd-networkd托管
  • 执行 ip link show,记下你的网卡接口名(比如eth0、ens33之类的)

第二步:配置systemd-networkd禁用SLAAC

systemd-networkd会默认对未配置的接口启用SLAAC,所以我们需要给目标网卡创建专属配置文件:

  1. 创建配置文件(把eth0替换成你的接口名):
    sudo nano /etc/systemd/network/20-eth0.network
    
  2. 写入以下配置内容:
    [Match]
    Name=eth0  # 这里一定要替换成你的实际接口名
    
    [Network]
    IPv6Autoconfig=no  # 直接禁用SLAAC自动配置
    IPv6AcceptRA=no    # 拒绝路由器通告(RA会触发SLAAC地址生成)
    # 如果需要静态IPv6地址,取消下面一行的注释并修改为你的地址
    # Address=2001:db8::123/64
    
  3. 保存文件后,重启systemd-networkd服务让配置生效:
    sudo systemctl restart systemd-networkd
    

第三步:用sysctl加固配置(可选但推荐)

为了彻底防止SLAAC生效,我们可以通过sysctl参数全局或针对单个接口禁用自动配置:

  1. 创建sysctl配置文件:
    sudo nano /etc/sysctl.d/99-disable-slaac.conf
    
  2. 写入以下内容(同样替换eth0为你的接口名):
    # 全局禁用IPv6自动配置
    net.ipv6.conf.all.autoconf=0
    net.ipv6.conf.all.accept_ra=0
    # 针对目标接口单独禁用
    net.ipv6.conf.eth0.autoconf=0
    net.ipv6.conf.eth0.accept_ra=0
    
  3. 生效配置:
    sudo sysctl --system
    

验证结果

执行以下命令检查IPv6地址列表,确认动态SLAAC地址已经消失:

ip -6 addr show eth0

如果还有问题,可以查看systemd-networkd的日志排查错误:

journalctl -u systemd-networkd -f

内容的提问来源于stack exchange,提问作者Seolh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:21:25