Yamaha RTXで片拠点がプライベートアドレスを持つ場合のIPSec設定を紹介します。IPsecの通信経路上にNAT機器が存在する場合は、udp500, udp4500を用いてNAT変換前のIPアドレスを通知する「NATトラバーサル」と呼ばれる機能を有効にする必要があります。
設定まとめ
「IPsec設定 両拠点固定IPアドレスCLI編」で紹介されたコマンドは説明を割愛します。
NATトラバーサル
このシナリオのようなNAT機器を介す場合は、NATトラバーサルと呼ばれる機能を用いて、NAT変換前のIPアドレスを通知する仕組みが必要です。機器によってはデフォルトで有効になっている事もありますが、Yamaha RTXの場合は明示的な指定が必要です。
NATトラバーサルを有効にするにはtunnelに対して以下のようなコマンドを使用します。
# tunnel select <トンネル番号> tunnel1# ipsec ike nat-traversal <ゲートウェイ番号> on
initiatorとresponder
この検証シナリオでは片側がプライベートアドレスを持つため、プライベートアドレスを持つ拠点からIPsecを確立をする必要があります。このようなシナリオでは、どの拠点からの接続を確立するかのinitiator, responderと呼ばれる設定が必要になる事もあります。
Yamaha RTXの場合は、initiator, responderを明示指定することはできないので設定不要です。言い換えれば、片方の拠点は接続を試みたけどエラーになり、他拠点からの接続を待つような挙動になります。
動作確認
動作確認の構成
以下の環境で動作確認を行います。R10がグローバルIPアドレスを持つ拠点で、R30がプライベートアドレスを持つ拠点です。
+------------------+ | RockyLinux 8.4 | | host010 | +-------+----------+ ens224 | .10 | | 192.168.10.0/24 | lan1 | .1 +-------+----------+ | Yamaha RTX 810 | | R10 | +-------+----------+ lan2 | .10 | | 200.0.10.0/24 | eth0 | .1 source NAT : any => 200.0.10.1 +-------+----------+ | VyOS 1.4 | | NAT20 | +-------+----------+ eth1 | .1 | | 192.168.20.0/24 | lan2 | .30 +-------+----------+ | Yamaha RTX 810 | | R30 | +-------+----------+ lan1 | .1 | | 192.168.30.0/24 | ens224 | .30 +-------+----------+ | RockyLinux 8.4 | | host030 | +------------------+
初期設定
初期設定は以下の通りです。VyOSにはSource NATが設定されています。言い換えれば、R30からR10への接続は許容されますが、逆方向は許容されません。
動作確認 (1) IPsec確立
グローバルIPアドレスを持つ拠点(R10)では、以下のような設定になります。グローバルアドレスを持つ側は対向拠点のプライベートアドレスを知る術がないので、対向拠点のNAT変換後のグローバルアドレスを「remote address」として指定します。
また、NATトラバーサルの有効化設定も必要です。
[R10:RTX810] tunnel select 1 ipsec tunnel 1 ipsec sa policy 1 1 esp 3des-cbc md5-hmac ipsec ike local address 1 200.0.10.10 ipsec ike pre-shared-key 1 text P@ssw0rd ipsec ike nat-traversal 1 on ipsec ike remote address 1 200.0.10.1 tunnel enable 1 tunnel select none ipsec use on ipsec auto refresh on
プライベートIPアドレスを持つ拠点(R30)では、以下のような設定になります。自信のIPアドレスを示す「local address」はNAT変換後のグローバルアドレスではなくプライベートアドレスを指定します。
また、NATトラバーサルの有効化設定も必要です。
[R30:RTX810] tunnel select 1 ipsec tunnel 1 ipsec sa policy 1 1 esp 3des-cbc md5-hmac ipsec ike local address 1 192.168.20.30 ipsec ike pre-shared-key 1 text P@ssw0rd ipsec ike nat-traversal 1 on ipsec ike remote address 1 200.0.10.10 tunnel enable 1 tunnel select none ipsec use on ipsec auto refresh on
IPsecトンネルが確立されている事を確認します。
「IPsec設定 両拠点固定IPアドレスCLI編」の検証シナリオではisakmpが2つ確立されていましたが、このシナリオでは1つしか確立されていません。
グローバルIPアドレスでは双方向でIKEの通信が可能ですが、プライベートIPアドレスの場合ではプライベートからグローバルへの片方向の通信しか出来ないためです。
[R10:RTX810] # show ipsec sa Total: isakmp:1 send:2 recv:2 sa sgw isakmp connection dir life[s] remote-id ----------------------------------------------------------------------------- 1 1 - isakmp - 24422 200.0.10.1 2 1 1 tun[001]esp send 24424 200.0.10.1 3 1 1 tun[001]esp recv 24424 200.0.10.1 4 1 1 tun[001]esp send 24424 200.0.10.1 5 1 1 tun[001]esp recv 24424 200.0.10.1 # # # show ipsec sa 1 detail エラー: パラメータの数が不適当です # show ipsec sa gateway 1 detail SA[1] 寿命: 24409秒 自分側の識別子: 200.0.10.10 相手側の識別子: 200.0.10.1 プロトコル: IKE アルゴリズム: 3DES-CBC, SHA-1, MODP 1024bit NATトラバーサル: あり, キープアライブ: なし SPI: 6f db 4b 12 da 90 94 4d 23 7c 46 9a 90 cc d0 4d 鍵 : ** ** ** ** ** (confidential) ** ** ** ** ** ---------------------------------------------------- SA[2] 寿命: 24411秒 <omitted>
動作確認 (2) 疎通確認
疎通確認ができるようstatic routeを定義します。
[R10:RTX810] ip route 192.168.30.0/24 gateway tunnel 1
[R30:RTX810] ip route 192.168.10.0/24 gateway tunnel 1
host010とhost030間で疎通可能である事を確認します。
[host010:RockyLinux8.4] [root@host010 ‾]# ping -c 3 192.168.30.30 PING 192.168.30.30 (192.168.30.30) 56(84) bytes of data. 64 bytes from 192.168.30.30: icmp_seq=1 ttl=62 time=1.67 ms 64 bytes from 192.168.30.30: icmp_seq=2 ttl=62 time=1.28 ms 64 bytes from 192.168.30.30: icmp_seq=3 ttl=62 time=1.25 ms --- 192.168.30.30 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 1.254/1.398/1.665/0.188 ms [root@host010 ‾]#
補足説明
IPsec SA クリア時の挙動
仕様理解のため、グローバルIPアドレスを持つ機器(R10)でIPsec SAのクリアをします。
[R10:RTX810] ipsec refresh sa
IPSecが再確立するか確認します。以下出力のようにIPsecが再確立しません。
[R10:RTX810] # show ipsec sa #
これはグローバルIPアドレスを持つ機器(R10)がIPsec Responderだからです。IPsecを確立するのはプライベートIPアドレスを持つ機器(R30)です。プライベートIPアドレスを持つ機器(R30)で、IPsecをクリアすれば再び疎通可能な状態になります。
実務観点でこの挙動で注意すべきは機器更改や移行計画です。よく見られるのが、「IPsec Responder側の機器更改なので、IPsec Initiator側は設定変更なし。IPsec Initiator側は体制不要」という誤った意思決定で、作業当日にIPsec Initiator側でIPsecクリアが出来ずリトライになるパターンを何度か見た事があります。