--client-connect 和 --client-disconnect 的 OpenVPN 会话 ID(不可预测的执行顺序)

--client-connect 和 --client-disconnect 的 OpenVPN 会话 ID(不可预测的执行顺序)

我有一个问题:

  1. 客户端 A 连接(--client-connect)
  2. 客户端 A 由于某种原因再次连接,可能崩溃了,也可能发生了其他意外情况,谁知道呢(--client-connect)
  3. 客户端A原始连接超时(--client-disconnect)

然后,我的脚本通知客户端已断开连接,而实际上,原始会话已断开连接,但现在仍有一个活动会话。

我熟悉显式退出通知,但这专门用于客户端未通知断开连接的情况。

是否有任何类型的环境变量或某种东西来识别哪个会话断开了? - 这样我就可以说啊,第一个会话断开了,第二个会话仍然正常。

如果没有,还有其他解决方案/ENV var 可以正确识别会话吗?

答案1

我找到了一个解决方案。当客户端断开连接时,ENV 变量中的日期实际上是连接开始的时间,而不是断开连接的时间。您可以通过添加持续时间秒数来计算断开连接的时间。

我最终用这样的代码来找到连接并填写缺失的详细信息以及断开连接时间(ruby):

case script_type
when 'client-connect'
  c = create!({ common_name:, starts_at:, time_unix: }.merge(v))
when 'client-disconnect'
  c = where(common_name:, time_unix:).first    
  c.bytes_received = v['bytes_received'].to_i
  c.bytes_sent = v['bytes_sent'].to_i
  c.time_duration = v['time_duration'].to_i
  c.ends_at = c.starts_at + c.time_duration.seconds
end

相关内容