1

要测试 OpenVPN 隧道设置,我需要检测新启动的 OpenVPN 守护程序何时建立了隧道(或尝试过但未成功),然后再尝试通过隧道发送内容。

4

1 回答 1

5

基于一个很好的超时tail方法:

ssh hostname '
    sleep 5 &
    timerPID=$!;
    tail -n0 -F --pid=$timerPID /var/log/messages | grep openvpn | while read -r line;
    do
        if echo "$line" | grep -qF -e "Initialization Sequence Completed" -e "Connection refused";
        then
            kill $timerPID;
            break;
        fi;
    done &
    /etc/init.d/openvpnA start &
    wait $timerPID'

那是:

  1. 连接到 VPN 客户端或服务器
    1. 异步启动计时器
    2. 异步收集日志行,openvpn直到计时器终止
      1. 寻找连接成功或被拒绝的迹象
        1. 杀死计时器
        2. 退出循环
    3. 启动守护进程
    4. 等待计时器结束

它似乎有效,但不熟悉 OpenVPN 我不确定这是否是检测连接状态的正确方法。由于我是唯一使用该机器的人,我认为grep可以忽略由于较早的进程启动而导致成功的时间问题的可能性。但我猜只有熟悉 OpenVPN 代码的人才能真正回答这个问题:当前测试是否足以确定连接是成功还是拒绝?

于 2013-09-20T19:12:48.830 回答