Catoクラウドにお客様拠点を接続する際、通常は専用機器であるCato Socketのご利用をおすすめしておりますが、別の方法として、お手持ちの物理ルータやファイアウォール機器からIPsecで接続することも可能です。
IPsecでの接続は、Socketに比べると機能が劣るのですが、既存の機器で接続できることから一時的な利用には有用です。IPsec接続時の機能制限については、以下の記事の「Socket/vSocketとIPsecの比較」にて紹介しておりますのでご参照ください。
今回、テストとしてYAMAHAルータでのIPsec接続を行いましたので、設定内容や注意点をご紹介します。
接続前の事前確認
設定を行う前に、以下の情報を確認しておきます。
機器で使えるIPsecのパラメータを確認する
Catoに限らず、異なる機器間でのIPsecの接続は難しいです。その理由は、IPsecでは暗号化方式をはじめ多数の設定項目があり、パラメータが両機器で完全に一致していないと接続に失敗するためです。機器によって項目の名前や実装が微妙に違ったりすることも原因のひとつです。
このため、CatoのIPsec接続時にも、まずは利用する機器の仕様を把握しておく必要があります。
CatoはIPsec IKEv1/v2の両方に対応しており、今回は一般的なv2の接続仕様をご紹介します。ご利用の機器がこれらのパラメータに対応しているかどうかと、各項目の設定コマンドを事前にご確認ください。
設定項目 | Catoの対応パラメータ |
認証方式 | 事前共有鍵 (Pre-shared key, PSK) のみ |
暗号アルゴリズム (Encryption Algorithm) | AES-CBC 128 / AES-CBC 256 / AES 128 GCM-16 / AES 256 GCM-16 ※AES-CBC 128および256は100Mbps未満の接続にのみ対応します。100M以上の場合はAES 128 GCM-16 または AES 256 GCM-16を使用してください。 |
ハッシュアルゴリズム (PRF Algorithm, Integrity Algorithm) | SHA1 / SHA2 256 / SHA2 384 / SHA2 512 |
DHグループ (Diffie-Hellman Group) | 2(1024bit) / 5(1536bit) / 14(2048bit) / 15(3072bit) / 16(4096bit) / 21(521bit ECP) |
認証ID (Authentication Identifier) | 原則IPv4。他にFQDN, Email, KEY_ID にも対応。 |
IKE SA(Phase1)のライフタイム | 19,800 秒 |
Child SA(Phase2)のライフタイム | 3,600 秒 |
※2024年1月現在の仕様です。最新の情報はCato Knowledge Baseをご確認ください。
※ライフタイムは2024年1月現在は変更不可ですが、近日中にCMAから値の指定ができるようになる予定です。
IPsecの冗長化構成を考える
IPsec接続では、特定のPoPに対して接続するため、そのPoPで障害が発生すると接続不可となってしまいます。このため、ロケーションの異なるPoPにSecondaryのIPsecを張っておくことが推奨となっています。
今回は以下の構成でテストしました。PPPoE接続の回線1本を使い、東京とロンドンにIPsecを張ります。
それでは、実際に設定を行っていきます。
まずはPoP IPアドレスの取得
IPsecの接続先はCatoのPoPとなりますが、このPoPにて接続用の固定IPアドレスを取得する必要があります。PrimaryのPoPとSecondaryのPoPでそれぞれ取得します。
IPアドレスの取得は、CMA(Cato管理画面)の Network > IP Allocation から行います。標準で3つまで取得可能で、4つめ以降は別途費用となります。
Siteの作成
続いて、IPsec用のSiteを作成します。Network > Site の「New」から作成します。
IPsec Siteの場合は、Connection Typeの選択で、「IPsec IKEv1」または「IPsec IKEv2」を選択します。どちらを利用するかはご利用の機器によりますが、今回利用するYAMAHA RTXシリーズはv1/v2両方対応のため、一般的なIKEv2とします。
Siteを作成すると、以下のように「IPsec」という設定項目がありますので、ここでIPsecの設定を行っていきます。
General
上記スクリーンショット、Generalのセクションでは、接続の基本設定を行います。
Connection Modeは、Cato側からIPsecを張りに行くかどうかの設定で、通常は高速に接続するために「Bidirectional」とします。「Responder Only」にした場合には、Catoは接続を受け付けるのみで、自分からは接続に行きません。
また、Authentication Identifierは、接続相手をどの情報で識別するかの設定です。通常はIPv4です。Connection ModeをResponder Onlyにした場合には、他の選択肢も選べます。
Primary / Secondary
続いて、IPアドレス等の設定です。Primary/Secondaryともに設定項目は同じです。
Public IPの Cato IPに、PoPのアドレスをプルダウン選択します。今回はTokyoとLondonです。
Site IPは、拠点側のグローバルIPアドレスです。今回は回線が1本なので、Primary/Secondaryとも同じアドレスになります。
Private IPsは、BGPによるDynamic Routingを行う場合にPeer IPとして使用します。今回は使用しませんので空欄です。
Last-mile Bandwidthは、Siteの契約帯域を指定します。
最後に、Primary PSK, Secondary PSKを設定します。IPsec接続のパスワードとなるものです。8~64文字で、アルファベットの大文字小文字を区別します。機器によっては記号に対応していないことがあるため、アルファベットと数字での指定が無難です。
Init Message Parameters / Auth Message Parameters
暗号アルゴリズム等の設定です。
もっとも厄介な箇所ですが、まずはすべてAuto設定とすることが推奨となっています。ルータ側で方式を固定し、Cato側はAutoとすることで、設定をルータ側に合わせる意図です。Autoでうまく行かない場合には、エラーメッセージを見ながら調整していきます。エラーについては後述します。
なお、Init MessageのDiffie-Hellman Groupだけは、AutoやNoneが設定できないため、利用する機器が対応している方式を選択し、設定します。
Routing
最後がRoutingのセクションです。
Initiate connection by Cato は、Cato側から接続を開始するかどうかです。通常はONが推奨です。
Network Ranges は、利用機器側の設定がポリシーベースのIPsecで、SAにNetwork Rangeが定義されている場合に、そのレンジを指定します。空欄の場合には、暗黙的にルートベースとして認識されます。
今回は空欄としています。
以上で、Cato側の設定は一旦完了です。
YAMAHAルータの設定
今回は以下の機器で動作を確認しています。先日EoLとなった機器ですが、Configは他のRTXシリーズもほぼ同じです。
ハードウェア | YAMAHA RTX810 |
ファームウェア | Rev.11.01.34 |
古い機器のため、以下の古めなパラメータを使用しました。最近の機種はより多くのアルゴリズムに対応していますので、Catoの対応範囲内でできるだけセキュリティの高い(数値の大きい)ものを選んでください。
設定項目 | パラメータ |
暗号アルゴリズム (Encryption Algorithm) | AES-CBC 256 |
ハッシュアルゴリズム (PRF Algorithm, Integrity Algorithm) | SHA2 256 |
DHグループ (Diffie-Hellman Group) | 2(1024bit) |
IPsecサンプルConfig
PPPoE等の設定を行い、Internetへ通信できることを確認の上、IPsec関連の設定を入れていきます。
tunnel select 1 tunnel name <ルータ上での表示名> ipsec tunnel 1 ipsec ike version 1 2 # IKEv2を利用すると明示的に指定する設定 ipsec ike group 1 modp1024 # DHグループ ipsec ike encryption 1 aes256-cbc # Phase1の暗号アルゴリズム ipsec ike hash 1 sha256 # Phase1のハッシュアルゴリズム ipsec sa policy 1 1 esp aes256-cbc sha256-hmac # Phase2の暗号・ハッシュアルゴリズム ipsec ike duration ike-sa 1 19800 # Phase1のライフタイム ipsec ike duration child-sa 1 3600 # Phase2のライフタイム ipsec ike keepalive use 1 on # Keepaliveを行う設定 ipsec ike keepalive log 1 off # Keepaliveのログを表示しない設定(大量に出るため) ipsec ike local address 1 <ルータのGlobal IPアドレス> ipsec ike local name 1 <ルータのGlobal IPアドレス> ipv4-addr ipsec ike remote address 1 <CatoPoPの固定グローバルIPアドレス> ipsec ike remote name 1 <CatoPoPの固定グローバルIPアドレス> ipv4-addr ipsec ike pre-shared-key 1 text <Pre-Shaerd Key文字列> ipsec ike proposal-limitation 1 on # 指定したアルゴリズム以外ではネゴシエーションしない設定 ip tunnel tcp mss limit auto tunnel enable 1 ipsec auto refresh on
上記でPrimary分の設定です。同様にtunnel2としてSecondaryの設定も投入します。
設定を忘れやすいのは「ipsec ike proposal-limitation <tunnel番号> on」です。YAMAHAルータの仕様として、デフォルトではIPsecの設定不一致を解消するために、宣言したアルゴリズム以外も含め使えるアルゴリズムすべてを相手に提案します。その結果、Cato側が「想定と違うアルゴリズムが来た」とエラーを返してしまい、SAが確立しません。このコマンドをonに明示することで問題が解消します。
また、WANインターフェイス(今回はPPPoE接続を行うPPインターフェイスです)にて以下のフィルタを設定してください。IPsecの通信にて利用するプロトコル(ESP, UDP/500)の許可です。
ip filter <フィルタ番号> pass <CatoPoPの固定グローバルIPアドレス> <ルータのGlobal IPアドレス> esp * * ip filter <フィルタ番号> pass <CatoPoPの固定グローバルIPアドレス> <ルータのGlobal IPアドレス> udp * 500
ルーティングの設定にも注意点があります。
まず、以下のIPアドレスは必ずtunnelに向ける(Cato網へルーティングさせる)必要があります。
- Catoの設備IPアドレス 10.254.254.1 / .5 / .253
- Cato網内の他拠点のIPアドレスレンジ、モバイルユーザのIPアドレスレンジ
拠点のルーティング要件にもよりますが、通常は拠点内のすべての通信についてCato網を通すのが推奨ですので、以下のようなルーティングになるかと思います。PrimaryのPoPに障害が発生した場合に備え、tunnel1がdownしてもtunnel2で通信継続できるように設定しておきましょう。
ip route default gateway tunnel 1 hide gateway tunnel 2 weight 0 # 基本的にすべての通信はtunnel1に向け、tunnel1のdown時はtunnel2を使う ip route <PrimaryのCatoPoPの固定グローバルIPアドレス> gateway pp 1 # CatoPoPとのIPsec確立にはpp1(PPPoEインターフェイス)を使う ip route <SecondaryのCatoPoPの固定グローバルIPアドレス> gateway pp 1
以上を設定したら、YAMAHAルータをInternetに接続し、接続できるかを確認します。
接続確認
IPsecが正常に張れているかどうかは、以下の方法で確認します。
YAMAHAルータでの状態確認
# show status tunnel <トンネル番号>
「トンネルインターフェースは接続されています」と出ていれば、正常にUPしています。
# show status tunnel 1 TUNNEL[1]: 説明: インタフェースの種類: IPsec トンネルインタフェースは接続されています 開始: 2024/01/29 18:38:23 通信時間: 21分6秒 受信: (IPv4) 105 パケット [9660 オクテット] (IPv6) 0 パケット [0 オクテット] 送信: (IPv4) 134 パケット [10872 オクテット] (IPv6) 0 パケット [0 オクテット] IKEキープアライブ: [タイプ]: rfc4306 [状態]: OK [次の送信]: 5 秒後
異常な場合には、「トンネルインタフェースは一度も接続されていません」と出たり、何も表示されなかったりします。
CMAでの状態確認
MonitoringのTopologyにて、Site StatusがConnectedとなっていることを確認します。
また、IPSEC DETAILS にて、PrimaryとSecondaryそれぞれの接続状況も確認できます。
接続できていない場合は、拠点が赤い表示となり、Site StatusはDisconnectedとなります。
また、IPsecの設定画面にて「Connection Status」ボタンを押すと、数秒した後、現在の接続情報が表示されます。待っても何も表示されない場合は、接続できていません。
正常に接続できたら、ルータのLAN側の端末から、他Siteやインターネットへの通信をご確認ください。
繋がらない場合のトラブルシュート
続いて、IPsecが繋がらないときの切り分け方法をご紹介します。
切り分けは時間がかかり、心が折れることもありますが、単純に鍵交換に一時的に失敗しているだけということも多いので、まずはトンネルのリセットをおすすめします。
トンネルのリセット
YAMAHAルータ側からのトンネルリセット
# ipsec sa delete all
コマンド入力後何も出ませんが、すぐにSAが作り直しされます。allではなく特定のSAのみ作り直したいときは、show ipsec sa で SA番号を特定し、allの代わりに番号を指定します。
Cato側からのトンネルリセット
Primary/Secondaryそれぞれ、IPsecの設定画面にある「Reset Tunnel」ボタンからResetが可能です。
リセットし、数分待っても接続されない場合、一時的な問題ではないと考えられるため、トラブルシュートに進みます。
Cato側ログの確認
まずはCato側のログを確認してみます。接続できない方のtunnelで「Timeline」をクリックすると、Cato側のログがcsv形式でダウンロードされます。
もしここで「File not found」とエラーが出てファイルがダウンロードされない場合、ログが存在しません。接続が全く到達していないということになりますので、以下の点を確認します。
- ルータがInternetに接続できているか
- ルータのipsec ike remote address で指定したCato PoPのグローバルアドレスが間違っていないか
- ルータのフィルタで、PoPとのesp, udp500の通信が破棄されていないか
- ルータからCato PoPのグローバルIPアドレスに対してPingが通るか
- CMAに設定した、ルータのグローバルIPアドレスが間違っていないか
ログがダウンロードできた場合は、直近のエラー内容を確認します。基本的にはルータとCatoのパラメータ不一致が原因となるため、何が不一致なのかを調べ、修正していく作業となります。
一例として、当社の検証にて確認したCato側のエラーメッセージをご紹介します。
認証情報の不一致
Auth payload doesn't match the calculated one - wrong psk? Auth payload doesn't match dropping this sa
認証情報が一致しないというエラーです。PSKやnameの設定が双方で異なっている場合に発生しますので、以下を確認します。
- PSK(パスワード)がCatoとルータとで一致しているか、再設定してみて改善するか
- ルータ側のipsec ike local name, ipsec ike remote name に相手と自分のグローバルIPアドレスが正しく設定されているか、コマンド末尾の「ipv4-addr」が抜けていないか
DHグループの不一致
DH group number in the KE property doesn't match the selected proposal [selected: 14, in KE payload: 5]
ルータが最初に宣言したDHグループと、実際に通信してきたDHグループが違うというエラーです。
DH group GROUP_5_MODP1536 (5) in our proposal does not match DH group GROUP_14_MODP2048 (14) in peer's proposal 1
Catoが提案したDHグループと、ルータが提案してきたDHグループが違うというエラーです。
いずれの場合も以下を確認します。
- Cato側とルータ側のDHグループ設定(ipsec ike group)が一致しているか
- YAMAHAルータに ipsec ike proposal-limitation <tunnel番号> on が設定されているか
※この設定が抜けていると、指定していないDHグループで通信してしまいます
その他各種アルゴリズムの不一致
Encryption algorithm length AES_256 (256) in our proposal does not match encryption algorithm length AES_128 (128) in peer's proposal 1
PRF algorithm HMAC_SHA2_256 (5) in our proposal does not match PRF algorithm HMAC_SHA1 (2) in peer's proposal 1
Integrity algorithm HMAC_SHA2_256_128 (12) in our proposal does not match integrity algorithm HMAC_SHA1_96 (2) in peer's proposal 1
Catoが提案した各種通信方式と、ルータが提案してきたアルゴリズムが違うというエラーです。いずれの場合も、以下を確認します。
- YAMAHAルータに ipsec ike proposal-limitation <tunnel番号> on が設定されているか
※この設定が抜けていると、指定していないアルゴリズムで通信してしまいます - エラーが出ている設定項目について、Catoのアルゴリズム設定をAutoにして改善するか
- エラーが出ている設定項目について、Catoのアルゴリズム設定をルータと同じ値で固定指定にして改善するか
- エラーが出ている設定項目について、Cato・ルータ双方のアルゴリズム方式を他の方式に変えて改善するか
すべて確認してもエラーが解消されない場合、Cato PoP側の問題であるかどうかの切り分けとして、他のロケーションのCato PoPのIPアドレスを取得し、そちらとtunnelが張れるかご確認ください。
(ご参考)YAMAHAルータ側確認方法
問題切り分けの際は、Cato側のログとあわせて、YAMAHAルータ側でも状況をご確認ください。
確認コマンドの例
show ipsec sa
SAが確立できているかどうかを確認できます。以下はtunnelを2本張った場合の正常例です。1つのtunnelに対し、phase1で1つ、phase2で2つのSAが確立されます。
このコマンドを見ることで、phase1の確立で失敗しているのか、またはphase2で失敗しているのかの切り分けができます。
# show ipsec sa Total: isakmp:2 send:2 recv:2 sa sgw isakmp connection dir life[s] remote-id ----------------------------------------------------------------------------- 1 1 - ike - 17106 <東京PoPのグローバルIPアドレス> 2 2 - ike - 18598 <ロンドンPoPのグローバルIPアドレス> 3 2 2 tun[002]esp send 2398 <ロンドンPoPのグローバルIPアドレス> 4 2 2 tun[002]esp recv 2398 <ロンドンPoPのグローバルIPアドレス> 5 1 1 tun[001]esp send 906 <東京PoPのグローバルIPアドレス> 6 1 1 tun[001]esp recv 906 <東京PoPのグローバルIPアドレス>
show ipsec sa gateway <tunnel番号> detail
さらにSAの詳細情報を見るコマンドです。以下は正常例です。
正常に表示されていない箇所や、意図しない設定になっている箇所がないか確認します。
# show ipsec sa gateway 1 detail SA[1] 状態: 確立済 寿命: 15014秒 プロトコル: IKEv2 ローカルホスト: <ルータのグローバルIPアドレス>:<ポート> リモートホスト: <東京PoPのグローバルIPアドレス>:<ポート> 暗号アルゴリズム: AES256_CBC PRF : HMAC_SHA2_256 認証アルゴリズム: HMAC_SHA2_256_128 DHグループ: MODP_1024 SPI: <SPI文字列> 鍵 : <鍵文字列> ---------------------------------------------------- SA[5] 状態: 確立済 寿命: 1522秒 送受信方向: 送信 プロトコル: ESP (モード: tunnel) ローカルID: <ルータのグローバルIPアドレス> (IPv4_ADDR) リモートID: <東京PoPのグローバルIPアドレス> (IPv4_ADDR) 暗号アルゴリズム: AES256_CBC 認証アルゴリズム: HMAC_SHA2_256_128 ESN: DISABLE 始点トラフィック セレクタ (タイプ / プロトコル / ポート / アドレス) IPv4-range / any / 0-65535 / 0.0.0.0-255.255.255.255 終点トラフィック セレクタ (タイプ / プロトコル / ポート / アドレス) IPv4-range / any / 0-65535 / 0.0.0.0-255.255.255.255 SPI: <SPI文字列> 鍵 : <鍵文字列> ---------------------------------------------------- SA[6] 状態: 確立済 寿命: 1522秒 送受信方向: 受信 プロトコル: ESP (モード: tunnel) ローカルID: <ルータのグローバルIPアドレス> (IPv4_ADDR) リモートID: <東京PoPのグローバルIPアドレス> (IPv4_ADDR) 暗号アルゴリズム: AES256_CBC 認証アルゴリズム: HMAC_SHA2_256_128 ESN: DISABLE SPI: <SPI文字列> 鍵 : <鍵文字列> ----------------------------------------------------
show log
通常のログにもSA確立成功・失敗等のログが出ますので、エラー内容や、どこで失敗しているのかを確認します。
なお、以下の設定をしておくことで、より詳細なログ・デバッグ情報が表示されるようになります。
ipsec ike log 1 key-info message-info payload-info syslog debug on
※ログが大量になるため、正常に接続できた後はOFFが推奨です
まとめ
以上、長くなりましたが、YAMAHAルータでのIPsec接続のご紹介でした。
検証時、パラメータを正しく一致させているつもりなのに不一致のエラーで繋がらず、かなり悩まされましたが、ほとんどがYAMAHA側の設定の不足や相違が原因でした。今回ご紹介したサンプルConfigは正常に接続できた後のものですので、どなたかの参考になりましたら幸いです。
感想として、PoPとの接続やルーティング、障害切り替わりをすべて自動で行ってくれる Cato Socketの楽さが身にしみました…。
何らかの事情でSocketが利用できずIPsec接続を行われる際には、なかなか苦労しますので、準備・検証に十分な時間を取ることをおすすめします。