![如何在 Linux 上禁用特定接口上的 ipv6?](https://linux22.com/image/1357683/%E5%A6%82%E4%BD%95%E5%9C%A8%20Linux%20%E4%B8%8A%E7%A6%81%E7%94%A8%E7%89%B9%E5%AE%9A%E6%8E%A5%E5%8F%A3%E4%B8%8A%E7%9A%84%20ipv6%EF%BC%9F.png)
有人能告诉我如何在 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)