SSL VPN(openvpn)如何通过 UDP 连接?

SSL VPN(openvpn)如何通过 UDP 连接?

我需要测试 OpenVPN 服务 (ssl-vpn) 是否正在从 Linux 机器监听特定 IP 地址和端口。我想使用 bash 脚本或 python 或 c/c++ 中的一些代码来做到这一点,但这不是问题 - 只要我知道 UDP 在这里如何工作,我就可以实现它。

我的问题是:远程计算机上的 VPN 服务配置为使用 UDP,并且由于 UDP 不是支持 TCP 等连接的协议,所以我假设我发送到远程机器的任何消息/包的答复都会被答复到我本地机器上的另一个端口。

我知道 netcat,但显然我不会使用无连接 UDP 协议收到答复,因此检查是nc -u ip port行不通的。

那么,如何检查 VPN 是否真的在 IP 地址和端口后面启动并运行。

编辑:
是否可以使用 bash 脚本模拟 VPN?例如使用 SMTP 中的 HELO 连接并检查 VPN 服务器是否发送了回复?我知道这在 tcp 中是如何工作的,但我不知道如何在 UDP 中做到这一点。

编辑2:
我刚刚发现这个答案。那么,当远程服务器不可用时,我该如何监听应该应答的 ICMP 包?使用 bash/python/c/c++ 或 netcat 可以实现吗?我如何知道服务器是否在那里,监听请求(那么不应该有 ICMP 响应,对吗?)?

答案1

我认为可靠地测试这一点的唯一方法就是简单地建立与 VPN 的连接。

正如您所说,使用 TCP 的 OpenVPN 无法通过简单的 TCP 连接进行测试。我怀疑唯一的测试方法是使用 OpenVPN 协议。

我认为可以修改客户端以在未完全连接的情况下进行测试。

答案2

这是我之前对类似问题的回答。
如何在不使用 OpenVPN 客户端的情况下检查 OpenVPN 服务器是否正在监听远程端口?
如果您正在使用 tls 身份验证(tls-auth 配置行),则这不起作用,但您可以了解 UDP 对话的想法。

import socket
senddata= "\x38\x01\x00\x00\x00\x00\x00\x00\x00"

def checkserver(ip,port):
   print('Checking %s:%s' %(ip,port)) 
   sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
   sock.settimeout(5) # in seconds
   sock.connect((ip, port))
   print("Sending request...")
   sock.send(senddata)
   try:
      dta=sock.recv(100)
      print("Server reply: %s" %(dta))
   except:
      print("Server not responding")
   sock.close()
   print("###########################################################")

def main():
   checkserver("addr.of.server1",1194)
   checkserver("addr.of.server2",1195)

if __name__ == "__main__":
   main()

相关内容