我已经对如何在 RedHat Linux 上禁用 IPv6 进行了大量研究,并且几乎完全禁用了它。但是环回接口仍然获取 inet6 环回地址 (::1/128)。我找不到仍启用 IPV6 进行环回的地方。
为了禁用 IPV6,我在 /etc/sysctl.conf 中添加了以下设置:
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6=1
并在 /etc/sysconfig/network 中添加了以下行:
NETWORKING_IPV6=no
重新启动后,inet6 地址从我的物理接口(eth0)上消失了,但是仍然存在:
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:56:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 10.x.x.x/21 brd 10.x.x.x scope global eth0
如果我手动从环回中删除 IPV6 地址,然后反弹接口,它会恢复:
# ip addr del ::1/128 dev lo
# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
# ip link set lo down
# ip link set lo up
# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
我相信应该在内核级别禁用 IPV6,这已由 sysctl 确认:
# sysctl net.ipv6.conf.lo.disable_ipv6
net.ipv6.conf.lo.disable_ipv6 = 1
还有什么其他想法会导致环回接口获取 IPV6 地址?
答案1
1) 通过创建包含以下内容的文件 /etc/modprobe.d/ECS.conf 禁用 ipv6 内核模块:
alias net-pf-10 off
alias ipv6 off
2)编辑/etc/sysconfig/network并设置:
NETWORKING_IPV6=off
3)禁用IPV6的iptables:
chkconfig ip6tables off
4)重启(我不建议手动删除ipv6内核模块)
答案2
我通常只是使用modprobe
/modload
框架来禁用加载ipv6
内核模块(在 Debian - Red Hat 上/etc/modules
,/etc/modprobe.d
可能选择了不同的目录),或者如果构建自定义内核,则不构建 IPv6 支持。