在 Linux 平台及 IPv4 環境中構建 IPv6 測試環境
1 IPv6簡介
IPv6(Internet Protocol Version 6)作為 IPv4 的升級版本,它是作為一共軟件升級安裝在設備和
操作系統中。為什么需要使用 IPv6,一個最直接的答案就是目前廣泛應用的 IPv4 已經無法提供足夠的 IP 地址來滿足迅速增長的網絡。IPv4 采用32位地址長度,只有大約43億個地址,很快就將被分配完畢。而 IPv6 采用128位的地址長度,幾乎可以不受限制的提供地址。當然擴大地址空間只是 IPv6 的眾多優勢中的重要一項,除此之外,IPv6 還能夠提高網絡的整體吞吐量、改善服務質量(QoS)、安全性有更好的保證、支持即插即用和移動性、更好實現多播功能等等。
2 在 IPv4 環境中模擬 IPv6 網絡
正如上節中所述,目前許多與網絡應用相關的軟件已經加入了對 IPv6 的支持,更有大量的軟件正在處於對 IPv6 支持的開發階段。但是就開發而言,目前許多開發環境並沒有對 IPv6 提供很好的支持,尤其當所開發的應用需要經過較老的路由甚至公共網絡時。如果希望通過升級網絡設備來支持開發環境,將是一筆不小的花費,有時甚至是不現實的(比如短期內升級公共網絡支持 IPv6)。
研究如何在現有的 IPv4 網絡環境中模擬出 IPv6 環境,使得開發和測試工作能夠順利進行,顯得尤為重要。
2.1 IPv6 網絡要求及現有的網絡環境
圖1顯示了典型的 HTTP 網絡應用,如果需要對這樣的網絡應用提供 IPv6 的支持,開發和測試人員可能會碰到如下三種情形:
客戶端和服務器運行於同一個局域網中,如圖1-a
客戶端和服務器運行於同一個 Intranet 中,它們之間的網絡通路需要經過路由,如圖1-b
客戶端和服務器分別處於不同的地域,它們之間由 Internet 提供連接,如圖1-c。
圖 1. 三種典型的 HTTP 網絡應用
在這三種不同的情形下,IPv6 的網絡環境要求是不同的。對於情形1,只需客戶端和服務器所運行的操作系統支持 IPv6 即可通過 IPv6 協議進行通信,若需要提供 Global 地址的通信,則可以通過在局域網內的某台機器上運行一個軟件 IPv6 路由來支持,因此其針對 IPv6 的開發和測試相對簡單。 對於情形2,由於客戶端和服務器之間經過運行於 IP 層的路由,因此要求網絡通路上經過的所有路由器均支持 IPv6。 這可能是一個不小的挑戰,因為很多 Intranet 環境並沒有提供支持 IPv6 的路由。對於情形3,這就要求 Internet 提供 IPv6的支持,就短期看來,Internet 提供全面的 IPv6 支持還不太可能。
因此,在情形2和情形3的環境中,網絡硬件支持將成為開發和測試支持 IPv6 的網絡應用程序的最大障礙,在2.2節中將給出如何運用現有的 IPv4 網絡來進行 IPv6 應用程序的開發和測試,同時又保證其在真實的 IPv6 環境中正常運行。
2.2 利用現有 IPv4 網絡模擬 IPv6 環境
2.2.1 模擬環境構建的基本原理
圖2 - 圖3顯示了 IPv6 模擬環境的框圖,這里存在兩種情形,但具體的配置是類似的。
對於開發客戶端 IPv6 應用程序,其框圖如 圖2;而對於開發服務器端 IPv6 應用程序,其框圖如 圖 3 。其基本原理就是利用代理技術將原來被 IPv4 網絡阻斷的客戶端或服務器端映射到位於同一局域網內的代理服務器上,這樣“客戶端”與“服務器端”就可以進行基於 IPv6 的網絡通信了。 在 圖2 中,我們需要代理服務器與客戶端運行於同一局域網中,在客戶端看來,此代理服務器是一個具備了 IPv6 支持能力的“服務器”,即使真正的服務器端並沒有支持 IPv6 ,也可以進行客戶端的開發和測試。在 圖3中,我們需要一台機器與服務器端運行於同一局域網中,在服務器端看來,此代理服務器是一個具備了 IPv6 支持能力的“客戶端”。
圖 2. 利用代理將服務器端映射到與客戶端同一局域網內
圖 3. 利用代理將客戶端映射到與服務器端同一局域網內
下面僅以客戶端的IPv6環境為例來講述整個模擬環境的構建過程。
2.2.2 環境的建立
操作系統平台: Linux(Centos),內核需支持 IPv6,2.6以上版本最佳,
軟件: radvd(Router ADVertisement Daemon),
這是一個運行於 Linux 平台之上的提供 IPv6 路由配置信息的軟件,可以替代 IPv6 路由來進行無狀態的地址自動配置。
2.2.3 啟動 radvd
IPv6 的地址獲取方式與 IPv4 有所不同。在 IPv4 中,主機 IP 地址的自動配置必須由 DHCP 服務器來支持,這被稱為有狀態的自動配置(StatefulAutoconfiguration);而在 IPv6 中,除了 DHCP 的 v6版本,還引入了無狀態的自動配置( StatelessAutoconfiguration )。這項新技術無需 DHCP 服務器支持,所有支持 IPv6 的路由器都監聽各主機發送的自動配置請求包, IPv6 路由器對這類請求包的回復里面包含了一些 IPv6 地址的前綴( prefix )信息,主機在收到這樣的包以后,可以根據自己的一些已有信息(比如 MAC 地址),生成自己的 IPv6 地址。
本文是在現有的 IPv4 網絡環境中模擬 IPv6 環境,自然不存在物理的 IPv6 路由器,但是通過 Linux 平台上的 radvd 工具也可以模擬無狀態自動配置,它同樣可以監聽局域網內各 IPv6 主機發送的自動配置請求並作出響應,這樣,這些主機就可以獲得各自的 IPv6 地址,並利用這些地址進行相互間的通信。而圖X中的客戶端正是使用這種方式與代理服務器通信的。
1. 使用命令yum install radvd 安裝radvd
2.配置運行 radvd 的主機的 IPv6 地址信息
# ip a a 2002:9ba:b4e:6::1/64 dev ethX
# ip r a 2002:9ba:b4e:6::/64 dev ethX
這里的 ethX 表示的是此主機監聽局域網數據包的網卡設備
3.確保系統啟動了對 IPv6 數據包的轉發功能
# sysctl -w net.ipv6.conf.all.forwarding=1
或者 永久添加 :在/etc/sysctl.conf 中配置 net.ipv6.conf.all.forwarding = 1
4.radvd 安裝后其配置文件位於 /etc/radvd.conf ,在這個文件中加入配置信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
interface eth0
{
AdvSendAdvert on;
MinRtrAdvInterval 5;
MaxRtrAdvInterval 10;
AdvDefaultPreference low;
prefix 2002:9ba:b4e:6::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
};
|
同上,這里的 ethX 表示的是此主機監聽局域網數據包的網卡設備。prefix 段表明了該局
域網配置 IPv6 地址的前綴。
5.啟動 radvd
# /etc/init.d/radvd start
或者:service radvd start
在 radvd 啟動成功后,通過 ps -ef | grep radvd 命令可以看到系統中有一個 radvd 的 daemon 進程處於運行狀態。若對局域網中的其他主機運行 ifconfig 命令可以看到這些主機已經自動配置了 IPv6 地址,其前綴( prefix )與 radvd 配置文件中的值一致
6.配置優化:
第2步和第3步在系統重啟后配置將會丟失,我們可以通過修改配置文件的方法讓配置在系統重啟后依然生效,具體配置如下:
1、依次執行以下命令
#cd /etc/sysconfig
#vi network
添加以下內容:
NETWORKING_IPv6=yes
IPV6FORWARDING=yes
IPV6INIT=yes
IPV6_DEFAULTGW=2002:db8:1:0::A%eth0
2、修改文件:/etc/sysconfig/network-scripts/ifcfg-eth0
添加以下內容:
IPV6INIT=yes
IPV6to4INIT=yes
IPV6FORDING=yes
IPV6ADDR=2002:db8:1:0::1/64
3、修改文件/etc/sysctl.conf
添加以下內容:
net.ipv6.conf.all.forwarding = 1