我想在我的私有 GCP 云网络上禁用 ipv6。由于 Google 在 GCP 负载均衡器上终止了 ipv6,因此我在内部网络上不需要它,因此我编辑了 /etc/sysctl.conf
# disable ipv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.ens4.disable_ipv6 = 1
当然是 sudo /etc/sysctl -p
- 编辑 /etc/default/grub 如下:
sudo vi /etc/default/grub
修改 GRUB_CMDLINEs 如下:
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
GRUB_CMDLINE_LINUX="ipv6.disable=1"
然后执行:
sudo update-grub
sudo 重启
重启后,sudo ps -ae | grep ip 显示:
ps -ae | grep ip 87 ? 00:00:00 ipv6_addrconf
为什么要运行这个 IPV6 进程?
netstat -a 显示
tcp6 0 0 [::]:ssh [::]:* LISTEN udp 0 0 localhost:domain 0.0.0.0:* udp 0 0 haproxy.fr:bootpc 0.0.0.0:* udp 0 0 localhost:323 0.0.0.0:* udp6 0 0 ip6-localhost:323 [::]:* raw6 0 0 [::]:ipv6-icmp [::]:*
我编辑了 sshd_config 并删除了 ipv6 侦听器地址。这阻止了 SSH 侦听 ipv6 地址。仍然没有回答上面的第 3 个问题。
sudo dmesg |查找 IP地址
[ 0.012014] Calibrating delay loop (skipped) preset value.. 4400.00 BogoMIPS (lpj=8800000) [ 0.056601] smpboot: Total of 1 processors activated (4400.00 BogoMIPS) [ 0.201233] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO [ 0.471145] Segment Routing with IPv6 [ 3.875631] IPv6: ADDRCONF(NETDEV_UP): ens4: link is not ready
cat /proc/sys/net/ipv6/conf/all/disable_ipv6 生成:“1”,理论上表示 ipv6 已禁用。但我不确定 ipv6 是否按照上面的 #3 完全禁用。有人能告诉我上面的 #3 是什么意思吗?
注意:IPV4 运行良好。
答案1
我很确定您确实通过编辑 sysctl 禁用了 IPV6。
默认情况下,ip a
在原始 Ubuntu 18.04 图像上返回以下内容:
[...]
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc fq_codel state UP group default qlen 1000
link/ether [REDACTED] brd ff:ff:ff:ff:ff:ff
inet [REDACTED]/32 scope global dynamic ens4
valid_lft 86257sec preferred_lft 86257sec
inet6 [REDACTED]/64 scope link
valid_lft forever preferred_lft forever
然而,之后:
printf "\nnet.ipv6.conf.all.disable_ipv6 = 1\nnet.ipv6.conf.default.disable_ipv6 = 1\nnet.ipv6.conf.lo.disable_ipv6 = 1\nnet.ipv6.conf.ens4.disable_ipv6 = 1\n">> /etc/sysctl.conf
sysctl -p
使用ip a
,你应该看到这样的结果:
[...]
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc fq_codel state UP group default qlen 1000
link/ether [REDACTED] brd ff:ff:ff:ff:ff:ff
inet [REDACTED]/32 scope global dynamic ens4
valid_lft 85786sec preferred_lft 85786sec
请注意整个inet6
部分现在已经消失了。
讽刺的是,我遇到了这个错误测试时。解决方法是添加 sysctl -p 作为启动脚本到实例。
至于该ipv6_addrconf
进程,它是一个系统进程,使用 modprobe 禁用该模块似乎没有多大作用:
modprobe --remove ipv6
将其列入黑名单也摆脱不了它。
我一般不建议这样做,因为该进程只是闲置在那里什么也不做,如果你篡改它,你可能会遇到内核问题,特别是如果你不确定它做了什么。我发现唯一一篇深入介绍 IPv6 模块的好文章这是。您的网络接口无论如何都不会使用 IPv6。