前言
我發現我的一個應用程序在嘗試通過IPv6建立連接,但是由于我們本地網絡不允許分配IPv6的流量,IPv6連接會超時,應用程序的連接會回退到IPv4,這樣就會造成不必要的延遲。由于我目前對IPv6沒有任何需求,所以我想在我的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。
Well...下面就來看一下Fedora上關于IPv6的一些設置操作:
1.列出當前的IPv6地址
使用 "ip"
使用方法:
# /sbin/ip -6 addr show dev <interface>
例子:一個靜態的主機地址
# /sbin/ip -6 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_ fast qlen 100
inet6 fe80::210:a4ff:fee3:9566/10 scope link
inet6 3ffe:ffff:0:f101::1/64 scope global
inet6 fec0:0:0:f101::1/64 scope site
自動設定的地址和它的存活時間:
# /sbin/ip -6 addr show dev eth0
3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100
inet6 2002:d950:f5f8:f101:2e0:18ff:fe90:9205/64 scope global dynamic
valid_lft 16sec preferred_lft 6sec
inet6 3ffe:400:100:f101:2e0:18ff:fe90:9205/64 scope global dynamic
valid_lft 2591997sec preferred_lft 604797sec inet6 fe80::2e0:18ff:fe90:9205/10 scope link
使用 "ifconfig"
使用方法:
# /sbin/ifconfig <interface>
例子,它只列出IPv6地址:
# /sbin/ifconfig eth0 |grep "inet6 addr:"
inet6 addr: fe80::210:a4ff:fee3:9566/10 Scope:Link
inet6 addr: 3ffe:ffff:0:f101::1/64 Scope:Global
inet6 addr: fec0:0:0:f101::1/64 Scope:Site
2.增加一個IPv6地址
其原理同IPv4的"IP ALIAS"(IP別名)相同使用 "ip"
使用方法:
# /sbin/ip -6 addr add <ipv6address>/<prefixlength> dev <interface>
例子:
# /sbin/ip -6 addr add 3ffe:ffff:0:f101::1/64 dev eth0
使用 "ifconfig"
使用方法:
# /sbin/ifconfig <interface> inet6 add <ipv6address>/<prefixlength>
例子:
# /sbin/ifconfig eth0 inet6 add 3ffe:ffff:0:f101::1/64
3.移除IPv6地址
這個不常用, 不要用它移除不存在的地址,一些早期的核心會因為受不了而掛掉。 使用 "ip"
使用方法:
# /sbin/ip -6 addr del <ipv6address>/<prefixlength> dev <interface>
例子:
# /sbin/ip -6 addr del 3ffe:ffff:0:f101::1/64 dev eth0
使用 "ifconfig"
使用方法:
# /sbin/ifconfig <interface> inet6 del <ipv6address>/<prefixlength>
例子:
# /sbin/ifconfig eth0 inet6 del 3ffe:ffff:0:f101::1/64