Yamaha RTXで両拠点がグローバルIPを保有する場合のIPSec設定を紹介します。
もし、ネットワークに対する苦手意識の強い方は「IPsec設定 両拠点 固定IPアドレスGUI編」を参照ください。ただし、GUIによって生成されるconfigは不要設定が多いため、よっぽど苦手意識が強い場合を除きCLIによる設定をオススメします。
設定まとめ
トンネル操作
tunnelコマンドを使用するとトンネルに対する設定ができます。以下のようにtunnel select 1と入力するとtunnel1に対する設定モードに移行します。RTX810では、トンネルは1から6までの計6つを定義する事ができます。
同価格帯のNEC IXシリーズに比べると確立できるトンネルの数は少なめです。HUB拠点として使用する場合は、トンネル上限に抵触しないか購入前に注意しましょう。
# tunnel select 1 tunnel1#
トンネルに対する設定を終える場合は、tunnel select noneと入力します。
tunnel1# tunnel select none #
定義したトンネルを有効にするか否かを指定できます。
# tunnel enable <トンネル番号> # tunnel enable all
IKE関連
対向機器と接続するための最小限のIKEの設定はIPアドレスや事前共有鍵などです。ハッシュや暗号化アルゴリズムは、デフォルト設定を使用してYamaha RTX同士を接続するならば、設定を省略して差し支えございません。
tunnel select <トンネル番号> ipsec ike local address <ゲートウェイ番号> <自身のIPアドレス> ipsec ike remote address <ゲートウェイ番号> <対向のIPアドレス> ipsec ike pre-shared-key <ゲートウェイ番号> text <事前共有鍵>
ハッシュや暗号化アルゴリズムを明示的に指定するならば、以下のようなコマンドを使用します。設定省略時はsha256, 3des-cbc, modp1024になります。
tunnel select <トンネル番号> ipsec ike hash <ゲートウェイ番号> {md5|sha|sha256} ipsec ike encryption <ゲートウェイ番号> {des-cbc|3des-cbc|aes-cbc|aes256-cbc} ipsec ike group <ゲートウェイ番号> {modp768|modp1024|modp1536|modp2048}
IPSec関連
IPsecに関するパラメタ定義は以下の通りです。暗号化とハッシュを定義したポリシーIDを定義します。その後、「ipsec tunnel <ポリシーID>」コマンドで、「ポリシーID」と「トンネル番号」を紐づけます。
ipsec sa policy <ポリシーID> <ゲートウェイ番号> esp <暗号化アルゴリズム> <ハッシュアルゴリズム> tunnel select <トンネル番号> ipsec tunnel <ポリシーID>
IKE keepalive
以下のコマンドでIKEによるkeepaliveを実行できる。必須の設定ではないものの、障害を素早く検出できるため実運用では投入するのが望ましい。また、障害検出時はログだけでなく、LEDランプでも異常を目視する事ができる。
ipsec ike keepalive use <ゲートウェイ番号> on heartbeat <interval> <count>
設定反映
IPsecを有効にし、設定を定期的に反映させるには、以下のコマンドを使用します。
ipsec use on ipsec auto refresh on
動作確認
動作確認の構成
以下の環境で動作確認を行います。
+------------------+ | 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 +-------+----------+ | VyOS 1.4 | | Internet | +-------+----------+ eth1 | .1 | | 200.0.20.0/24 | lan2 | .20 +-------+----------+ | Yamaha RTX 810 | | R20 | +-------+----------+ lan1 | .1 | | 192.168.20.0/24 | ens224 | .20 +-------+----------+ | RockyLinux 8.4 | | host020 | +------------------+
初期設定
初期設定はIPアドレスとデフォルトゲートウェイとNATのみです。
動作確認 (1) IPsec確立
R10とR20の間で、IPsecトンネルを確立します。R10とR20で、IKEおよびIPsecのハッシュと暗号化アルゴリズムなどが一致するように設定してください。
[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 remote address 1 200.0.20.20 tunnel enable 1 tunnel select none ipsec use on ipsec auto refresh on
[R20:RTX810] tunnel select 1 ipsec tunnel 1 ipsec sa policy 1 1 esp 3des-cbc md5-hmac ipsec ike local address 1 200.0.20.20 ipsec ike pre-shared-key 1 text P@ssw0rd ipsec ike remote address 1 200.0.10.10 tunnel enable 1 tunnel select none ipsec use on ipsec auto refresh on
IPsecトンネルの確立に成功しているならば、show ipsec saコマンドを実行すると、以下のような何らかの出力が得られます。もし、何も出力されないならば、IPsecトンネルが確立されていない事を表します。
[R10:RTX810] # show ipsec sa Total: isakmp:2 send:2 recv:2 sa sgw isakmp connection dir life[s] remote-id ----------------------------------------------------------------------------- 1 1 - isakmp - 24974 200.0.20.20 2 1 - isakmp - 24974 200.0.20.20 3 1 1 tun[001]esp send 24975 200.0.20.20 4 1 1 tun[001]esp recv 24975 200.0.20.20 5 1 1 tun[001]esp send 24976 200.0.20.20 6 1 1 tun[001]esp recv 24976 200.0.20.20 # # # # show ipsec sa gateway 1 detail SA[1] 寿命: 24960秒 自分側の識別子: 200.0.10.10 相手側の識別子: 200.0.20.20 プロトコル: IKE アルゴリズム: 3DES-CBC, SHA-1, MODP 1024bit SPI: 7b 4e 7c 7a 36 50 15 e1 af 7a 45 2c 53 c5 2e 7c 鍵 : ** ** ** ** ** (confidential) ** ** ** ** ** ---------------------------------------------------- SA[2] 寿命: 24960秒 <omitted> #
動作確認 (2) static routeによる疎通
IPsecを設定しただけれは疎通可能になりません。疎通可能になるようにルーティングを設定します。static routeの設定例は以下の通りです。
[R10:RTX810] ip route 192.168.20.0/24 gateway tunnel 1
[R20:RTX810] ip route 192.168.10.0/24 gateway tunnel 1
host010とhost020間で疎通可能である事を確認します。
[host010:RockyLinux8.4] [root@host010 ‾]# ping -c 3 192.168.20.20 PING 192.168.20.20 (192.168.20.20) 56(84) bytes of data. 64 bytes from 192.168.20.20: icmp_seq=1 ttl=62 time=1.37 ms 64 bytes from 192.168.20.20: icmp_seq=2 ttl=62 time=1.53 ms 64 bytes from 192.168.20.20: icmp_seq=3 ttl=62 time=1.53 ms --- 192.168.20.20 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 1.373/1.477/1.531/0.073 ms [root@host010 ‾]#
次の検証シナリオの都合上、static routeを削除します。
[R10:RTX810] no ip route 192.168.20.0/24 gateway tunnel 1
[R20:RTX810] no ip route 192.168.10.0/24 gateway tunnel 1
動作確認 (3) OSPFによる疎通
管理するprefixが多い場合はstatic routeによる運用は人的リソース制約の観点で困難な事もあるでしょう。そこで、OSPFを使ったダイナミックルーティングの設定例を紹介します。
OSPFの設定例は以下の通りです。設定反映には、ospf configure refreshコマンドが必要である事に注意しましょう。
[R10:RTX810] ip lan1 ospf area backbone passive tunnel select 1 ip tunnel ospf area backbone tunnel select none ospf use on ospf area backbone ospf configure refresh
[R20:RTX810] ip lan1 ospf area backbone passive tunnel select 1 ip tunnel ospf area backbone tunnel select none ospf use on ospf area backbone ospf configure refresh
OSPF interfaceを確認します。特段の設定なしに、tunnel interfaceはPOINT-TO-POINTとして扱われるようです。Yamaha RTXの場合はinterface typeの明示指定は必要ないですが、この辺りは機器やバージョンによってデフォルトの挙動が異なりますので注意深く観察しましょう。
[R10:RTX810] # show status ospf interface LAN1: Area backbone Router ID: 192.168.10.1, Interface address: 192.168.10.1/24 Interface type: BROADCAST cost=1 Interface state: DR priority=1 Designated router ID: 192.168.10.1, IP address: 192.168.10.1 TUNNEL[1]: Area backbone Router ID: 192.168.10.1, Interface address: unnumbered Interface type: POINT-TO-POINT cost=1562 Interface state: POINT_TO_POINT
OSPFによって経路を交換できている事を確認します。
[R10:RTX810] # show ip route 宛先ネットワーク ゲートウェイ インタフェース 種別 付加情報 default 200.0.10.1 LAN2 static 172.31.0.2/32 - TUNNEL[1] static 192.168.10.0/24 192.168.10.1 LAN1 implicit 192.168.20.0/24 192.168.20.1 TUNNEL[1] OSPF cost=1563 200.0.10.0/24 200.0.10.10 LAN2 implicit
host010とhost020間で疎通可能である事を確認します。
[host010:RockyLinux8.4] [root@host010 ‾]# ping -c 3 192.168.20.20 PING 192.168.20.20 (192.168.20.20) 56(84) bytes of data. 64 bytes from 192.168.20.20: icmp_seq=1 ttl=62 time=1.77 ms 64 bytes from 192.168.20.20: icmp_seq=2 ttl=62 time=1.34 ms 64 bytes from 192.168.20.20: icmp_seq=3 ttl=62 time=1.26 ms --- 192.168.20.20 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 1.263/1.455/1.765/0.223 ms [root@host010 ‾]#
補足説明
デバッグ手法
正常にIPsecが確立されている場合は、isakmpおよびtun[00X]espというコネクションが見られます。
[R10:RTX810] # show ipsec sa Total: isakmp:2 send:2 recv:2 sa sgw isakmp connection dir life[s] remote-id ----------------------------------------------------------------------------- 1 1 - isakmp - 24974 200.0.20.20 2 1 - isakmp - 24974 200.0.20.20 3 1 1 tun[001]esp send 24975 200.0.20.20 4 1 1 tun[001]esp recv 24975 200.0.20.20 5 1 1 tun[001]esp send 24976 200.0.20.20 6 1 1 tun[001]esp recv 24976 200.0.20.20 #
以下のように何も出力されない場合は、isakmpすら試みてない事を表します。IKEによる鍵交換をしようとしていない状態です。
# show ipsec sa #
以下のようにisakmpのコネクションが1つのみ見られるのは、鍵交換を試みたものの失敗している事を表します。なお、IKEに成功してIPsecのプロポーザルが不一致なのか、それ以前にIKEで失敗しているのかは、このshowコマンドからは判断できません。
tunnel1# show ipsec sa Total: isakmp:1 send:0 recv:0 sa sgw isakmp connection dir life[s] remote-id ----------------------------------------------------------------------------- 1 1 - isakmp - 28793 200.0.20.20 tunnel1#
より詳細な情報を得るには、syslogをdebugにしてそのログを参照する必要があります。以下のコマンドでsyslogへのdebug出力を有効にします。
syslog debug on
show logでデバッグ情報の閲覧が可能です。以下のような出力ならば、IPsecのプロポーザル不一致である事が分かります。
# show log 2021/11/06 19:23:42: [IKE] respond IPsec phase to 200.0.20.20 2021/11/06 19:23:42: [IKE] add IPsec context [151] 5481624db9bedf45 f355c049 2021/11/06 19:23:42: [IKE] no proposal chosen [] 2021/11/06 19:23:42: [IKE] initiate info exchange (notification) 2021/11/06 19:23:43: [IKE] [144] retransmit to 200.0.20.20 (count = 8) 2021/11/06 19:23:43: [IKE] inactivate context [151] 5481624db9bedf45 f355c049 <omitted> 2021/11/06 19:24:02: [IKE] initiate info exchange (notification) 2021/11/06 19:24:03: [IKE] [144] retransmit to 200.0.20.20 (count = 6) 2021/11/06 19:24:03: [IKE] inactivate context [157] 5481624db9bedf45 f355c049 2021/11/06 19:24:03: [IKE] delete IPsec context [157] 5481624db9bedf45 f355c049 2021/11/06 19:24:03: [IKE] SPI 5481624db9bedf45193b9a8bd4de8f4b 2021/11/06 19:24:03: [IKE] no proposal chosen : no message 2021/11/06 19:24:15: [IKE] respond IPsec phase to 200.0.20.20 2021/11/06 19:24:15: [IKE] add IPsec context [160] 5481624db9bedf45 f355c049 2021/11/06 19:24:15: [IKE] no proposal chosen [] 2021/11/06 19:24:15: [IKE] initiate info exchange (notification)
masquerade設定
公式資料「IPsecを使用したVPN拠点間接続(2拠点) : コマンド設定」によると、ESP, udp500, udp4500に対してstaticなNAT masqueradeの設定が必要と書かれています。具体的には以下のような設定です。
nat descriptor type 1000 masquerade nat descriptor masquerade static 1000 1 192.168.1.1 udp 500 nat descriptor masquerade static 1000 2 192.168.1.1 esp nat descriptor masquerade static 1000 3 192.168.1.1 udp 4500
ルータによっては自身へのパケットをmasqueradeしないと受信できない事もあります(例:NEC IX)。RTX810 Rev.11.01.34ではmasqueradeせずにIPsecを確立できましたので、公式ドキュメントは旧バージョン仕様に基づく情報かもしれません。
フィルタ設定
公式資料「IPsecを使用したVPN拠点間接続(2拠点) : コマンド設定」によると、ESP, udp500, udp4500のフィルタ解除設定が必要との記載があります。具体的には以下のような設定です。
ip filter 200100 pass * 192.168.1.1 udp * 500 ip filter 200101 pass * 192.168.1.1 esp * * ip filter 200102 pass * 192.168.1.1 udp * 4500
確かにIPsecはESP, udp500, udp4500の許可が必要ですが、RTX810 Rev.11.01.34は自身へのパケットはfilterの対象外になるため、明示的な許可設定は必要ないと思われます。もしかしたら、公式ドキュメントは旧バージョン仕様に基づく情報かもしれません。