nmtysh.log

Tech系のネタや日々の独り言などを書いています。

VPN接続のKeep Aliveを行う

VPN接続した状態でSSH等を行わずに放置していると、自動的にセッションが閉じられてしまいます。
それだと不便なので、VPN接続が切れないようにします。

・環境
Ubuntu 12.04

1. /etc/NetworkManager/dispatcher.d/ にシェルスクリプトを作成します。

sudo vi /etc/NetworkManager/dispatcher.d/03vpnkeepalive
#!/bin/bash
# ping 送信先
PING_HOST=
# 送信間隔
INTERVAL=300

if [ "$2" = "vpn-up" ]; then
    ping -W 1 -i ${INTERVAL} ${PING_HOST} &
fi

if [ "$2" = "vpn-down" ]; then
    kill $(ps aux | grep "ping -W 1 -i ${INTERVAL} ${PING_HOST}" | \
        grep -v grep | awk -F " " '{print $2}')
fi


2. 作成したシェルスクリプトに実行権限を付与します。

sudo chmod a+x /etc/NetworkManager/dispatcher.d/03vpnkeepalive



pingの送信先には、VPN接続時にSSHでつなぐホストなどを指定して下さい。
定期的に通信が発生することで、そのセッションが有効だと認識させます。
なので、送信間隔はデフォルト5分(300秒)にしていますが、環境に依っては調整が必要かもしれません。
可能であれば送信間隔を長めにした方が、余計な通信が発生しなくなります。

関連:
VPN接続でmtuを自動設定する