tun0
OpenVPNクライアントは、サーバーに接続するためにネットワークインタフェースデバイス(たとえば)を動的に割り当てることができ、これはクライアントにIPアドレスを動的に発行できます。
OpenVPNクライアントを起動し、サーバーへの接続を正常に確立するシェルスクリプトがある場合は、スクリプトでネットワークインターフェース、割り当てられたクライアントIPアドレス、およびサーバーのIPアドレスをどのように見つけることができますか?
理想的な答えは、仮定や推論なしにOpenVPNツールを使用してこのデータを取得する方法を提供することです。
答え1
up
スクリプトを使用してファイルシステムに情報を書き込み、スクリプトから読み取ることができます。
増やすことで
--script-security 2 --up "/path/to/up.sh /path/to/dir"
呼び出されると、openvpn
atのスクリプトが実行されます。/path/to/up.sh
コマンドライン引数を受け取り、最初の引数は、/path/to/dir
呼び出すシェルスクリプトが見つかるように情報が明示的に書き込まれる場所になります。 OpenVPN(manページを参照)は、次のパラメータを次のように定義します。
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表記)。
もしそうなら、これらの仮定をしてみるとIP計算ツールを使用してサーバーアドレスを返すことができます。
ipcalc $(</path/to/dir/ip)/$netmask | grep HostMin | awk '{print $2}'
現在のネットマスクの事実は、私が自動的に発見する方法がない限り、事前に合意する必要があります。この問題を解決する答えを見たい場合、またはスクリプトup
やパッチワークを使用する必要がない質問に答えるためのより良い方法があることを願っていますipcalc
。