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

Gru*_*bel 30 networking linux ipv6 ubuntu

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

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

它会在几秒钟后重新出现,我希望它永久消失,但不要一起禁用 IPv6。

Gru*_*bel 25

可以暂时禁用 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=0net.ipv6.conf.<iface|all|default>.accept_ra=1

iface你的界面在哪里

  • 此外,如果主机本身是路由器,即设置了`net.ipv6.conf.all.forwarding=1`,则自动地址配置和路由器发现将被禁用。 (4认同)

小智 9

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

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


Jer*_*ost 8

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

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

network:
  ...
  ethernets:
    eth0:
      ...
      dhcp6: no
      accept-ra: no
Run Code Online (Sandbox Code Playgroud)

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

netplan apply 或者 reboot

如果您已经从自动配置中收到一个 IPv6 IP,并且您想在不重新启动的情况下将其删除,您可以执行:

ip -6 addr del 1111:2222:1:0:aaaa:bbbb:cccc:dddd/64 dev eth0 
Run Code Online (Sandbox Code Playgroud)

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

  • 我通常只是在谷歌上搜索,直到找到它。 (2认同)
  • 这在我尝试时有效,但问题是关闭 accept-ra 非常危险,正如 Mark S 所提到的 - 它似乎有效,但稍后您可能会发现您丢失了数据包,因为它们遇到了碎片点或故障转移路由器用来。它也打破了ping。我尝试这样做的原因是为了在外发邮件中可靠地匹配我的 SPF 记录,但后来我意识到我应该在记录中使用网络掩码,因为在 IPv6 中,一系列地址实际上属于一台机器,而不是单个地址. (2认同)

小智 6

sudo sysctl -w net.ipv6.conf.all.autoconf=0
Run Code Online (Sandbox Code Playgroud)

这在 Debian Wheezy 上对我不起作用。在检查 /etc/sysctl.conf 后我需要使用

sudo sysctl -w net.ipv6.conf.default.autoconf=0
Run Code Online (Sandbox Code Playgroud)