Openvpn
獲取openvpn分配的地址和設備
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
拼湊的問題。