IPv6很香,但当前的普及情况下,不是说一定不会给我们的使用和开发带来问题。我现在正基于Ubuntu开发调试TCP/IP协议栈,发现Ubuntu会默认给每块网卡配置一个IPv6的地址,有了IPv6地址之后,相应的协议数据就会发给这个网卡,导致数据混乱,不利于开发。所以为了开发的便捷,先将IPv6机制禁止掉。
方法1:使用GRUB永久禁用IPv6
配置GRUB,使其在系统启动时向内核传递参数,禁用IPv6。
该方法主要是修改 /etc/default/grub 中的相关启动参数。这种方法是最简单的方法,但需要你重启系统。
第一步:修改 /etc/default/grub 启动参数
下图是我们修改之前的启动参数配置:
修改方法如下:
1 | $ sudo vi /etc/default/grub |
找到下面这行:
1 | GRUB_CMDLINE_LINUX="" |
然后修改参数:
1 | GRUB_CMDLINE_LINUX="ipv6.disable=1" |
修改后的文件如下图所示:
第二步:更新GRUB,然后重启系统
使用如下命令:
1 | $ sudo update-grub |
第三步:重启之后,我们看下网卡是否还有IPv6地址
配置之前:
配置之后:
可见,网卡上已经没有了IPv6的地址。
方法2:使用sysctl临时禁用IPv6
我们使用如下命令来临时禁用IPv6:
1 | $ sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 |
使用效果如下图所示:
这种方法不需要我们重启操作系统,也达到了禁用IPv6的效果。但注意:这种方法只是临时禁用,系统重启之后,IPv6会重新启用。
方法3:使用sysctl永久禁用IPv6
如果要使用sysctl达到永久禁用IPv6的效果,那我们需要修改配置文件 /etc/sysctl.conf ,从而使内核参数持久化。
这里我们按照别人的经验,不直接修改 /etc/sysctl.conf ,而是创建一个 /etc/sysctl.d/60-custom.conf 自定义配置文件。
第一步:使用如下命令,创建并打开 /etc/sysctl.d/60-custom.conf :
1 | sudo vi /etc/sysctl.d/60-custom.conf |
第二步:然后将如下三行内容拷贝到该文件中:
1 | net.ipv6.conf.all.disable_ipv6 = 1 |
第三步:使用如下命令,使得新配置文件生效
1 | $ sudo sysctl -p |
最终文件如下所示:
然后我们查看下结果,确实不再有IPv6地址了。
但注意!注意!注意! 使用该方法不一定保证重启后,马上可以起效,所以为了保证重启有效,请一定要进行第四步。
第四步:创建启动加载文件 /etc/rc.local
我们使用如下命令,创建并打开 /etc/rc.local :
1 | $ sudo vi /etc/rc.local |
然后将如下内容拷贝到该文件中:
1 |
|
最终文件如下所示:
然后修改 /etc/rc.local 的文件权限,使其具有可执行属性:
1 | $ sudo chmod 0755 /etc/rc.local |
至此,我们再次重启之后,将会发现网卡已经不再有IPv6地址了,从而达到了我们永久禁用IPv6的目的。
方法4:使用netplan永久禁用IPv6
Ubuntu使用netplan来配置网络,我们可以在其配置文件,给特定的某张网卡指定 link-local: [ ipv4 ] 属性,从而只启用IPv4,而不启用IPv6的效果。该方法也可以做到永久起效。
使用方法如下图所示,在ens33的配置项中,添加 link-local: [ ipv4 ]:
修改配置文件之后,使用如下命令,使其生效:
1 | $ sudo netplan apply |