IPsec VPN數據傳輸過程
以下是一個數據包經IPsecVPN隧 道的傳送過程(如ICMP包),由左邊的VPN保護子網內的PC機向右邊VPN保護子網內的PC機傳送數據時,左邊PC發送的數據由左VPN eth1內口接收後發現需要經過隧道,則把數據交由左ipsec0口加密(tunnel, ESP或AH),加完密後再由左eth0外口發送到右VPN的eth0外口,右eth0外口收到數據發現需要解密,則由ipsec0口解完密後交由右 eth1內口進行轉發或由本機接收。
加密 =========================》 解密
host:eth1===ipsec0<==>eth0==============eth0<=====>ipsec0 ===eth1:host
解密 《========================= 加密
eth0為外口(協商口),eth1為內口。
下面可以在已經建立好Ipsec VPN隧道後進行截包分析,由於隧道模式已經把原來的源IP和目的IP加密無法查看到具體IP地址ESP的真實走向,而傳輸模式的源和目的IP是不會被加密的,所以可以傳輸模式隧道為例。
環境拓撲:
PC1 VPN1 ============VPN2 PC2
184.0.0.2 184.0.0.1(eth1)/192.168.95.164(eth0) 192.168.95.195(eth0)/185.0.0.1(eth1) 185.0.0.2
現從PC1向PC2發送ICMP ping包,在VPN1上tcpdump抓包如下,為觀看直觀特附加一加截圖。
/tos/bin/ipsec-cmds# tcpdump -ni any host 184.0.0.2
tcpdump:WARNING: Promiscuous mode not supported on the "any" device
tcpdump:verbose output suppressed, use -v or -vv for full protocol decode
listeningon any, link-type LINUX_SLL (Linux cooked), capture size 68 bytes
11:26:39.649389R@eth1 IP 184.0.0.2 > 185.0.0.2: ICMP echo request,id 512, seq 12039, length 40 (左VPN內口eth1收到PC1 ICMP明文包)
11:26:39.649411X@ipsec0 IP 184.0.0.2 > 185.0.0.2: ICMP echorequest, id 512, seq 12039, length 40 (查找route後交由ipsec0加密)
11:26:39.649485X@eth0 IP 184.0.0.2 > 185.0.0.2:ESP(spi=0x30f18c51,seq=0xc38), length 76
(加完密後的ESP包由外口eth0發出)
11:26:39.656606R@eth0 IP 185.0.0.2 > 184.0.0.2:ESP(spi=0xa6e0f4f2,seq=0xb36), length 76
(右VPN外口eth0收到ESP加密包)
11:26:39.656606R@ipsec0 IP 185.0.0.2 > 184.0.0.2: ICMP echo reply,id 512, seq 12039, length 40(由右ipsec0解密)
11:26:39.656672X@eth1 IP 185.0.0.2 > 184.0.0.2: ICMP echo reply, id512, seq 12039, length 40
(解密後的明文交由內口eth0發送給PC2,此時一個方向的ICMP包傳送完成)
11:26:40.649357R@eth1 IP 184.0.0.2 > 185.0.0.2: ICMP echo request, id 512, seq 12295,length 40(PC2回應ICMP給PC1,此過程與上面分析過程類似。)