web-dev-qa-db-ja.com

NetworkManagerからのvpncのリスポーニング

私の大学には、インターネットに接続するためにVPNを使用する必要がある特別なワイヤレスネットワークがあります。したがって、ワイヤレスに入るとVPNに接続するスクリプトはほとんどありません。

/etc/NetworkManager/dispatcher.d/99bonnet

if [[ "$1" != "wlan0" ]]
then
    return
fi

# Kill vpnc if it is still active
if pgrep vpnc
then
    vpnc-disconnect
fi

# Exit if we are not connected to bonnet
if ! iwconfig wlan0 | grep bonnet
then
    return 0
fi

# Handle the action
if [[ "$2" == up ]]
then
    vpnc "$vpn_config_file"
else
    vpnc-disconnect
fi

これは魅力のように機能し、VPNをwifiに接続および切断します。問題は、vpncが私に死ぬ傾向があるということです。 vpncが死んだ場合にリスポーンする方法はありますか? プロセス管理に関する素晴らしいウィキ がありますが、ここでの目的にinittabを実際に使用することはできないか、少なくとも単純ではないようです。

特定のワイヤレスに接続しているときにvpncが停止した場合、ハック以外の方法でvpncをリスポーンする方法は何ですか?

2
Martin Ueding

接続にほぼ同じ時間が経過した後にvpncが停止することに気付いた場合は、DPDを無効にしてみてください。

   --dpd-idle <0,10-86400>
          Send DPD packet after not receiving anything for <idle> seconds.  Use 0 to disable DPD completely (both ways).
          Default: 300
   conf-variable: DPD idle timeout (our side) <0,10-86400>

(vpncのmanページから取得)

上記のパラメーター(--dpd-idle 0)は、デッドピア検出を無効にし、パケットが時間内に到達しない場合に接続が停止するのを回避します。それ以外の場合は、上記のように構成ファイルで設定できます。

「まだアクティブな場合」にvpncが無条件に停止しないように、起動スクリプトも少し編集したいと思います。 「up」および「down」とは異なる状態変化が発生している可能性があります(たとえば、「hostname」があります)。たとえば、信号レベルの変化が原因でアクセスポイントからアクセスポイントにローミングする場合、またはそれ以外の場合は、新しい「アップ」が発生する可能性があります。言い換えると:

# Exit if we are not connected to bonnet
if ! iwconfig wlan0 | grep bonnet then
    # Kill vpnc if it is still active
    if pgrep vpnc then
        vpnc-disconnect
    fi
    return 0
fi

2つの別々のチェックを行う代わりに。 (私はそれをテストしませんでしたが)