OpenVPN是Linux下开源VPN,提供了良好的性能和友好的用户GUI,本文来看看openvpn服务多次异常退出的解决办法.
最近的openvpn服务异常退出了多次,由于当初为了排查问题记录大量的debug日志,导致出现问题的时候想定位问题很难,瞬间日志就被刷没了,进程掉了,瞬间启动、瞬间又掉了,导致很多订单丢了,由于日子文件记录了太多无用信息,不敢通过查日志来定位问题,开始大胆猜测.
1.openvpn 服务器(虚拟机)的 内存不够了 因为只有 2G 内存.
2.I/O过高,因为日志开启了 DEBUG 的原因,大量写日志操作.
3.打开文件描述符不够,系统默认 1024.
4.有人恶意攻击openvpn 服务.
根据猜测的4点,开始应对.
1.首选把openpvn服务器(虚拟机)内存调整到了4G,重启后发现openvpn 服务在启动后的 几分钟还是异常掉.
2.把日志调整为 error,openvpn 在启动后,几分钟还是异常退出了,查看日志发现是.
- Feb1817:17:42localhostopenvpn[1219]:qn_anqiu/xxx.xxx.xxx.xx:27351CRL:cannotread:/usr/local/cine/etc/keys/crl.pem:Toomanyopenfiles(errno=24)
3.有上面的错误日志提示,说明猜想的 第三点是对的,执行命令:
shell $> ulimit -SHn 65535
在启动 openvpn 进程后,正常了没有再次退出了.
4.查看日志 发现有一个 IP 每分钟都在非正常请求 openvpn 服务器,直接在 iptables 过滤掉此IP.
- Feb1613:06:16localhostopenvpn[1219]:58.244.191.51:47374WARNING:Badencapsulatedpacketlengthfrompeer(18245),whichmustbe>0and<=1544--pleaseensurethat--tun-mtuor--link-mtuisequalonbothpeers--thisconditioncouldalsoindicateapossibleactiveattackontheTCPlink--[Attempingrestart...]
- Feb1613:07:21localhostopenvpn[1219]:58.244.191.51:6043WARNING:Badencapsulatedpacketlengthfrompeer(18245),whichmustbe>0and<=1544--pleaseensurethat--tun-mtuor--link-mtuisequalonbothpeers--thisconditioncouldalsoindicateapossibleactiveattackontheTCPlink--[Attempingrestart...]--phpfensi.com
经过上面的修改,经过两天后 openvpn 还是异常掉了一次,经过查看日志还是老问题:
- Feb1817:17:42localhostopenvpn[1219]:qn_anqiu/xxx.xxx.xxx.xx:27351CRL:cannotread:/usr/local/cine/etc/keys/crl.pem:Toomanyopenfiles(errno=24)
就算打开文件描述符进程也不应该掉啊,这说明是openvpn 的 BUG,crl.pem 该文件里存的是注销的证书,如果是注销的证书验证是不能通过,openvpn服务就会拒绝连接,我目前有 800多个客户端来连接,难道是每个连接都要请求该文件没有释放吗?就算没有释放65535 个文件描述符还是不够么?
为了解决问题只好修改配置文件把这个验证注销证书的参数去掉,在重启 openvpn 进程,就正常了再也没有出现过问题,具体如何产生还需要进一步观察和研究.