OpenVPNが正常に接続した後にスクリプトを実行するにはどうすればよいですか?


50

VPNが正常に接続されたときに実行されるようにスクリプトをOpenVPNに関連付けるにはどうすればよいですか?


クライアントの場合、私は推測しますか?どのソフトウェアを使用していますか?OpenVPN、またはラッパー(NetworkManagerなど)?
-Lekensteyn

@Lekensteyn、ラッパーnetwork-manger-openvpn
オックスウィビ

回答:


62

network-manager-openvpnそのような機能を提供していません、openvpn直接使用する必要があります。

--script-security 2 --up /path/to/your/script接続時に渡す。にある構成ファイルを使用している場合は、構成ファイルに/etc/openvpn/次の行を追加します。

script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh

OpenVPNのマンページから:

--script-security level [メソッド]
              このディレクティブは、OpenVPNの使用をポリシーレベルで制御します。
              外部プログラムおよびスクリプトの。レベル値が低いほど
              制限的で、値が大きいほど寛容です。の設定
              レベル:

              0-厳密には外部プログラムの呼び出しはありません。
              1-(デフォルト)ifconfigなどの組み込みの実行可能ファイルのみを呼び出し、
              ip、route、またはnetsh。
              2-組み込みの実行可能ファイルとユーザー定義の呼び出しを許可する
              スクリプト。
              3-環境経由でパスワードをスクリプトに渡すことを許可する
              変数(潜在的に安全ではない)。
       --up cmd
              TUN / TAPデバイスを正常に開いた後に実行するシェルコマンド(pre
              --user UID change)。upスクリプトは、指定するのに役立ちます
              プライベート宛てのIPトラフィックをルーティングするrouteコマンド
              VPN接続のもう一方の端に存在するサブネット
              トンネル。
スクリプトの実行順序
       --up TCP / UDPソケットバインドおよびTUN / TAPが開いた後に実行されます。
       --down TCP / UDPおよびTUN / TAPが閉じた後に実行されます。

スクリプトを実行するためのイベントは他にもあります。それらはマニュアルページにあります

を作成し/etc/openvpn/up.sh、実行許可(たとえば、755または700)を付与します。IPv6アドレスとルートを追加するためのコンテンツの例(教育目的で表示されます。直接コピーしないでください):

#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev

このupスクリプトはルートとして実行されることに注意してください。あなたが指定していない場合UserGroup設定を、OpenVPNのは、のようなスクリプトを実行しますdownあまりにとして根を。


openvpnを直接使用する方法がわからない場合は、現在の構成の詳細を追加します:接続タイプ(X509証明書など)、ゲートウェイポート、LZO圧縮、TCPの強制、タップデバイスの使用、暗号、HMACおよびTLS。IP設定が自動でない場合は、IP設定にも言及してください。プライバシーを守るために、実際の住所は省略してください。
-Lekensteyn

OK また、インターネットに接続しているときに自動的に接続するにはどうすればよいですか?そして最後に、答えで言及した行をどこに追加する必要があるのか​​理解できませんでした。
オックスウィビ

答えを拡大してopenvpn直接使用しました。サーバーをセットアップするとき、サーバーがダウンしたときにOpenVPNが再接続を試みることに気付きました。ネットワークインターフェイスがダウンしたときにOpenVPNが試行を続けるかどうかはわかりません。
レーケンシュタイン

私の問題は、ネットワークインターフェイスがダウンしたときではなく、インターネット接続が失われたときに再び接続しようとすることです。インターネットに接続するたびにVPNに接続したいだけです。
オックスウィビ

ああ、スクリプトはすべてのVPN接続に適用されますか?そして、してください返信する際、タグ@Oxwivi、私はそうでない場合は通知されません。
オックスウィビ

5

「VPNが正常に接続されたときに実行されるようにスクリプトをOpenVPNに関連付けるにはどうすればよいですか?」Lekensteynが優れた答えを提供したことを指摘したいと思います。しかし、彼の答えが作成された時点では、特にリブート後に同じように動作するように、ubuntuマシンでopenvpnを起動するためにopenvpnコマンドライン引数をどのように提供するかについて、少し明確に欠けていました。


UbuntuのOpenvpnコマンドライン引数:

当然、有効な有効なオプションを使用してコマンドラインからopenvpnを起動できます。ただし、Ubuntuマシンでは、リブート後に同じコマンドライン引数でopenvpnを起動する場合、ファイルの編集を検討する必要があります/etc/default/openvpn。次の行を調べます。

# Optional arguments to openvpn's command line
OPTARGS="" 

コミュニティOpenVPNのmanページ--script-security

--script-security level
    このディレクティブは、OpenVPNの外部の使用をポリシーレベルで制御します。 
    プログラムとスクリプト。レベルの値が低いほど制限が大きく、値が高い
    値はより寛容です。レベルの設定:
0-厳密には外部プログラムの呼び出しはありません。 
1-(デフォルト)ifconfig、ip、route、
またはnetsh。 
2-組み込みの実行可能ファイルとユーザー定義スクリプトの呼び出しを許可します。 
3-パスワードが環境変数を介してスクリプトに渡されることを許可する
(潜在的に安全ではない)。

v2.3より前のOpenVPNリリースでは、方法フラグを示すメソッドフラグもサポートされていました。 
OpenVPNは外部コマンドとスクリプトを呼び出す必要があります。これはどちらかです
またはシステム。OpenVPN v2.3以降、このフラグは受け入れられなくなりました。ほとんどの* nix
環境execve()アプローチは問題なく使用されています。

--upなどの一部のディレクティブでは、オプションを外部スクリプトに渡すことができます。
これらの場合、スクリプト名にスペースが含まれていないこと、または 
構成パーサーは、スクリプトの場所を判別できないため、停止します 
名前が終了し、スクリプトオプションが開始されます。

の短縮セクションと組み合わせて --up

--up cmd
    TUN / TAPデバイスが正常に開いた後、コマンドcmdを実行します(--user UIDの変更前)。
    cmdは、スクリプト(または実行可能プログラム)へのパスで構成され、オプションで後に続きます
    引数によって。パスと引数は、シングルクォートまたはダブルクォートまたは/または
    バックスラッシュを使用してエスケープし、1つ以上のスペースで区切る必要があります。

例:

openpvn server.confを使用しているマシンでは、/etc/default/openvpnファイルに次の行があります。

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 

ちなみに、nat.shは、プライベートネットワークトラフィックをopenvpnクライアントからパブリックインターネットにルーティングするためのネットワークアドレス変換をセットアップします。これは、パブリックWIFIアクセスポイントを信頼しない場合に適しています。


再起動後に期待どおりに再起動できるようにするだけでなく/etc/openvpn/[client or server].conf/etc/default/openvpnファイルが適切に構成されている場合、openvpnは次の方法で起動または停止できます。

sudo service openvpn start
sudo service openvpn stop

以下のために利用できる他の有用なオプションservice openvpnが含まcond-restart,force-reload,reload, restart,soft-restart, start, status, stop


3

それは非常に古いスレッドなので、まだ興味があるかどうかはわかりません。NetworkManagerを使用してVPNに接続する場合は、次のような簡単なudevルールを追加できます。

KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"

これにより、VPNの作成後にスクリプトが実行されます。


1

私はこの問題を解決するための調査で答えを見つけましたが、最良の解決策は次のとおりです(openvpnサーバーを使用)。

実行するスクリプトを作成します。

# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh

# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>

次の行をopenvpn構成に追加します(通常は/etc/openvpn/server.conf)。上記の回答では、サーバーの起動(再起動)時に使用される上下に使用されました。ディレクティブclient-connect(およびclient-disconnect)は、クライアントが接続(切断)するときに使用されます。

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>

ログファイルにクライアント構成名をどのように含めますか?
カリスト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.