openstack M版本VPN连接问题总结
来源:互联网 发布:imo是什么软件 编辑:程序博客网 时间:2024/06/01 14:40
M版本VPN安装遇到的问题和部分解决办法总结
安装:
为了保证openstack安装之后VPN功能能正常使用,需要将packstack的answer文件选项CONFIG_NEUTRON_VPNAAS=y置位为y,然后进行安装。
安装完成之后VPN功能还不能正常使用,为openstack添加两个网络和两个namespace,启动vpn连接,发现ipsec连接一直处于pending create阶段,不能正确建立连接。
针对这个问题,发现ipsec的pluto进程(ipsec的守护进程)一直未能正确启动,导致vpn连接不能正确建立,针对这个进程启动解决过程中遇到很多的问题,在这里一一列举出来,以防大家以后遇到同样的问题能有一个参考。
首先,Openstack VPN在底层驱动的选择上有三个底层驱动可供选择,但是目前每个驱动的调用代码都不稳定,导致每个驱动调用的时候都会遇到问题而导致连接建不起来的情况。
例如默认的libreswan驱动遇到的问题
1、\u2018/var/lib/neutron/ipsec/d067e798-3333-4a03-b61e-82c61173d2fb/etc/ipsec.secrets\u2019: Operation not permitted
这个问题已经被redhat确认,目前还未解决,bug连接:
https://bugzilla.redhat.com/show_bug.cgi?id=1352710
在这个问题出现之后,可以通过disable selinux来规避
setenforce 0
修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
2、在修改上述文件之后,你会发现你的服务器会出现卡死的情况,不管你服务器的硬件条件有多少,你都会发现有这样的一个进程certutil 100%占用CPU。导致服务器卡死,查看日志瞬间多出了500M日志,得到
查看代码libreswan_ipsec.py可得知
"""Generate config files which are needed for Libreswan.
Initialise the nssdb, otherwise pluto daemon will fail to run."""
在初始化的时候会建立nssdb,但是如果使用原始的默认代码
#try:
# self._execute([self.binary, 'checknss', self.etc_dir])
#except RuntimeError:
# self._execute([self.binary, 'initnss', self.etc_dir])
在namespace下并不能正确的生成db文件,这个时候的db文件依旧在/etc/ipsec.d/*db下生成,导致在ipsec连接在执行下一步的时候出现死循环的情况,并且kill certutil 进程之后,再次创建ipsec连接,会出现namespace文件夹建立不起来的问题,所以为了保证在第一次创建ipsec连接的时候nssdb能正确建立,需要对源代码做出相应的修改,注释掉源代码中创建nssdb的那段代码。
在ipsec.py中添加如下:
A.在BaseSwanProcess类添加参数bcertutil = "certutil"和NSS_FILES = ['cert8.db', 'key3.db','secmod.db' ]
B.在BaseSwanProcess类添加函数
def _ensure_nss(self, nss_files):
if not os.path.isfile(nss_files):
#start nss database
self._execute([self.bcertutil,
‘-N‘,
‘--empty-password‘,
‘-d‘, self.ipsecd_dir,
])
C.在init函数中添加
self.ipsecd_dir = os.path.join(self.etc_dir, 'ipsec.d')
D.在enable函数中添加
def enable(self):
"""Enabling the process."""
try:
self.ensure_configs()
for nss_file in self.NSS_FILES:
nss_path = os.path.join(self.ipsecd_dir, nss_file)
self._ensure_nss(nss_path)
E.在 OpenSwanProcess类的init函数中添加
self.ipsecd_dir = os.path.join(self.etc_dir, 'ipsec.d')
F.在OpenSwanProcess类的start函数中修改
#start pluto IKE keying daemon
cmd = [self.binary,
'pluto',
'--ctlbase', self.pid_path,
'--ipsecdir', self.ipsecd_dir,
'--uniqueids',
'--nat_traversal',
'--secretsfile', self.secrets_file,
'--virtual_private', virtual_private]
G.添加/usr/share/neutron/rootwrap/vpnaas.filters
libreswan: CommandFilter, certutil, root
重启neutron-server和vpn服务,ipsec就能正确连接起来。
另外的两个驱动做ipsec连接也相应的遇到很多问题,如使用
Openswan来建立连接,会出现Pluto.ctl建立连接失败的问题,查询日志得到
ERROR neutron.agent.linux.utils [req-0440405f-4bdb-4d98-871d-3d225d3b4cd5 - 62c88627c9104e24aea544becaace217 - - -] Exit code: 1; Stdin: ; Stdout: ; Stderr: whack: is Pluto running? connect() for "/var/lib/neutron/ipsec/037d2d4e-2208-485b-b42d-546a407e5db2/var/run/pluto.ctl" failed (111 Connection refused)
目前这个问题还未找到相应的解决办法
另外也有一个strongswan驱动不能建立ipsec连接的问题,在官网的bug目录能找到相应的记录,目前还未解决,链接为:
https://bugs.launchpad.net/neutron/+bug/1606527
在解决M版本vpn连接的问题的时候花费了很长的时间,由于J版本和M版本vpn模块改动较大,M版本相当于将VPN从之前的neutron中独立出来,不再在neutron目录下存在,相应的功能模块也增加了libreswan这个驱动来保证ipsec的连接,目前网上并没有太多的资料可供借鉴,在此写下这篇总结文档,供大家参考,目前还是小白一枚,文章中还有很多不正确和欠考虑之处,还望各位大牛指正。
- openstack M版本VPN连接问题总结
- 单节点安装openstack-M版本遇到的问题
- Openstack Kilo版本安装及问题总结
- M-Howto 安装VPN服务器【OpenVPN版本】
- 连接VPN问题
- mac 无法连接vpn问题
- ceilometer + gnocchi + aodh集成(002) ---- M版本openstack环境安装
- 解决Vista VPN网络连接问题
- VPN连接后不能上网的问题
- 连接vpn后不能上网的问题
- VPN连接后不能上网的问题
- vpn连接的远程登录问题
- vpn gate无法连接的问题
- Mac L2TP VPN无法连接问题
- 解决操作系统连接vpn的问题
- openstack kilo版本heat安装问题
- vpn连接
- VPN连接
- 编译安装Python
- Maven入门与学习
- js字符串等距替换加密
- 函数式编程
- Dubbo之旅--启动解析
- openstack M版本VPN连接问题总结
- iOS界面规范
- Centos 添加PATH环境变量
- 解决No codesigning identities found:
- 构建财务网报报销模块模型
- 后缀表达式(3)——后缀表达式的计算,递归实现
- Dubbo之旅--扩展协议
- C语言测试题的讲解分析
- Android两秒内按返回键两次退出程序