OpenVPN基于PAM对接FreeRADIUS认证正常,但无计费(Accounting)数据包发送问题求助
嗨,看起来你的认证环节已经顺利跑通了,但计费数据包没正常发送确实挺闹心的。我帮你梳理几个可能的排查方向,你可以逐一尝试:
确认OpenVPN的PAM插件是否触发了PAM的Session阶段
你已经在/etc/pam.d/ovpn里配置了session required pam_radius_auth.so,但OpenVPN的openvpn-plugin-auth-pam.so插件在某些场景下,可能不会主动触发PAM的session阶段调用。你可以先试试把setenv deferred_auth_pam 1这个配置注释掉,重启OpenVPN后重新连接测试。另外,建议把OpenVPN的verb参数调高到4或5,这样日志里会记录更详细的PAM交互过程,你可以查看/var/log/openvpn/openvpn.log里有没有类似PAM: session open的日志条目,确认session阶段是否被调用。检查PAM-RADIUS模块是否需要额外参数启用计费
部分版本的pam_radius_auth.so模块需要明确指定accounting参数才能触发计费数据包的发送。你可以尝试修改/etc/pam.d/ovpn里的session配置行:session required pam_radius_auth.so accounting修改后重启OpenVPN服务,再测试连接是否会发送计费数据包。你也可以通过
man pam_radius_auth查看该模块的官方文档,确认是否需要这类额外参数。核对OpenVPN运行权限是否足够触发PAM会话
你的OpenVPN当前以nobody/nogroup的身份运行,这个用户的权限可能不足以让PAM的session模块正常执行并发送Radius计费请求。可以临时修改server.conf里的user和group为root,重启服务后测试连接,如果此时计费数据包能正常发送,那就说明是权限问题,你需要调整PAM的配置或者给nobody用户赋予必要的权限。深挖日志细节定位问题
- 查看系统的PAM相关日志(通常是
/var/log/auth.log),检查OpenVPN连接时,PAM的session阶段是否有报错信息。 - 查看FreeRADIUS服务器的日志(比如
/var/log/radius/radius.log),确认是否收到了来自OpenVPN服务器的任何数据包,哪怕是被拒绝的请求,也能证明OpenVPN有尝试发送计费数据包。 - 用pamtester模拟完整的session流程:执行
pamtester ovpn <你的测试用户名> open_session,然后查看Radius服务器是否收到计费开始请求;再执行pamtester ovpn <你的测试用户名> close_session,看是否收到计费结束请求,对比OpenVPN实际连接时的日志差异。
- 查看系统的PAM相关日志(通常是
确认OpenVPN的PAM插件是否支持计费触发
极少数情况下,某些版本的openvpn-plugin-auth-pam.so可能不支持通过PAM session阶段触发Radius计费。你可以尝试升级OpenVPN到最新稳定版,或者替换为其他支持Radius计费的OpenVPN插件(比如openvpn-plugin-radius,不过这个需要额外编译安装)。
备注:内容来源于stack exchange,提问作者Comandante

