Openvpn

獲取openvpn分配的地址和設備

  • September 14, 2016

OpenVPN 客戶端可以動態地分配網路介面設備(例如tun0)用於與伺服器的連接,該伺服器可以動態地向客戶端發布 IP 地址。

給定一個啟動 OpenVPN 客戶端(成功建立伺服器連接)的 shell 腳本,我如何從腳本中找出網路介面、分配的客戶端 IP 地址和伺服器的 IP 地址?

理想的答案是提供一種使用 OpenVPN 工具獲取這些數據的方法,而無需做出假設和推斷。

您可以使用up腳本將資訊寫入文件系統,然後從腳本中讀取。

通過增加

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

對於 的呼叫,將執行openvpn腳本 at 。/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工具可用於返回伺服器的地址:

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

目前,需要提前同意網路遮罩事實,除非有某種我不知道的方式可以自動發現這一點。很高興看到解決此問題的任何答案,或者希望有更好的方法來回答不需要使用up腳本或ipcalc拼湊的問題。

引用自:https://unix.stackexchange.com/questions/309672