如何在 Linux 上禁用特定接口上的 ipv6?

如何在 Linux 上禁用特定接口上的 ipv6?

有人能告诉我如何在 CentOS 中禁用特定网络接口上的 ipv6 自动配置吗?

目前的情况是:

一台 PC 有两个网络适配器 eth0 和 eth1,它们连接到同一个 LAN,其中 IPv6 路由器使用 NDRA(邻居发现路由器通告)数据包通告 IPv6 前缀。因此,eth0 和 eth1 都自动使用该前缀配置 IPv6 地址。

但是,我只想在 eth1 上启用 ipv6,在 eth0 上禁用它。我尝试了以下方法,但它们不起作用。

1. /etc/sysconfig/network

NETWORKING_IPV6=no
IPV6_AUTOCONF=no

这将禁用 eth0 和 eth1 上的 ipv6。

2. /etc/sysconfig/network-scripts/ifcfg-eth0

IPV6INIT=no
IPV6_AUTOCONF=no

然后就不行了,我已经重启网络服务了。

答案1

您可以使用以下行从 /etc/sysctl.conf 禁用它:

net.ipv6.conf.eth0.disable_ipv6 = 1

查看 /proc/sys/net/ipv6/conf/eth0。您可以在该目录中设置许多选项,例如保持 IPv6 启用但禁用 autoconf 等。

答案2

让接口名称存储在iface变量中(必须适应您的情况):

$ iface=eth0

那么命令是:

$ sudo sysctl -w net.ipv6.conf.$iface.disable_ipv6=1

弃用

# echo 1 > /proc/sys/net/ipv6/conf/$iface/disable_ipv6

为了确保此更改在重新启动后仍然有效,您需要将以下行添加到文件中/etc/sysctl.conf

net.ipv6.conf.$iface.disable_ipv6=1

检查更改是否保留(特别是重启后):

$ sysctl -n net.ipv6.conf.$iface.disable_ipv6
1

答案3

暂时删除接口上的 ipv6 的一种方法是: (重启后它将恢复)

ip -6 addr flush eth0

答案4

在ifcfg-eth0或ifcfg-eth1中使用以下变量:

IPV6INIT=no
IPV6_AUTOCONF=no

应该可以解决问题。重申一下:

/etc/sysconfig/网络

NETWORKING_IPV6=yes
IPV6_AUTOCONF=yes

/etc/sysconfig/网络脚本/ifcfg-eth0

IPV6INIT=no
IPV6_AUTOCONF=no

/etc/sysconfig/网络脚本/ifcfg-eth0

IPV6INIT=yes
IPV6_AUTOCONF=yes

然后确保重新启动网络服务:

% /etc/init.d/network restart

如果您运行,ifconfig您应该在启用了 ipv6 的以太网设备(eth0 或 eth1)上看到 inet6。

% ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 01:26:BD:85:CA:30  
          inet addr:192.168.1.20  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::226:c7ff:fe85:a720/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2497072 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2253781 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2004576667 (1.8 GiB)  TX bytes:1296051472 (1.2 GiB)

相关内容