如何永久禁用 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