OCServ DTLS 连接异常
问题症状
环境:Ubuntu 16.04 x64
版本:OCServ 0.10.11-1build1
今日重置了阿里云 ECS 后,选择从 APT 源直接安装 OCServ 而非从官网手动下载安装,随后便发生了一些诡异事情。
service ocserv start
所启动的 OCServ 服务在 IPv4 网络中进行连接时,尽管网络状态良好,仍然回退到了 TLS 链路。而使用 ocserv
命令直接启动服务却能正常建立 DTLS 连接。
使用 lsof -i:443
检查 443 号端口监听状态时发现,前者会由 systemd
与 ocserv-main
共四个进程监听 IPv6 协议类型上的 443 号端口的 UDP/TCP,而后者由 ocserv
共两个进程监听 IPv4 协议类型上的 443 号端口的 UDP/TCP。
查看 /etc/init.d/ocserv
文件发现,OCserv Daemon 在启动时会正确调用位于 /etc/ocserv/ocserv.conf
的配置文件,但却没有根据配置文件中的设定进行监听。
解决方案 1
早在 2016 年便有人指出这个缺陷(现已修复),而阿里云 APT 源中的包版本较老,所以没有修复此问题。
Try to go to “/lib/systemd/system/” and modify the file of “ocserv.service”,
1.use vim to change two lines,
2.Remove the line of “Requires=ocserv.socket”
3.Remove the line of “Also=ocserv.socket”
4.save the file,
execute “systemctl daemon-reload”,
then reload the service “service ocserv start”
- 编辑
/lib/systemd/system/ocserv.service
,移除Requires=ocserv.socket
和Also=ocserv.socket
- 重新加载 Systemd 配置文件:执行
systemctl daemon-reload
- 重启 OCServ 服务:执行
service ocserv start
服务重启后,DTLS 连接可以正常建立,且未与 OpenVZ-BBR 冲突,至此问题得到了完美解决。
解决方案 2
使用 apt remove ocserv
移除旧版本的 OCServ,从 OCServ 项目官网 下载最新版本的 OCServ,然后手动安装。