什么是IPv6
Internet Protocol version 6 (簡稱IPv6) 是 Internet Protocol(互聯(lián)網(wǎng)協(xié)議) (IP)的最新一個(gè)版本酿矢,IPv6主要是為了解決IPv4地址枯竭的問題而開發(fā)的,目的是為了替換當(dāng)前所用的IPv4店溢。
雖然IPv6天生是為了替代IPv4的(生而自豪)酒唉,而且最近幾年IPv4地址也已然分配完矩桂,但是由于NAT這種技術(shù)的存在,使得IPv6還沒有真正意義上的"取代"IPv4痪伦。尤其是在“我大宋”侄榴,除了教育網(wǎng)有IPv6的環(huán)境以外,其他基本都不支持IPv6网沾。不過國外貌似發(fā)展的還可以癞蚕,好些運(yùn)營商都已經(jīng)開始支持IPv6了。
IPv6的毛病
毛不愿纭桦山?IPv6其實(shí)沒毛病,而且作為要替換IPv4的下一代協(xié)議醋旦,優(yōu)點(diǎn)還很多恒水。:)只是因?yàn)槲覀兩硖幪斐蠂W(wǎng)絡(luò)根本就不支持IPv6饲齐,所以即使Linux系統(tǒng)缺省就支持IPv6钉凌,作為崇尚潔癖的系統(tǒng)管理員、運(yùn)維工程師們捂人,自然是嬸嬸可以忍御雕,叔叔不可忍J秆亍(是可忍,孰不可忍)饮笛。
好啦咨察,以上純屬扯蛋,說正經(jīng)的福青,剛開始的時(shí)候摄狱,如果在不支持IPv6的環(huán)境里啟用IPv6協(xié)議的話,是會(huì)導(dǎo)致很多性能問題的无午,但最近些年媒役,各種操作系統(tǒng)也做了不少調(diào)整,到目前其實(shí)真沒發(fā)現(xiàn)IPv6會(huì)對(duì)性能造成多大影響宪迟。一個(gè)長期以來大家都認(rèn)可的理由就是:IPv6會(huì)優(yōu)于IPv4酣衷,也就是說,一個(gè)數(shù)據(jù)包在發(fā)送時(shí)首先會(huì)先嘗試IPv6的網(wǎng)關(guān)次泽,然后再是IPv4的穿仪。其實(shí)就算這種情況是真的,我們也是可以通過/etc/gai.conf文件來調(diào)整的意荤。
幾種姿勢
下面介紹幾種在Linux系統(tǒng)里干掉IPv6的方法啊片。
sysctl大法
幾乎所有的Linux系統(tǒng)......好吧好吧,我就說我確認(rèn)的吧玖像,Debian系和RedHat系......算啦紫谷,最最最確認(rèn)的就是CentOS(當(dāng)然rhel也一樣)下,可以在/etc/sysctl.d/目錄下新建文件叫ipv6.conf(Linux系統(tǒng)在啟動(dòng)時(shí)會(huì)自動(dòng)讀取/etc/sysctl.conf以及/etc/sysctl.d/目錄下的文件捐寥,并用sysctl -p來執(zhí)行的笤昨,這里以.conf為擴(kuò)展名是為了兼容CentOS7.x的系統(tǒng),CentOS7.x認(rèn)的是是“/etc/sysctl.d/<name>.conf”這種文件)握恳,文件的內(nèi)容是:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
配置完畢如果不重啟機(jī)器的話瞒窒,可以直接執(zhí)行命令:
sysctl -p /etc/sysctl.d/ipv6.conf;
強(qiáng)制讓其生效。然后再用命令
ip a s;
看乡洼,會(huì)發(fā)現(xiàn)原來的很多inet6的地址不存在了根竿,配置生效了!
但需要注意的是:這種方式并沒有真正把ipv6模塊從內(nèi)核里清除掉就珠,不信用命令
lsmod | grep -i ipv6;
看寇壳,還是會(huì)有很多在用ipv6模塊的。在這些模塊里妻怎,又有好些并不是完全依賴ipv6模塊不可的壳炎,只有極少數(shù)的是必須要ipv6模塊的,所以,我們可以用后面的方法把ipv6模塊以后系統(tǒng)還能正常工作匿辩。
modprobe劫持
此法又稱“釜底抽薪”腰耙,CentOS7.x下不支持,CentOS6.x下測試可用铲球。具體原理是截獲系統(tǒng)自動(dòng)加載ipv6模塊的動(dòng)作挺庞,直接返回true,并且將ipv6模塊加入黑名單(blacklist)稼病。這樣系統(tǒng)就沒法通過
modprobe ipv6;
或
insmod ipv6;
來加載ipv6模塊了选侨。具體方法如下:
echo -e "install ipv6 /bin/true\nblacklist ipv6" >\
/etc/modprobe.d/ipv6.conf;
reboot; # 這種辦法必須要重啟機(jī)器來完全生效
機(jī)器重啟過后再通過
lsmod | grep -i ipv6;
來看是看不到ipv6模塊的,表示ipv6模塊已經(jīng)完全被從內(nèi)核里除掉然走。
GRUB參數(shù)
注意:此法僅適用于CentOS7.x援制!
此法的原理是在GRUB里直接將參數(shù)"ipv6.disable=1"傳遞給內(nèi)核,這樣啟動(dòng)時(shí)內(nèi)核會(huì)根據(jù)這個(gè)參數(shù)不再加載ipv6模塊芍瑞。
具體方法是:
if grep -q "ipv6.disable=1" /etc/default/grub
then
echo "\"ipv6.disable=1\" found in /etc/default/grub"
else
sed -i.ori 's/^GRUB_CMDLINE_LINUX="/&ipv6.disable=1 /' /etc/default/grub
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
fi
# 此法自然也需要重啟機(jī)器晨仑,于是:
reboot
個(gè)人推薦的解決方案
- CentOS7.x下慎用GRUB法,因?yàn)橐坏┯肎RUB法拆檬,以后萬一有某個(gè)模塊需要ipv6洪己,那非重新修改GRUB文件并重啟機(jī)器不能成功的
- CentOS6.x下的話,建議用sysctl法和modprobe法結(jié)合竟贯,如果碰到有一定要依賴于ipv6的模塊要加載答捕,直接修改/etc/modprobe.d/ipv6.conf,注釋掉相關(guān)語句以后澄耍,再重新就能modprobe ipv6了