LoginSignup
1
2

VyOSで、IPsecの無通信断を自動でいい感じに回復させる

Posted at

背景

VyOSでIPsecを使っている場合、無通信時間が続くと勝手にIPsecが切れてしまい手動でresetしないと復旧しない。
IKEのdead-peer-detectionコマンドが効かない問題もあって、手動運用に頼らない方法でIPsecトンネルを回復させる方法を供養する

環境

どこぞのIaaSで動かしている環境

admin@hogetan:~$ sh version 
Version:          VyOS 1.2.5
Built by:         Sentrium S.L.
Built on:         Sun 12 Apr 2020 15:18 UTC
Build UUID:       1695c660-d785-4b16-a54b-66d6a02ea24f
Build Commit ID:  48cc9fc46569e6

Architecture:     x86_64
Boot via:         installed image
System type:      KVM guest

多分task-schedulerコマンドが動くVyOSならおk

設定

shell scriptの展開

/config/scripts/vpnchecker.sh
#!/bin/bash

# VyOSコマンドで show vpn ipsec sa した結果からいい感じにpeer先を取り出して配列にするワンライナー
ip_list=`/bin/vbash -ic "sh vpn ipsec sa | egrep 'down' | awk '{print $1}' | cut -d'-' -f2"`

# 重複を排除する
ips=($(printf "%s\n" "${ip_list[@]}" | sort -u))

# 重複を排除した配列をforで回して、downなpeerだけ reset vpn ipsec-peer して復活させる
for ip in "${ips[@]}"
do
    echo "$ip"
    /bin/vbash -ic "reset vpn ipsec-peer $ip"
done

黒魔術メモ

show vpn ipsec sa のサンプルは以下の通り。downしている部分はRemote addressがN/Aになるので、peer先アドレスは1ブロック目のpeer名から取ってくるのが吉

admin@hogetan:~$ sh vpn ipsec sa
Connection                   State    Up           Bytes In/Out    Remote address    Remote ID    Proposal
---------------------------  -------  -----------  --------------  ----------------  -----------  ---------------------------------------------------------
peer-192.0.2.1-tunnel-2      up       109 minutes  N/A             192.0.2.1         N/A          3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
peer-198.51.100.1-tunnel-1   up       3 minutes    N/A             198.51.100.1      N/A          AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/MODP_2048
peer-198.51.100.1-tunnel-2   down     N/A          N/A             N/A               N/A          N/A
peer-192.0.2.1-tunnel-1      up       109 minutes  5K/9K           192.0.2.1         N/A          3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
peer-192.0.2.1-tunnel-5      up       109 minutes  5K/8K           192.0.2.1         N/A          3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
peer-192.0.2.1-tunnel-4      up       109 minutes  2K/4K           192.0.2.1         N/A          3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
peer-192.0.2.1-tunnel-3      up       109 minutes  78K/128K        192.0.2.1         N/A          3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
peer-192.0.2.1-tunnel-6      up       109 minutes  6K/11K          192.0.2.1         N/A          3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024

downだけgrepすると

admin@hogetan:~$ sh vpn ipsec sa | egrep 'down'
peer-198.51.100.1-tunnel-2  down     N/A          N/A             N/A               N/A          N/A

peerのアドレスがほしいのでawkで1ブロック目を取り出す

admin@hogetan:~$ sh vpn ipsec sa | egrep 'down' | awk '{print $1}'
peer-198.51.100.1-tunnel-2

余計な文字列が邪魔なので - 区切りで2ブロック目のアドレスを取り出す

admin@hogetan:~$ sh vpn ipsec sa | egrep 'down' | awk '{print $1}' | cut -d'-' -f2
198.51.100.1

これでdownしているIPsecのPeerアドレスが取れる

task schedulerの設定

5分毎にvpnchecker.shを動作させるようにする

admin@hogetan:~$ configure 
admin@hogetan# set system task-scheduler task vpncheck executable path '/config/scripts/vpnchecker.sh'
admin@hogetan# set system task-scheduler task vpncheck interval '5m'

終わり

めでたく自動化完了

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2