strongswan -- IKEv2如何检测到经过了nat设备

拓扑如下:

  

  其中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后面。

原文地址:https://www.cnblogs.com/collapsar/p/10580395.html