A. 如何在linux下禁用IPv6
IPv6被認為是IPv4——互聯網上的傳統32位地址空間——的替代產品,它用來解決現有IPv4地址空間即將耗盡的問題。然而,由於已經有大量主
機、設備用IPv4連接到了互聯網上,所以想在一夜之間將它們全部切換到IPv6幾乎是不可能的。許多IPv4到IPv6的轉換機制(例如:雙協議棧、網
絡隧道、代理)
已經被提出來用來促進IPv6能被採用,並且很多應用也正在進行重寫,如我們所提倡的,來增加對IPv6的支持。有一件事情可以確定,就是在可預見的未來
里IPv4和IPv6勢必將共存。
理想情況下,向IPv6過渡的進程不應該被最終的用戶所看見,但是IPv4/IPv6混合環境有時會讓你碰到各種源於IPv4和IPv6之間不經意間
的相互碰撞的問題。舉個例子,你會碰到應用程序超時的問題,比如apt-get或ssh嘗試通過IPv6連接失敗、DNS伺服器意外清空了IPv6的
AAAA記錄、或者你支持IPv6的設備不兼容你的互聯網服務提供商遺留下的IPv4網路,等等等等。
當然這不意味著你應該盲目地在你的Linux機器上禁用IPv6。鑒於IPv6許諾的種種好處,作為社會的一份子我們最終還是要充分擁抱它的,但是作為給最終用戶進行故障排除過程的一部分,如果IPv6確實是罪魁禍首,那你可以嘗試去關閉它。
這里有一些讓你在Linux中部分(例如:對於某個特定的網路介面)或全部禁用IPv6的小技巧。這些小貼士應該適用於所有主流的Linux發行版包
括Ubuntu、Debian、Linux Mint、CentOS、Fedora、RHEL以及Arch Linux。
查看IPv6在Linux中是否被啟用
所有現代Linux發行版默認都自動啟用IPv6。為了能看到IPv6在你的Linux中是否被激活,可以使用ifconfig或ip命令。如果你在輸入這些命令之後看到「inet6」字樣的輸出,那就意味著你的Linux系統啟用了IPv6。
$ ifconfig
$ ip addr
臨時禁用IPv6
如果你想要在你的Linux系統上臨時關閉IPv6,你可以用 /proc 文件系統。「臨時」的意思是我們所做的禁用IPv6的更改在系統重啟後將不被保存。IPv6會在你的Linux機器重啟後再次被啟用。
要將一個特定的網路介面禁用IPv6,使用以下命令:
$ sudo sh -c 『echo 1 》 /proc/sys/net/ipv6/conf/《interface-name》/disable_ipv6』
舉個例子,將eth0介面禁用IPv6:
$ sudo sh -c 『echo 1 》 /proc/sys/net/ipv6/conf/eth0/disable_ipv6』
重新啟用eth0介面的IPv6:
$ sudo sh -c 『echo 0 》 /proc/sys/net/ipv6/conf/eth0/disable_ipv6』
如果你想要將整個系統所有介麵包括回環介面禁用IPv6,使用以下命令:
$ sudo sh -c 『echo 1 》 /proc/sys/net/ipv6/conf/all/disable_ipv6』
永久禁用IPv6
以上方法是不能永久禁用IPv6的,你一旦重啟系統IPv6還是會被啟用。如果你想要永久關閉它,有幾個方法你可以試試。
方法一
第一種方法是通過 /etc/sysctl.conf 文件對 /proc 進行永久修改。
換句話說,就是用文本編輯器打開 /etc/sysctl.conf 然後添加以下內容:
# 禁用整個系統所有介面的IPv6
net.ipv6.conf.all.disable_ipv6 = 1
# 禁用某一個指定介面的IPv6(例如:eth0, lo)
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
在 /etc/sysctl.conf 使這些更改生效,運行以下命令:
$ sudo sysctl -p /etc/sysctl.conf
或者直接重啟。
方法二
另一個永久禁用IPv6的方法是在開機的時候傳遞一個必要的內核參數。
用文本編輯器打開 /etc/default/grub 並給GRUBCMDLINELINUX變數添加「ipv6.disable=1」。
$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX=「xxxxx ipv6.disable=1」
上面的「xxxxx」代表任何已有的內核參數,在它後面添加「ipv6.disable=1」。
最後,不要忘記用以下方法保存對GRUB/GRUB2的修改:
Debian、Ubuntu或Linux Mint系統:
$ sudo update-grub
Fedora、CentOS/RHEL系統:
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
現在只要你重啟你的Linux系統,IPv6就會完全被禁用。
禁用IPv6之後的其它可選步驟
這里有一些在你禁用IPv6後需要考慮的可選步驟,這是因為當你在內核里禁用IPv6後,其它程序也許仍然會嘗試使用IPv6。在大多數情況下,應用程序的這種行為不太會影響到什麼,但是出於效率或安全方面的原因,你可以為他們禁用IPv6。
/etc/hosts
根據你的設置, /etc/hosts 會包含一條或多條IPv6的hosts和它們的地址。用文本編輯器打開 /etc/hosts 並注釋掉包含IPv6 hosts的腳本行。
$ sudo vi /etc/hosts
# comment these IPv6 hosts# ::1 ip6-localhost ip6-loopback# fe00::0
ip6-localnet# ff00::0 ip6-mcastprefix# ff02::1 ip6-allnodes# ff02::2
ip6-allrouters
Network Manager
如果你在用NetworkManager來管理你的網路設置,你可以在NetworkManager里禁用IPv6。在NetworkManager
打開wired connection,點擊「IPv6 Settings」選項並在「Method」一欄選擇「Ignore」,保存退出。
SSH服務
默認情況下,OpenSSH服務(sshd)會去嘗試捆綁IPv4和IPv6的地址。
要強制sshd只捆綁IPv4地址,用文本編輯器打開 /etc/ssh/sshd_config 並添加以下行。inet只適用於IPv4,而inet6是適用於IPv6的。
$ sudo vi /etc/ssh/sshd_config
AddressFamily inet
然後重啟sshd服務。
上面就是Linux禁用IPv6的方法介紹了,你可選擇臨時禁用IPv6或永久禁用IPv6,臨時禁用在系統重啟後IPv6還會被啟用,而永久禁用IPv6則不會出現這個問題。
B. 如何禁用ipv6
IPv6被認為是IPv4——互聯網上的傳統32位地址空間——的替代產品,它用來解決現有IPv4地址空間即將耗盡的問題。然而,由於已經有大量主機、設備用IPv4連接到了互聯網上,所以想在一夜之間將它們全部切換到IPv6幾乎是不可能的。許多IPv4到IPv6的轉換機制(例如:雙協議棧、網路隧道、代理)已經被提出來用來促進IPv6能被採用,並且很多應用也正在進行重寫,如我們所提倡的,來增加對IPv6的支持。有一件事情可以確定,就是在可預見的未來里IPv4和IPv6勢必將共存。理想情況下,向IPv6過渡的進程不應該被最終的用戶所看見,但是IPv4/IPv6混合環境有時會讓你碰到各種源於IPv4和IPv6之間不經意間的相互碰撞的問題。舉個例子,你會碰到應用程序超時的問題,比如apt-get或ssh嘗試通過IPv6連接失敗、DNS伺服器意外清空了IPv6的AAAA記錄、或者你支持IPv6的設備不兼容你的互聯網服務提供商遺留下的IPv4網路,等等等等。當然這不意味著你應該盲目地在你的Linux機器上禁用IPv6。鑒於IPv6許諾的種種好處,作為社會的一份子我們最終還是要充分擁抱它的,但是作為給最終用戶進行故障排除過程的一部分,如果IPv6確實是罪魁禍首,那你可以嘗試去關閉它。這里有一些讓你在Linux中部分(例如:對於某個特定的網路介面)或全部禁用IPv6的小技巧。這些小貼士應該適用於所有主流的Linux發行版包括Ubuntu、Debian、LinuxMint、CentOS、Fedora、RHEL以及ArchLinux。查看IPv6在Linux中是否被啟用所有現代Linux發行版默認都自動啟用IPv6。為了能看到IPv6在你的Linux中是否被激活,可以使用ifconfig或ip命令。如果你在輸入這些命令之後看到「inet6」字樣的輸出,那就意味著你的Linux系統啟用了IPv6。$ifconfig$ipaddr臨時禁用IPv6如果你想要在你的Linux系統上臨時關閉IPv6,你可以用/proc文件系統。「臨時」的意思是我們所做的禁用IPv6的更改在系統重啟後將不被保存。IPv6會在你的Linux機器重啟後再次被啟用。要將一個特定的網路介面禁用IPv6,使用以下命令:$sudosh-c『echo1》/proc/sys/net/ipv6/conf/《interface-name》/disable_ipv6』舉個例子,將eth0介面禁用IPv6:$sudosh-c『echo1》/proc/sys/net/ipv6/conf/eth0/disable_ipv6』重新啟用eth0介面的IPv6:$sudosh-c『echo0》/proc/sys/net/ipv6/conf/eth0/disable_ipv6』如果你想要將整個系統所有介麵包括回環介面禁用IPv6,使用以下命令:$sudosh-c『echo1》/proc/sys/net/ipv6/conf/all/disable_ipv6』永久禁用IPv6以上方法是不能永久禁用IPv6的,你一旦重啟系統IPv6還是會被啟用。如果你想要永久關閉它,有幾個方法你可以試試。方法一第一種方法是通過/etc/sysctl.conf文件對/proc進行永久修改。換句話說,就是用文本編輯器打開/etc/sysctl.conf然後添加以下內容:#禁用整個系統所有介面的IPv6net.ipv6.conf.all.disable_ipv6=1#禁用某一個指定介面的IPv6(例如:eth0,lo)net.ipv6.conf.lo.disable_ipv6=1net.ipv6.conf.eth0.disable_ipv6=1在/etc/sysctl.conf使這些更改生效,運行以下命令:$sudosysctl-p/etc/sysctl.conf或者直接重啟。方法二另一個永久禁用IPv6的方法是在開機的時候傳遞一個必要的內核參數。用文本編輯器打開/etc/default/grub並給GRUBCMDLINELINUX變數添加「ipv6.disable=1」。$sudovi/etc/default/grubGRUB_CMDLINE_LINUX=「xxxxxipv6.disable=1」上面的「xxxxx」代表任何已有的內核參數,在它後面添加「ipv6.disable=1」。最後,不要忘記用以下方法保存對GRUB/GRUB2的修改:Debian、Ubuntu或LinuxMint系統:$sudoupdate-grubFedora、CentOS/RHEL系統:$sudogrub2-mkconfig-o/boot/grub2/grub.cfg現在只要你重啟你的Linux系統,IPv6就會完全被禁用。禁用IPv6之後的其它可選步驟這里有一些在你禁用IPv6後需要考慮的可選步驟,這是因為當你在內核里禁用IPv6後,其它程序也許仍然會嘗試使用IPv6。在大多數情況下,應用程序的這種行為不太會影響到什麼,但是出於效率或安全方面的原因,你可以為他們禁用IPv6。/etc/hosts根據你的設置,/etc/hosts會包含一條或多條IPv6的hosts和它們的地址。用文本編輯器打開/etc/hosts並注釋掉包含IPv6hosts的腳本行。$sudovi/etc/hosts#commenttheseIPv6hosts#::1ip6-localhostip6-loopback#fe00::0ip6-localnet#ff00::0ip6-mcastprefix#ff02::1ip6-allnodes#ff02::2ip6-allroutersNetworkManager如果你在用NetworkManager來管理你的網路設置,你可以在NetworkManager里禁用IPv6。在NetworkManager打開wiredconnection,點擊「IPv6Settings」選項並在「Method」一欄選擇「Ignore」,保存退出。SSH服務默認情況下,OpenSSH服務(sshd)會去嘗試捆綁IPv4和IPv6的地址。要強制sshd只捆綁IPv4地址,用文本編輯器打開/etc/ssh/sshd_config並添加以下行。inet只適用於IPv4,而inet6是適用於IPv6的。$sudovi/etc/ssh/sshd_configAddressFamilyinet然後重啟sshd服務。上面就是Linux禁用IPv6的方法介紹了,你可選擇臨時禁用IPv6或永久禁用IPv6,臨時禁用在系統重啟後IPv6還會被啟用,而永久禁用IPv6則不會出現這個問題。
C. linux下怎麼關閉ipv6
在Linux下確認IPv6是否已經被啟用,可以從三個方面確定。
1.使用ifconfig查看自己的IP地址是否含有IPv6地址。
eth0 Link encap:Ethernet HWaddr 00:13:D4:05:B2:ED
inet addr:119.119.xxx.xx Bcast:119.119.115.255 Mask:255.255.255.0
inet6 addr: fe80::213:d4ff:fe05:b2ed/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1054562 errors:0 dropped:0 overruns:0 frame:0
TX packets:538136 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:346189738 (330.1 MiB) TX bytes:246935731 (235.4 MiB)
Interrupt:209 Base address:0xd800
2.查看服務監聽的IP中是否有IPv6格式的地址。(netstat -tuln)
tcp 0 0 0.0.0.0:8100 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:843 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 :::8080 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 0.0.0.0:111 0.0.0.0:*
udp 0 0 0.0.0.0:631 0.0.0.0:*
3.使用lsmod查看ipv6的模塊是否被載入。
[root@linux ~]# lsmod |grep ip
ipt_MASQUERADE 7617 3
iptable_nat 11077 1
ip_nat 21101 2 ipt_MASQUERADE,iptable_nat
ip_conntrack_netbios_ns 6977 0
ipt_REJECT 9665 3
ip_conntrack 53281 5 ipt_MASQUERADE,iptable_nat,ip_nat,ip_conntrack_netbios_ns,xt_state
nfnetlink 10713 2 ip_nat,ip_conntrack
iptable_filter 7105 1
ip_tables 17029 2 iptable_nat,iptable_filter
ip6t_REJECT 9409 1
ip6table_filter 6849 1
ip6_tables 18053 1 ip6table_filter
x_tables 17349 8 ipt_MASQUERADE,iptable_nat,ipt_REJECT,xt_state,ip_tables,ip6t_REJECT,xt_tcpudp,ip6_tables
ipv6 270433 18 ip6t_REJECT,cnic
如果出現以上粗體顯示的部分,代表您的機器上IPV6已經開啟。
關閉IPV6方法:
使用vi編輯器,打開/etc/modprobe.conf,在文檔中加入如下的兩條:
alias net-pf-10 off
alias ipv6 off
保存退出,並且重新啟動系統。
重啟之後可以使用上面的三種方法去驗證IPv6支持是否已經被關閉。
開啟IPV6方法:
IPv6是默認支持的,所以當你要重新開起IPv6支持時,將/etc/modprobe.conf中的兩條指令注釋掉就可以了。
D. 如何在Linux發行版下禁用IPv6
第一種方法:禁用IPv6
編輯文件/etc/sysctl.conf:
$ sudo gedit /etc/sysctl.conf
然後在該文件的末尾處填寫下列幾行:
# IPv6 disabled net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
保存文件,關閉文件。
使用下列命令重啟sysctl
$ sudo sysctl -p
再次查看ifconfig的輸出結果,現在應該沒有ipv6地址了。
$ ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:5f:28:8b inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1346 errors:0 dropped:0 overruns:0 frame:0 TX packets:965 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1501691 (1.5 MB) TX bytes:104883 (104.8 KB)
要是這一招不管用,那麼試試重啟系統,再次查看ifconfig。
第二種方法:禁用IPv6,使用GRUB方法
還可以編輯grub配置文件,以此禁用IPv6。
$ sudo gedit /etc/default/grub
找到含有GRUB_CMDLINE_LINUX的這一行,編輯該行,如下所示。
GRUB_CMDLINE_LINUX="ipv6.disable=1"
同樣還可以添加到名為GRUB_CMDLINE_LINUX_DEFAULT的變數的值,任何一種方法都管用。保存文件,關閉文件,重新生成grub配置。
$ sudo update-grub2
重啟。現在,IPv6應該已被禁用了。
第三種方法:不禁用IPv6,設置IPv4的優先順序高於IPv6
找到getaddrinfo(3)配置文件,也就是/etc/gai.conf,並去掉相應行的注釋,讓IPv4的優先順序高於IPv6。
$ sudo gedit /etc/gai.conf
找到這一行,去掉其注釋:
#precedence ::ffff:0:0/96 100
那樣一來,它看起來就像這樣:
precedence ::ffff:0:0/96 100
保存並退出文件。重啟後一切都搞定了,因為現在優先處理的是IPv4。如果你要啟用IPv6,但是在執行DNS查詢之類的操作時優先處理IPv4,這是最佳方法。
E. Linux中關閉ipv6,請仔細看問題,不要粘貼
刪了 ipv6.ko 啊
F. 如何在Ubuntu,Linux Mint,Debian上禁用IPv6
禁用 IPv6 - 方案1(如果系統不支持自動會禁用的)
編輯文件 - /etc/sysctl.conf
$ sudo gedit /etc/sysctl.conf
在文件的最後加入下面的行。
# IPv6 disabled
net.ipv6.conf.all.disable_ipv6 =1
net.ipv6.conf.default.disable_ipv6 =1
net.ipv6.conf.lo.disable_ipv6 =1
保存並關閉
重啟sysctl
$ sudo sysctl -p
再次檢查ifconfig的輸出,這里應該沒有IPv6地址了。
$ ifconfig
eth0 Link encap:EthernetHWaddr08:00:27:5f:28:8b
inet addr:192.168.1.3Bcast:192.168.1.255Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500Metric:1
RX packets:1346 errors:0 dropped:0 overruns:0 frame:0
TX packets:965 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1501691(1.5 MB) TX bytes:104883(104.8 KB)
如果不行,嘗試重啟系統並再次檢查ifconfig
禁用 IPv6 - GRUB 方案
IPv6同樣可以通過編輯grub配置文件禁用。
$ sudo gedit /etc/default/grub
查找包含"GRUBCMDLINELINUX"的行,並如下編輯:
GRUB_CMDLINE_LINUX="ipv6.disable=1"
同樣可以加入名為"GRUBCMDLINELINUX_DEFAULT"的變數,這同樣有用。保存並關閉文件,重新生成grub配置。
$ sudo update-grub2
重啟,現在IPv6應該就已經禁用了。