IPv6被认为是IPv4的替代产品,它用来解决现有IPv4地址空间即将耗尽的问题。
但目前,开启IPv6可能会导致一些问题。因此有时我们需要关闭IPv6。
下面是IPv6的关闭方法应该适用于所有主流的Linux发行版包括Ubuntu、Debian、CentOS。
IPv6在CentOS6.5系统中默认是启用状态,通过以下方式可以确认IPv6的状态
1.1.查看系统IPv6的启用状态
以下命令返回值为0表示IPv6启用,1表示禁用
cat /proc/sys/net/ipv6/conf/all/disable_ipv6cat /proc/sys/net/ipv6/conf/default/disable_ipv6
ifconfigip address list
netstat-anptl
1.2.查看内核模块调用
# 有返回结果,说明IPv6模块已启用,可以看出那些程序进行了调用,反之没有启用
lsmod | grep ipv6
2.禁用IPv6
2.1.临时禁用IPv6
# 命令行调整内核参数,临时禁用IPv6
echo 1 >/proc/sys/net/ipv6/conf/all/disable_ipv6echo 1 >/proc/sys/net/ipv6/conf/default/disable_ipv6
# 或着
sysctl-w net.ipv6.conf.all.disable_ipv6=1sysctl-w net.ipv6.conf.default.disable_ipv6=1
2.2.永久禁用IPv6
echo " ">>/etc/sysctl.confecho "# made for disabled IPv6 in $(date +%F)">>/etc/sysctl.confecho 'net.ipv6.conf.all.disable_ipv6 = 1'>>/etc/sysctl.confecho 'net.ipv6.conf.default.disable_ipv6 = 1'>>/etc/sysctl.confecho 'net.ipv6.conf.lo.disable_ipv6 = 1'>>/etc/sysctl.conftail -5 /etc/sysctl.conf
sysctl-p
netstat-anptl
也可以直接编辑系统内核配置文件
vim /etc/sysctl.conf------------------------------------------------------# Madefordisabled IPv6 .
net.ipv6.conf.all.disable_ipv6= 1net.ipv6.conf.default.disable_ipv6= 1net.ipv6.conf.lo.disable_ipv6= 1
-------------------------------------------------------
# 如果想要为特定的网卡禁止IPv6,比如eth1,改为添加下面的行。
net.ipv6.conf.eth1.disable_ipv6 = 1
# 注意检查修改network配置文件中的IPv6配置
vim /etc/sysconfig/network
--------------------------------------
NETWORKING_IPV6=no
--------------------------------------
# 注意修改ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0----------------------------------IPV6INIT=no----------------------------------
2.3.拓展:禁用IPV6后,可能会导致某些服务无法启动
1)修改ssh配置,只监听IPv4地址
vim /etc/ssh/sshd_config----------------------------------------# 在第15行的前面去掉注释(#):
ListenAddress0.0.0.0AddressFamily inet----------------------------------------service sshd restart
netstat-anptl
# 注意:inet为仅IPv4,inet6为仅IPv6,any为都支持
2)mysql配置问题
mysql安装后默认会监听IPv6地址,关闭IPv6后,需要编辑,在[mysqld]中添加
vim /etc/my.cnf----------------------------------------bind-address=0.0.0.0
----------------------------------------
修改完重启mysql即可
3)配置redis,监听IPv4地址
vim /usr/local/redis/conf/redis.conf----------------------------------------bind127.0.0.1
----------------------------------------
4)配置memcached,监听IPv4地址
# 配置memcached,监听地址需要使用IP,使用localhost无法启动memcached
# memcached/usr/local/memcached/bin/memcached -u root -p 12001 -l 127.0.0.1 -d -P /tmp/memcached1.pid
5)配置VSFTP
vim /etc/vsftpd/vsftpd.conf----------------------------------------listen=YES
listen_ipv6=NO----------------------------------------
6)配置postfix监听IPv4地址
vim /etc/postfix/main.cf----------------------------------------inet_interfaces= 127.0.0.1
----------------------------------------
7)配置dovecot监听IPv4地址
vim /etc/dovecot/dovecot.conf----------------listen*
----------------
8)配置xinetd
# xinetd.conf第32行修改为:
vim/etc/xinetd.conf------------------------bind= 0.0.0.0
------------------------# 重新载入配置文件
service xinetd reload
以上是禁用IPv6之后可能会受到影响的程序,可以根据自己的实际情况进行配置
3.配置启用IPv6
3.1.查看linux系统的IPv6状态
cat /proc/sys/net/ipv6/conf/all/disable_ipv6cat /proc/sys/net/ipv6/conf/default/disable_ipv6
3.2.调整内核参数立即启用IPv6
echo 0 >/proc/sys/net/ipv6/conf/all/disable_ipv6echo 0 >/proc/sys/net/ipv6/conf/default/disable_ipv6
# 或着
sysctl-w net.ipv6.conf.all.disable_ipv6=0sysctl-w net.ipv6.conf.default.disable_ipv6=0
修改完是临时的,重启失效
3.3. 修改内核参数,启用IPv6配置
vim /etc/sysctl.conf----------------------------------------------net.ipv6.conf.all.disable_ipv6= 0net.ipv6.conf.default.disable_ipv6= 0net.ipv6.conf.lo.disable_ipv6= 0
----------------------------------------------sysctl-p
3.4.手动调用系统ipv6内核
modprobe ipv6
3.5.报错处理
[root@zstest ~]# modprobeipv6
FATAL: Module off not found.
失败原因:未启用IPv6模块
解决方法:
需要编辑配置文件,启用IPv6内核模块,在禁用状态下无法调用ipv6模块
该处理需要重启系统,启动后ipv6模块自动调用
vim /etc/modprobe.d/disable_ipv6.conf--------------------------------#alias net-pf-10off
#alias ipv6 off
options ipv6 disable=0
---------------------------------[root@zstest~]# lsmod |grepipv6
ipv6335781 14
完毕,呵呵呵呵