拓撲如下:
其中NAT設備將來自DUTA的報文源IP 101.0.0.2轉換為102.0.0.2。DUTA發起IPSec連接。
1. DUTA計算natd_chunk和natd_hash
DUTA先用自己的SPI,對等體的SPI(為0),IP和端口號做SHA1處理。如下圖:
代碼位於ike_natd.c的函數generate_natd_hash。
針對源IP和目的IP都生成natd_chunk,並計算哈希值。
2. DUTA經過NAT設備后,源IP做了轉換。
3. DUTB判斷是否經過了NAT設備
當DUTB收到IKE_SA_INIT報文后,解析得到轉換后的源IP和目的IP。然后按照DUTA同樣的方式組裝natd_chunk,計算natd_hash哈希。
從圖中可以看出,收到的報文計算出的源IP chunk對應的哈希值precalculated_src_hash與接收到的DUTA計算的哈希值received_src_hash不一致。
說明DUTA在NAT后面。