用Dynamips構建能夠與真實機器通信的IPSec ***環境

一、問題

手頭沒有支持IPSec的路由器設備,但是想構建IPSec ×××環境,並截取IPSec數據進行協議的學習分析,怎麼辦?


二、解決思路

利用Dynamips模擬支持IPSec的路由器,將模擬出來的路由器接口綁定到Linux虛擬網卡上,並依託網橋技術使虛擬網卡能夠與實際網卡進行通信。在上述基礎環境構建完畢的基礎上,配置IPSec ×××,然後在路由器接口(即虛擬網卡)上嗅探獲取IPSec通信數據。

三、模擬環境構建

wKiom1YXsobyb5LwAAB-SBrZiv8622.jpg

圖一 模擬環境示意圖


根據上面的解決思路,擬構建的模擬環境如上圖所示。在R1和R2之間構建隧道模式的IPSec ×××,PC1和PC2之間的通信數據在進入R1、R2時自動被封裝成IPSec數據,在流出R1、R2時自動解封成明文的IP數據包。要將上圖的模擬環境落到實處,我們需要三臺機器PC1、PC2、PC3(可以是三臺虛擬機),其中PC3要求爲Linux操作系統,有三張網卡,且支持網橋和TAP虛擬網卡,同時能夠正常運行Dynamips,另外兩臺(對應上圖的PC1、PC2)沒有特殊要求,只要是PC機即可。

模擬環境中涉及了很多虛擬的東西,如路由器、網卡、網橋等,理解起來比較艱澀。爲了方便理解,給出一個全景的邏輯視圖。

wKiom1YXssTS305-AAHWL4pnQyc347.jpg

spacer.gif圖二 模擬環境邏輯視圖


對圖二的說明如下:

1、紅色橢圓中的要素都運行在PC3(Linux)上

2、虛線是數據通信的邏輯效果,與圖一一致

3、實線代表的是數據的實際流向。決定數據實際如此流向的是因爲,tap虛擬網卡和eth真實網卡都是網絡接口,具有一定的獨立性,需要網橋進行橋接通信。但同時tap虛擬網卡是虛擬的,它不能脫離真實網卡而存在,所以在同一網橋下至少有一個真實網卡,以承載實際的數據通信功能。


四、具體配置實踐

有了上面的理論基礎,接下來就開始動手實踐。先從最複雜的PC3(Linux)開始,然後再配置PC1、PC2。

1、PC3(Linux)配置

Dynamips、網橋(brctl)、三張網卡(建議用虛擬機,很方便)等先決條件請自行解決,然後按如下步驟進行

①配置網橋和虛擬網卡

brctl addbr br0

brctl addbr br1

brctl addbr br2

(說明:添加br0、br1、br2三個網橋)


ip l s dev br0 up

ip l s dev br1 up

ip l s dev br2 up

(說明:啓動網橋)


tunctl -t tap0 -u root

tunctl -t tap1 -u root

tunctl -t tap2 -u root

tunctl -t tap3 -u root

(說明:添加虛擬網卡)


ip l s dev tap0 up

ip l s dev tap1 up

ip l s dev tap2 up

ip l s dev tap3 up

(說明:啓動虛擬網卡)


brctl addif br0 tap0

brctl addif br0 eth0


brctl addif br1 tap1

brctl addif br1 tap3

brctl addif br1 eth1


brctl addif br2 tap2

brctl addif br2 eth2

(說明:把網卡和虛擬網卡添加到對應的網橋)


ifconfig eth0 0.0.0.0 promisc

ifconfig eth1 0.0.0.0 promisc

ifconfig eth2 0.0.0.0 promisc

(說明:把網卡設置成混雜模式)


②模擬路由器R1R2

dynamips -P 2691 -s 0:0:tap:tap0 -s 0:1:tap:tap1 ../c2691-adventerprisek9-mz.124-25d.bin

dynamips -P 2691 -s 0:0:tap:tap2 -s 0:1:tap:tap3 ../c2691-adventerprisek9-mz.124-25d.bin

(說明:分別模擬運行了路由器R1R2R1的0/0接口和tap0綁定,其他類似)

R1配置如下:

R1(config)#int fa0/0

R1(config-if)#ip add 192.168.2.1 255.255.255.0

R1(config-if)#no sh

R1(config-if)#exit

R1(config)#int fa0/1

R1(config-if)#ip add 10.0.0.1 255.255.255.0

R1(config-if)#no sh

R1(config-if)#exit

R1(config)#ip route 0.0.0.0 0.0.0.0 10.0.0.2

R1(config)#end

對R2配置如下:

R2(config)#int fa0/0

R2(config-if)#ip add 192.168.3.1 255.255.255.0

R2(config-if)#no sh

R2(config-if)#exit

R2(config)#int fa0/1

R2(config-if)#ip add 10.0.0.2 255.255.255.0

R2(config-if)#no sh

R2(config-if)#exit

R2(config)#ip route 0.0.0.0 0.0.0.0 10.0.0.3

R2(config)#end


③配置IPSec ×××

在R1上配置IKE(ISAKMP)策略:

R1(config)#crypto isakmp policy 1

R1(config-isakmp)#encryption 3des 

R1(config-isakmp)#hash sha 

R1(config-isakmp)#authentication pre-share 

R1(config-isakmp)#group 2

R1(config-isakmp)#exit

說明:定義了ISAKMP policy 1,加密方式爲3des,hash算法爲sha,認證方式爲Pre-Shared Keys (PSK),密鑰算法(Diffie-Hellman)爲group 2。

 

 

在R1上定義認證標識:

R1(config)#crypto isakmp key 0 cisco123 address 10.0.0.2 

說明:因爲之前定義的認證方式爲Pre-Shared Keys (PSK),所以需要定義認證密碼,這裏定義與peer 10.0.0.2的認證密碼爲cisco123,並且雙方密碼必須一致,否則無法建立IKE SA,其中0表示密碼在running-config中顯示爲明文。

 

在R1上配置IPsec transform:

R1(config)#crypto ipsec transform-set ccie ah-sha-hmac esp-3des esp-sha-hmac 

R1(cfg-crypto-trans)#exit

說明:配置了transform-set爲ccie,認證協議使用ah,其實esp也有認證功能,可以去掉ah,單獨使用esp。其中數據封裝使用esp加3des加密,並且使用esp結合sha做hash計算,默認的IPsec mode爲tunnel。

 

在R1上定義感興趣流量:

R1(config)#access-list 100 permit ip 192.168.2.0 0.0.0.255 192.168.3.0 0.0.0.255

說明:這裏需要被IPsec保護傳輸的流量爲.2網段至.3網段的流量,即192.168.2.0/24發往192.168.3.0/24的流量,切記不可使用any來表示地址。

 

 

在R1上創建crypto map:

R1(config)#crypto map l2l 1 ipsec-isakmp 

R1(config-crypto-map)#set peer 10.0.0.2 

R1(config-crypto-map)#set transform-set ccie

R1(config-crypto-map)#match address 100

R1(config-crypto-map)#exit

說明:在R1上配置crypto map爲l2l,序號爲1,即第1組策略,其中指定加密數據發往的對端爲10.0.0.2,即和10.0.0.2建立IPsec隧道,調用的IPsec transform爲ccie,並且指定ACL 100中的流量爲被保護的流量。

 

在R1上將crypto map應用於接口:

R1(config)#int f0/1

R1(config-if)#crypto map l2l

R1(config-if)#exit

R1(config)#

說明:將crypto map應用在去往192.168.3.0/24的接口F0/0上。

 

使用相同方式配置R3的LAN-to-LAN ×××:

R2(config)#crypto isakmp policy 1

R2(config-isakmp)#encryption 3des 

R2(config-isakmp)#hash sha 

R2(config-isakmp)#authentication pre-share 

R2(config-isakmp)#group 2

R2(config-isakmp)#exit  

 

R2(config)#crypto isakmp key 0 cisco123 address 10.0.0.1

 

R2(config)#crypto ipsec transform-set ccie ah-sha-hmac esp-3des esp-sha-hmac

R2(cfg-crypto-trans)#exit

 

R2(config)#access-list 100 permit ip 192.168.3.0 0.0.0.255 192.168.2.0 0.0.0.255

 

R2(config)#crypto map l2l 1 ipsec-isakmp 

R2(config-crypto-map)#set peer 10.0.0.1

R2(config-crypto-map)#set transform-set ccie

R2(config-crypto-map)#match address 100

R2(config-crypto-map)#exit

R2(config)#

 

R2(config)#int f0/1

R2(config-if)#crypto map l2l

R2(config-if)#

*Mar  1 00:32:58.907: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON

R2(config-if)#

說明:R2與R1的IKE和IPsec策略必須保持一致。

2、配置PC1和PC2

假設PC1和PC2都是Windows操作系統,設置其IP分別爲192.168.2.22、192.168.3.33,然後分別添加一條路由

route add 192.168.3.0 mask 255.255.255.0 192.168.2.1

route add 192.168.2.0 mask 255.255.255.0 192.168.3.1


五、測試

在PC3(Linux)上運行wireshark抓取tap1接口的數據,在PC1上也運行wireshark抓取網卡的數據,然後在PC2上ping PC1。PC3(Linux)和PC1上wireshark的抓取截圖分別如圖三、和圖四。

wKiom1YXsxqCy_0eAAfFBQ_4gYg147.jpg

圖三 PC3(Linux)上wireshark截圖


wKiom1YXs4-gDW6YAAa1KUAY8TA153.jpg

圖四 PC1上wireshark截圖


圖三中,抓取的是tap1虛擬網卡的數據,tap1對應R1的fa0/1接口,是IPSec ×××隧道的其中一個端點,其對應的數據應該是IPSec密數據,圖三的結果印證了這一點。

圖四中,抓取的是PC1上的數據,PC1上的數據已經離開IPSec ×××隧道,得到的應該是明文數據,圖四的結果也印證了這一點。


好了,打完收工。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章