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功能目前的应用场景为该场景
响应方无论在何种环境都是固定的公网地址;
发起方也是固定的公网地址;
双方都是用IKE主模式进行协商;
双方都互相指定对端IP地址,即双方都可以发起协商,没有固定的发起方、响应方;
双方只能使用隧道模式,因为兴趣流192.168.1.0/24->192.168.0.0/24和IPSec隧道端点不一致。
由于只有大型企业才有可能为所有分支机构申请一个固定IP地址,商务领航客户通常是中小型企业,固定地址的情况并不多见,所以该场景更多出现在实验室环境中,在该方案中,如果有多个发起方,那么响应方需要对每个发起方制定IPSec策略。详细参考
三、参考
在学习过程中看了很多资料,关于ipsec-vpn的原理介绍已经很齐全,本博客中就不过多做重复性的搬运。根据最近调查身份认证所查阅到的资料,我进行了链接摘要汇总,一方面督促自己学习总结,另一方面提供大家进行有目的的查阅读。
ipsec-vpn基础知识汇总篇
传统ipsec-vpn知识点汇总,包含了实现原理,技术关键点
http://blog.csdn.net/nanfeng1686/article/category/3226095
防守打法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
技术详解-ipsec-vpn基础原理
http://blog.csdn.net/bingyu9875/article/details/61614797
ipsec协商中主模式和积极模式的区别
http://blog.163.com/ares_cxy/blog/static/84926570201112194214194/
技术详解-ipsec穿越nat
http://blog.csdn.net/bingyu9875/article/details/61614775
技术详解-ipsec-vpn应用场景和方案部署
介绍具体应用场景,包括常规的,发起方公网ip不固定,通过pppoe,gre承载的场景
目前neutron-vpnaas项目对用场景是基于常规场景,公网ip固定,应用并不常见
http://blog.csdn.net/bingyu9875/article/details/61614731
vpn技术介绍—–GRE over ipsec
http://blog.csdn.net/nanfeng1686/article/details/45742185
nat ipsec-vpn使用故障
http://blog.csdn.net/nanfeng1686/article/details/45742679
ipsec-vpn ike协商过程详解包括man/aggressive mode详解ikev1和ikev2详解
http://blog.csdn.net/nanfeng1686/article/details/45741561
vpn选型技术介绍,各种vpn实现,应用场景
http://blog.csdn.net/nanfeng1686/article/details/45741807
http://blog.163.com/ares_cxy/blog/static/84926570201112194214194/
技术详解
http://blog.csdn.net/bingyu9875/article/details/61614775
http://blog.csdn.net/bingyu9875/article/details/61614731
http://blog.csdn.net/bingyu9875/article/details/61614797
main psk/ip不合适,id必须为ip
http://haohetao.iteye.com/blog/13414163
ipsec-network address translation(nat) compatibility requirements
https://tools.ietf.org/html/rfc3715
存在的解决方案
https://tools.ietf.org/html/rfc3947
Nat –t
http://blog.sina.com.cn/s/blog_6fbac01d0101d8ix.html
ipsec.conf配置文件介绍
https://www.wscon.cn/16.html
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
rsa 签名认证方式
https://wiki.debian.org/HowTo/openswan
基于电子证书认证方式,main模式下的通信过程
http://weixianfei.blog.51cto.com/950271/872566
rsa 电子证书认证方式
https://wiki.debian.org/HowTo/openswan
To setup ipsec with certs in tunnel mode using NSS
https://github.com/xelerance/Openswan/blob/master/docs/nss-howto.txt
ipsec.conf配置使用说明
https://www.wscon.cn/16.html
openssl生成电子证书
http://www.cnblogs.com/AloneSword/p/3809002.html
http://blog.csdn.net/mr_raptor/article/details/51854805
如何使用OpenSSL工具生成根证书与应用证书
http://blog.csdn.net/mr_raptor/article/details/51854805
预共享密码方式认证(psk)
http://www.nta-monitor.com/wiki/index.php/OpenSwan#Pre-Shared_Key_Example
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
用OpenSWAN做Linux下的IPSec VPN的详细配置指南
http://www.xfocus.net/articles/200610/891.html
http://blog.csdn.net/bytxl/article/details/50457568
基于数字证书认证的 IPSec VPN 配置
http://www.echojb.com/flash/2016/10/29/247884.html
ike分析工具
http://www.nta-monitor.com/wiki/index.php/OpenSwan
CentOS 6使用openssl搭建根CA
http://wzlinux.blog.51cto.com/8021085/1676529
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
本文链接,欢迎学习指正
- neutron-vpnaas之ipsec-vpn学习总结
- neutron-vpnaas之openswan下IPSec-VPN的手工配置指南
- neutron-vpnaas添加证书认证总结
- VPNaaS in Neutron
- Neutron印象7:VPNaas
- OpenStack IPSec VPNaaS ( by quqi99 )
- IPSEC VPN
- IPsec VPN
- IPSec vpn
- IPSEC VPN
- IPSec VPN
- ipsec vpn
- Neutron之Iptables总结
- VPN技术漫谈之IPSec(附MPLS)
- VPN技术漫谈之IPSec(附MPLS)
- SSL VPN vs IPSEC VPN两者之比较
- VPN基本原理之三(IPSEC VPN基本原理)
- vpn之l2tp/ipsec服务器实现远程访问
- linux查看服务器【有效】连接数
- SPARKSQL读SPARK表
- Android使用MediaRecorder和Camera实现视频录制及播放功能整理
- 蓄爷计算思维讲课
- C++类简单学习(三)
- neutron-vpnaas之ipsec-vpn学习总结
- Vijos1029[晴天小猪历险记之Number] 搜索+康托展开
- 优秀Android博客
- 数据结构实验之栈与队列一:进制转换
- 原生实现一个toast组件;ul下li点击确定是哪个
- hexo NexT主题首页title链接的优化
- Sonatype Nexus 库被删除的恢复方法
- web兼容性问题
- 搭积木布局