我在 Debian Wheezy 上有一个以桥接模式运行的 OpenVPN 服务器 (2.3.2)。客户端连接并访问其所需的网络方面一切正常。我尝试通过使用客户端连接选项添加一些花哨的功能。这是 openvpn 配置文件的相关部分:
script-security 3 system
client-connect /etc/openvpn/scripts/clientconnect.sh
为了检查脚本是否真正运行,clientconnect.sh 包含以下内容:
#!/bin/bash
echo "testing">>/etc/openvpn/scripts/test
exit 0
够简单了。
如果我从命令行运行脚本,则正如预期的那样,“testing”每次都会附加到 /etc/openvpn/scripts/test,并且返回 0。
当我从客户端连接时,我会在 /etc/openvpn/scripts/test 中看到“测试”。太棒了!
但当我断开连接并再次连接时,我没有得到另一个“测试”
因此,为了检查其实际上运行时我将 clientconnect.sh 中的退出值更改为 1
果然,每一个尝试从客户端连接失败,因为脚本返回非 0 值。
为什么看起来脚本没有运行?
顺便说一句,如果我在服务器上重新启动 openvpn 服务,那么我会再次进行“测试”,但同样,后续连接上没有任何内容写入。
任何指示/帮助/神秘咒语都会受到感激!迪伦
答案1
OpenVPN 对网络中断具有很强的弹性(并且它在这方面确实表现出色),所以除非你explicit-exit-notify [n]
的客户端配置中有类似的东西,否则断开该客户端的连接在服务器上看起来就像是网络中断。
然后,根据您配置超时/保持连接等的方式,服务器可能需要很长时间才能确定客户端是否真的消失了。您可能只是在测试中没有达到这种情况。
一种验证方法是启用服务器中的管理接口,然后telnet localhost 1194
在那里执行并验证客户端是否真的断开连接(在客户端断开连接后),通过执行“状态”命令并检查其输出。
另一种更低技术的测试方法是将脚本挂接到事件 client-disconnect
并查看它是否在客户端断开连接时运行。
答案2
要获得另一个“测试”,请使用选项日志附加到文件,在你的情况下是/etc/openvpn/scripts/test。问题是第一次测试被第二次测试覆盖。所以你看不到它,但你明白了