IPsec问题一

首先接收一个IPsec包(tunnel模式) 形式如下:IPa + ESP + IPb + L4 

经过xfrm_rcv后变成IPb + L4, 其中skb->sp保存的是esp(xfrm-state).,之后交给netif_rx, 

如果我没有记错的话,这里x->sel是IPb的信息,不是IPa的信息。 

xfrm_state{}的查找,有两个方向: 

1)outbound查找,即发送时的查找。 
此时,我们手里只有内层地址信息IPb,因为此时我们还不知道要添加 
什么样的外层地址信息IPa,这需要查找policy,然后得出外层IPa。当然, 
此时我们也没有spi。换句话说,我们只能通过内层IPb来查找xfrm_state{}, 
这就是selector查找,所谓selector查找,就是根据内层地址来查找相应的policy, 
并resolve template成xfrm_state{}。 

2)inbound查找,即接收时的查找。 
此时,我们手里的skb是外层的地址信息IPa,并且可以根据nexthdr得到spi, 
因此这里的查找是根据外层daddr和spi来进行的,找出来相应的xfrm_state{}后, 
附着在skb->sp上,由上面outbound查找我们知道,这个xfrm_state{}是和内层地址IPb 
相对应的。因此,在netif_rx()把内层报文重新注入协议栈进行处理时,可以再一次 
验证selector是否匹配,这就是上面你提到的__xfrm_policy_check()做的事情。 

 

setkey的add命令只是增加一个SA,而要能用上这个SA,还必须用spdadd来增加policy。 
在spdadd命令里面要指明内层address。 
其实,setkey的配置和内核的xfrm_state{}查找是一个道理: 
首先,outbound查找,手里只有内层地址,通过内层地址找到policy,这是由spdadd命令指定的。 
然后,根据spdadd命令指定的policy(会给出需要使用的xfrm_state{}的条件,比如外层地址,等),来查找SA, 
而SA是由setkey的add指令添加的,或者由racoon来协商。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值