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


22

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

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

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

Answers:


21

可以通过以下方式临时禁用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,系统将使用Link本地地址(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你的界面在哪里


3
此外,如果主机本身是路由器(即已net.ipv6.conf.all.forwarding=1设置),则将禁用自动地址配置和路由器发现。
加特

4

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

如果要禁用自动配置,请如上所述将autoconf sysctl设置为off,或者关闭RA中的Prefix Information Option(PIO)中的A(自动配置位)。


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

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

sudo sysctl -w net.ipv6.conf.default.autoconf=0

3

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和设备。


这只是让我在这方面的日子:了几个月:D
anthonysomerset 18/09/19

2
我通常只是刮擦Google直到找到它。
Jeroen Vermeulen-MageHost

1
正如我尝试过的那样,此方法有效,但是问题就象Mark S所提到的那样,关闭accept-ra是非常危险的-它似乎起作用,但稍后您可能会发现丢失了数据包,因为它们碰到了碎片点或故障转移路由器。用来。此外,它还会中断ping操作。我尝试执行此操作的原因是要可靠地匹配外发邮件中的SPF记录,但后来我意识到我应该在记录中使用网络掩码,因为在IPv6中,一定范围的地址实际上属于一台计算机,而不是单个地址。
Phil McKerracher '18

2

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

我禁用ipv6的解决方案是将netplan中的本地链接配置为空标量(前提是您没有本地链接ipv4 IP)

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

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

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

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

我真的很喜欢您的干净解决方案。由于我们不使用链接本地地址,因此添加空标量是理想的解决方案。之后,我们必须重新启动服务器,因为netplan应用会在我们两个以太网接口上保留已经分配的IPv6地址。但是重新启动后,一切都按您说的进行。我认为没有理由在回送接口上禁用IPv6,因此我只是跳过了sysctl部分。谢谢!
Zoltan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.