获取openvpn分配的地址和设备

获取openvpn分配的地址和设备

OpenVPN客户端可以动态地分配网络接口设备(例如tun0)用于与服务器的连接,该服务器可以动态地向客户端发布IP地址。

给定一个启动 OpenVPN 客户端(成功建立服务器连接)的 shell 脚本,我如何从脚本中找到网络接口、分配的客户端 IP 地址和服务器的 IP 地址?

理想的答案是提供一种使用 OpenVPN 工具获取这些数据的方法,而无需做出假设和推论。

答案1

您可以使用up脚本将信息写入文件系统,然后从脚本中读取它。

通过增加

--script-security 2 --up "/path/to/up.sh /path/to/dir" 

调用 时,将执行openvpnat 的脚本。/path/to/up.sh它将接收命令行参数,第一个参数将是/path/to/dir明确写入信息的地方,以便调用的 shell 脚本可以找到它。 OpenVPN(请参阅手册页)将以下参数定义为:

tun_dev tun_mtu link_mtu ifconfig_local_ip ifconfig_remote_ip [ init | restart ]

因此,以下示例脚本将所需信息写入给定目录中的文件:

#!/bin/sh
echo $2 > $1/interface
echo $5 > $1/ip

--script-security需要该参数才能允许--up用户定义脚本。)

一旦知道客户端自己的 IP 地址,就可以根据某些假设推断出服务器的地址:

  • 它是子网中第一个可用的地址(OpenVPN 文档说明了这一点)
  • 服务器使用的子网掩码已知(以 CIDR 表示法)

假设这些,则伊普计算工具可用于返回服务器的地址:

ipcalc $(</path/to/dir/ip)/$netmask | grep HostMin | awk '{print $2}'

目前,网络掩码事实需要提前商定,除非有某种我不知道的方法可以自动发现这一点。很高兴看到任何解决此问题的答案,或者希望有一个更好的方法来回答不需要使用脚本upipcalc拼凑的问题。

相关内容