neutron-vpnaas之ipsec-vpn学习总结

来源:互联网 发布:易语言验证码同步源码 编辑:程序博客网 时间:2024/06/03 18:49

一、背景&&存在问题

最近一段时间在探究openstack的neutron-vpnaas项目可商用化,该项目主要是通过ipsec-vpn技术创建site-by-site类型的vpn网络。调查发现,可商用化的关键点是如何解决ipsec-vpn与nat的不兼容性,以及在nat场景下的身份认证。

在ipsec-vpn实际应用中,peer间隧道建立主要是基于internet,而internet网络环境下肯定存在不少nat设备,这将改变报文的ip或者端口,peer接受端收到这些改变的报文后,将会影响身份认证和ipsec报文解密及完整性校验。所以ipsec报文必要要能实现nat穿越,才能保证Ipsec功能可用性,可靠性和完整性。

为了解决ipsec-vpn与nat兼容性问题,IETF组织定义了一系列技术文档,引入nat-T技术,具体是将ISAKMP,ESP报文封装在UDP中实现nat穿越,可以很好地解决数据传输中与nat不兼容性问题。经过ESP,tunnel封装的ipsec报文通过udp承载传输,nat转换将不影响里面的ipsec报文。

openstack社区中neutron-vpnaas项目通过ipsec driver调动第三方ipsec软件(openswan/strongswan)来实现ipsec-vpn功能,这些*swan软件实现了nat-t技术,保证ipsec报文不受nat影响。同时目前默认支持阶段1的协商模式为main mode,身份认证为预共享秘钥(psk)方式,这种认证方法配置实现简单,但是在nat场景下还不能适用。

在ike自动协商过程中isakmp协商报文封装在udp中,里面的内容不会被改变,nat转换只会改变外层的ip头和udp端口号,但由于主模式下,psk认证方法需要根据源ip来索引密码,进而计算出本端解密加密秘钥,否则无法完成身份鉴权,这导致psk认证方法还是无法应用在nat场景下,所以目前neutron-vpnaas达不到基本可商用要求。

为了解决nat场景下的认证问题,后面有提出了另一种协商模式:积极模式,将认证信息以明文的方式在协商中第一个消息中直接发送,不需解密就可以实现身份认证,但安全性低,感觉丢掉了ipsec安全可靠的优势。

目前我正尝试在neutron-vpnaas中新增另一种认证方式,即引入x509电子证书来解决nat场景下认证问题,试验过程中通过openssl命令生成秘钥,电子证书,然后对ipsec.conf进行配置修改可以实现rsa电子签名,x509电子证书认证。另外社区在2015年也有人提出了该bug,但是目前为止还没有人具体去做如何引进利用和管理证书的工作,而且证书生成和管理本身是个难点,社区中barbican项目主要是进行秘钥管理,后面考虑引入利用。

现阶段vpnaas原代码中只是附带了x509相关配置目录,基本内容和功能实现为空。本文后面的资料收集和研究也是基于解决该问题,引入一个证书生成、管理和使用的机制,并利用该机制实现vpnaas的身份认证方法,达到完善ipsec-vpn在nat场景下的功能。

二、现阶段应用场景

上图所示网络环境是最基本的IPSec应用场景,neutron——vpnaas功能目前的应用场景为该场景

  1. 响应方无论在何种环境都是固定的公网地址;

  2. 发起方也是固定的公网地址;

  3. 双方都是用IKE主模式进行协商;

  4. 双方都互相指定对端IP地址,即双方都可以发起协商,没有固定的发起方、响应方;

  5. 双方只能使用隧道模式,因为兴趣流192.168.1.0/24->192.168.0.0/24和IPSec隧道端点不一致。

由于只有大型企业才有可能为所有分支机构申请一个固定IP地址,商务领航客户通常是中小型企业,固定地址的情况并不多见,所以该场景更多出现在实验室环境中,在该方案中,如果有多个发起方,那么响应方需要对每个发起方制定IPSec策略。详细参考

三、参考

在学习过程中看了很多资料,关于ipsec-vpn的原理介绍已经很齐全,本博客中就不过多做重复性的搬运。根据最近调查身份认证所查阅到的资料,我进行了链接摘要汇总,一方面督促自己学习总结,另一方面提供大家进行有目的的查阅读。

  1. ipsec-vpn基础知识汇总篇

    传统ipsec-vpn知识点汇总,包含了实现原理,技术关键点

    http://blog.csdn.net/nanfeng1686/article/category/3226095

  2. 防守打法ike中isakmp协议介绍;ikev1主/积极模式协商过程ipsec SA的建立过程,以及抓包分析其消息交互过程;ikev2协商过程及优势对比

    网关A和B利用ISAKMP消息的Key Exchange和nonce载荷交换彼此的密钥材料。Key Exchange用于交换DH公开值,nonce用于传送临时随机数。由于DH算法中IKE Peer双方只交换密钥材料,并不交换真正的共享密钥,所以即使黑客窃取了DH值和临时值也无法计算出共享密钥,这一点正是DH算法的精髓所在。

    密钥材料交换完成后,IKE Peer双方结合自身配置的身份验证方法各自开始复杂的密钥计算过程(预共享密钥或数字证书都会参与到密钥计算过程中),最终会产生三个密钥:

    SKEYID_a:ISAKMP消息完整性验证密钥——谁也别想篡改ISAKMP消息了,只要消息稍有改动,响应端完整性检查就会发现!
    SKEYID_e:ISAKMP消息加密密钥——再也别想窃取ISAKMP消息了,窃取了也看不懂!

    以上两个密钥保证了后续交换的ISAKMP消息的安全性!

    SKEYID_d:用于衍生出IPSec报文加密和验证密钥——最终是由这个密钥保证IPSec封装的数据报文的安全性!

    整个密钥交换和计算过程在IKE SA超时时间的控制下以一定的周期进行自动刷新,避免了密钥长期不变带来的安全隐患。

    http://blog.csdn.net/nanfeng1686/article/details/45741561

  3. 技术详解-ipsec-vpn基础原理

    http://blog.csdn.net/bingyu9875/article/details/61614797

  4. ipsec协商中主模式和积极模式的区别

    http://blog.163.com/ares_cxy/blog/static/84926570201112194214194/

  5. 技术详解-ipsec穿越nat

    http://blog.csdn.net/bingyu9875/article/details/61614775

  6. 技术详解-ipsec-vpn应用场景和方案部署

    介绍具体应用场景,包括常规的,发起方公网ip不固定,通过pppoe,gre承载的场景

    目前neutron-vpnaas项目对用场景是基于常规场景,公网ip固定,应用并不常见

    http://blog.csdn.net/bingyu9875/article/details/61614731

  7. vpn技术介绍—–GRE over ipsec

    http://blog.csdn.net/nanfeng1686/article/details/45742185

  8. nat ipsec-vpn使用故障

    http://blog.csdn.net/nanfeng1686/article/details/45742679

  9. ipsec-vpn ike协商过程详解包括man/aggressive mode详解ikev1和ikev2详解

    http://blog.csdn.net/nanfeng1686/article/details/45741561

  10. vpn选型技术介绍,各种vpn实现,应用场景

    http://blog.csdn.net/nanfeng1686/article/details/45741807

    http://blog.163.com/ares_cxy/blog/static/84926570201112194214194/

  11. 技术详解

    http://blog.csdn.net/bingyu9875/article/details/61614775

    http://blog.csdn.net/bingyu9875/article/details/61614731

    http://blog.csdn.net/bingyu9875/article/details/61614797

  12. main psk/ip不合适,id必须为ip

    http://haohetao.iteye.com/blog/13414163

  13. ipsec-network address translation(nat) compatibility requirements

    https://tools.ietf.org/html/rfc3715

  14. 存在的解决方案

    https://tools.ietf.org/html/rfc3947

  15. Nat –t

    http://blog.sina.com.cn/s/blog_6fbac01d0101d8ix.html

  16. ipsec.conf配置文件介绍

    https://www.wscon.cn/16.html

  17. ipsec技术点详解

    http://blog.csdn.net/bingyu9875/article/details/61614775

    http://blog.csdn.net/bingyu9875/article/details/61614731

    http://blog.csdn.net/bingyu9875/article/details/61614731

    http://blog.csdn.net/bingyu9875/article/details/61614797

    http://blog.csdn.net/bingyu9875/article/details/61913170

  18. rsa 签名认证方式

    https://wiki.debian.org/HowTo/openswan

  19. 基于电子证书认证方式,main模式下的通信过程

    http://weixianfei.blog.51cto.com/950271/872566

  20. rsa 电子证书认证方式

    https://wiki.debian.org/HowTo/openswan

  21. To setup ipsec with certs in tunnel mode using NSS

    https://github.com/xelerance/Openswan/blob/master/docs/nss-howto.txt

  22. ipsec.conf配置使用说明

    https://www.wscon.cn/16.html

  23. openssl生成电子证书

    http://www.cnblogs.com/AloneSword/p/3809002.html

    http://blog.csdn.net/mr_raptor/article/details/51854805

  24. 如何使用OpenSSL工具生成根证书与应用证书

    http://blog.csdn.net/mr_raptor/article/details/51854805

  25. 预共享密码方式认证(psk)

    http://www.nta-monitor.com/wiki/index.php/OpenSwan#Pre-Shared_Key_Example

  26. strongswan的电子证书配置

    https://wiki.archlinux.org/index.php/StrongSwan_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#.E5.9C.A8.E5.AE.B9.E5.99.A8.E4.B8.AD.E8.BF.90.E8.A1.8C_Strongswan

  27. 用OpenSWAN做Linux下的IPSec VPN的详细配置指南

    http://www.xfocus.net/articles/200610/891.html

    http://blog.csdn.net/bytxl/article/details/50457568

  28. 基于数字证书认证的 IPSec VPN 配置

    http://www.echojb.com/flash/2016/10/29/247884.html

  29. ike分析工具

    http://www.nta-monitor.com/wiki/index.php/OpenSwan

  30. CentOS 6使用openssl搭建根CA

    http://wzlinux.blog.51cto.com/8021085/1676529

  31. openssl自签名根证书服务端和客户端证书制作

    http://blog.csdn.net/ilytl/article/details/52450334

    http://blog.csdn.net/kamouswjw/article/details/39050995

    http://zctya.blog.163.com/blog/static/1209178201251310292958/

    http://blog.csdn.net/zhaotengfei36520/article/details/41962077

本文链接,欢迎学习指正

原创粉丝点击