Ubuntu 18.04 LTS — 无法禁用 IPV6

Ubuntu 18.04 LTS — 无法禁用 IPV6
  1. 我想在我的私有 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

  1. 编辑 /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 重启

  1. 重启后,sudo ps -ae | grep ip 显示:

    ps -ae | grep ip  
    87 ?        00:00:00 ipv6_addrconf
    

为什么要运行这个 IPV6 进程?

  1. 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 个问题。

  1. 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
    
  2. 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。

相关内容