さくらのクラウドのVPCルータとRTX1220のサイト間VPNでVPN再接続を実施しないとデータが流れない場合の回避方法

さくらのクラウドのVPCルータとRTX1220をサイト間VPNで接続する場合ですが、基本的に、

https://manual.sakura.ad.jp/cloud/network/vpc-router/vpc-site-to-site-vpn-appliance-settings.html#vpc-site-to-site-vpn-appliance-settings-yamahartx

とか

https://knowledge.sakura.ad.jp/7051/

とか

https://network.yamaha.com/setting/router_firewall/cloud/sakura_cloud/setup_rt

に掲載されている設定そのままで繋がるのですけど、RTX1220 を再起動した場合や RTX1220 側の SA を削除した(**[ipsec sa delete](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_sa_delete.html)** と **[ipsec refresh sa](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_refresh_sa.html)** の何れでも)場合、DPD の設定の通りに通信断が検出されず、さくらのクラウドのコントロールパネルで提供されている[「VPN再接続」機能](https://cloud-news.sakura.ad.jp/2021/08/05/vpc-router-restart-vpn/)というものを使わないと再接続してくれないという問題を回避する策を調べた際のメモ。私だけかもしれませんけど。

ちなみに、VPCルータはプレミアムです。たぶん、スタンダードでも同様かと。ハイスペックは高すぎて手が出ないので知らないです。

実際、これでは運用上困りますので、なんとかしようと思った次第。RTX1220からluaで[API](https://developer.sakura.ad.jp/cloud/api/1.1/appliance/)叩いて何とかする手は残されていそうですが。

ちなみに、RTX1220 のファームウェアのバージョンは Rev.15.04.03 です。VPC ルータバーションのバージョンは 2 です。

#起きていたこと

さくらのクラウドのVPCとRTX1220がサイト間VPNで問題なく繋がっている状態(数日とか1週間とか)とします。その状態で RTX1220 を再起動したり、SA を削除した(**[ipsec sa delete](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_sa_delete.html)** と **[ipsec refresh sa](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_refresh_sa.html)** 何れでも)場合に、当然、そのサイト間VPN接続は切れるわけですが、その後、待てど暮らせどデータが流れない。

**[show status tunnel](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/showstatus/show_status_tunnel.html)**をしても Current status は Online になっているのだが、ping などを打っても応答はなし。このケースでよくあるのが、フィルタをかけてしまっているとか経路がないとかですけど、そもそも SA 消す前まで繋がっているので、その線はないと考えて良さそう。DPD で通信断が検出されないのも、Current status が Online なので、IPsecトンネルとしては繋がっていることになっているようです。

#やってみたこと

取り敢えず、デバッグレベル上げてログ眺めるかと思いましたが、接続に必要な情報は[ここ](https://manual.sakura.ad.jp/cloud/network/vpc-router/vpc-site-to-site-vpn.html#id2)とかに挙がってますし、その記載の範囲では、たとえば「暗号アルゴリズム」が「AES128」となっているところを、他の暗号アルゴリズムを試行してみる必要はないですし、実際問題として「それ変えたら繋がらないだろう」や「それは関係ないだろう」はありますので、そういうコマンドを消去していくと、以下の2つしか変えて良さそうなものが残りませんでした。

+ [18.9 IKE の鍵交換を始動するか否かの設定](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_auto_refresh.html) (**ipsec auto refresh** [gateway_id] switch)
+ [18.27 IKEv1 鍵交換タイプの設定](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_ike_backward_compatibility.html) (**ipsec ike backward-compatibility** gateway_id type)

「[18.9 IKE の鍵交換を始動するか否かの設定](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_auto_refresh.html)」を試してみる点については言うまでもなさそうですが、「[18.27 IKEv1 鍵交換タイプの設定](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_ike_backward_compatibility.html)」については、その選択肢が、

1. ヤマハルーターのリリース 1 (過去のリリース) との互換性を保持する
1. ヤマハルーターのリリース 2 (新リリース) に合わせる

だったので、マニュアルを読む範囲では、仕様として何が変わるのかわからなかったので試してみた次第です。

まず、「[18.9 IKE の鍵交換を始動するか否かの設定](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_auto_refresh.html)」、つまり、**ipsec auto refresh** [gateway_id] switch ですが、上記問題を解決する意味では、switch が **on** では、どうやってもダメそうです。つまり、switch を **off** にする必要があるようです。

要するに、この問題を解決するという意味では、RTX1220 を Initiator にはできなさそうということですが、さくらのクラウドのVPCルータがメインモードのみの対応ですので、それは大した問題にはならなさそうです。

次に、「[18.27 IKEv1 鍵交換タイプの設定](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/ipsec/ipsec_ike_backward_compatibility.html)」、つまり、**ipsec ike backward-compatibility** gateway_id type ですけど、これ、[「VPN再接続」機能](https://cloud-news.sakura.ad.jp/2021/08/05/vpc-router-restart-vpn/)を許容すれば、いずれの設定でも繋がりはするようです。そういう意味では、この 2 つの仕様差にそれ程の差はないのかもしれませんが、この type を **2** にすることで、DPD で通信断が検出され問題なく再接続できるようになりました。

都合、RTX1220(たぶん、RTX1210でも同様)の tunnel 設定の基本的なところは、

```
tunnel select 2
 tunnel encapsulation ipsec
 ipsec tunnel 102
  ipsec sa policy 102 2 esp aes-cbc sha-hmac
  ipsec ike always-on 2 on
  ipsec ike duration ipsec-sa 2 1800
  ipsec ike duration ike-sa 2 28800
  ipsec ike encryption 2 aes-cbc
  ipsec ike group 2 modp1024
  ipsec ike hash 2 sha
  ipsec ike keepalive log 2 off
  ipsec ike keepalive use 2 on dpd 15 2
  ipsec ike local address 2 192.168.1.1
  ipsec ike local id 2 192.168.1.0/24
  ipsec ike backward-compatibility 2 2
  ipsec ike pfs 2 on
  ipsec ike pre-shared-key 2 *****************************
  ipsec ike remote address 2 192.0.2.1
  ipsec ike remote id 2 192.168.2.0/24
  ipsec auto refresh 2 off
 ip tunnel mtu 1280
 ip tunnel tcp mss limit auto
 tunnel enable 2
```

のような感じで行くのが問題が少ないように思います。実際のところ、[これ](https://knowledge.sakura.ad.jp/7051/)とかは 2016 年のものですし、[ポリシーベースのIKEを使用する設定がデフォルトの挙動](https://cloud-news.sakura.ad.jp/2020/03/26/vpc-router-v2-spec-renew/)となる以前のものですので、今は仕様が合わないのかもしれません。

取り敢えず、結果オーライなので、また、時間のあるときに詳細なログとって調べてみようかと。