如何在 Linux 中禁用 IPv6 的自动配置?

如何在 Linux 中禁用 IPv6 的自动配置?

如何永久禁用 Linux 中的 IPv6 自动配置?当我尝试使用以下命令从接口手动删除地址时:

ip -6 addr del 2001:0db8:85a3:0000:0000:8a2e:0370:7334/64 dev eth1

它会在几秒钟后重新出现,我希望它永远消失,但又不完全禁用 IPv6。

答案1

可以使用以下命令暂时禁用 eth1 的自动配置:

sudo sysctl -w net.ipv6.conf.eth1.autoconf=0
sudo sysctl -w net.ipv6.conf.eth1.accept_ra=0

或对于所有接口:

sudo sysctl -w net.ipv6.conf.all.autoconf=0
sudo sysctl -w net.ipv6.conf.all.accept_ra=0

通过在调用中使用 1 而不是 0 来重新启用。

可以通过输入 来永久禁用它/etc/sysctl.conf。在 Debian Etch 上(可能在较新的版本中也是如此),如果不设置accept_ra,系统将使用链接本地地址 ( fe80..)自动配置

正如 Gart 在下面提到的,如果主机本身是路由器,而accept_ra不是2,则自动地址配置和路由器发现将被禁用,即

net.ipv6.conf.<iface|all|default>.forwarding=1

net.ipv6.conf.<iface|all|default>.accept_ra=0 或者net.ipv6.conf.<iface|all|default>.accept_ra=1

iface你的界面在哪里

答案2

sysctl解决方案在 Ubuntu 18.04 Bionic 上不起作用。我们通过以下方式解决了该问题:

编辑/etc/netplan/01-netcfg.yaml、配置:

network:
  ...
  ethernets:
    eth0:
      ...
      dhcp6: no
      accept-ra: no

您可能需要使用您的接口名称而不是eth0。保存文件后执行:

netplan apply或者reboot

如果您已经从自动配置中获得了 IPv6 IP,并且想要在不重新启动的情况下删除它,您可以执行:

ip -6 addr del 1111:2222:1:0:aaaa:bbbb:cccc:dddd/64 dev eth0 

当然你需要替换这个命令中的IP和设备。

答案3

不应执行上面的 net.ipv6.conf.all.accept_ra=0,因为 RA 是指示前缀的在线和离线链路所必需的(根据 RFC5942),以及许多其他参数的自动配置,例如 MTU、邻居发现超时等。

如果您想要禁用自动配置,请按照上述方法设置 autoconf sysctl off,或者关闭 RA 中前缀信息选项 (PIO) 中的 A(自动配置位)。

答案4

Ubuntu 18 和 ipv6 的问题在于 systemd-networkd 控制内核参数,因此尽管可以使用 sysctl 禁用 ipv6,但如果配置没有其他说明,networkd 会非常乐意为您打开它们。

我禁用 ipv6 的解决方案是将 netplan 中的 link-local 配置为一个空标量(假设您没有 link-local ipv4 IP)

network:
     version: 2
     renderer: networkd
     ethernets:
     eth0:
        ..
        link-local: [ ]

该配置将编译 networkd 的配置,该配置将发布在 /run/systemd/network/10-netplan-eth0.network 中,并将说服 networkd 不要为 eth0 设置 ipv6

如果您还想在环回上禁用 ipv6,则可以通过将内核参数 net.ipv6.conf.all.disable_ipv6 设置为 1 来轻松实现。networkd 似乎无法控制环回。

sysctl -w net.ipv6.conf.all.disable_ipv6=1

相关内容