NEC IXルータで両拠点がグローバルIPを保有する場合のIKEv2 IPsec設定を紹介します。
設定まとめ
コマンド一覧
IKEv2 IPsecに関連するコマンド一覧は以下の通りです。
ip access-list <acl_name> permit ip src <prefix> dest <prefix> ike proposal <ike_proposal_name> encryption <encryption> hash <hash> ike policy ike-policy peer <peer_addr> key <password> <ike_proposal_name> ipsec autokey-proposal <ipsec_proposal_name> [<esp>...] [<ah>...] ipsec autokey-map <policy_map_name> <acl_name> peer <peer_addr> <ipsec_proposal_name> ipsec local-id <policy_map_name> <local_private_prefix> ipsec remote-id <policy_map_name> <remote_private_prefix> ! interface Tunnel0.0 tunnel mode ipsec ip address <addr> ip tcp adjust-mss auto ipsec policy tunnel <policy_map_name> out ! interface GigaEthernet0.0 ip napt enable ip napt static GigaEthernet0.0 50 ip napt static GigaEthernet0.0 udp 500 ip napt static GigaEthernet0.0 udp 4500
とりあえず動く最小限の設定
IKEv2はIKEv1に比べると仕様がシンプル化されています。また、NEC IXでIKEv2を使用する場合は、暗黙的な設定やデフォルト値が利用できますので、以下コマンドのみでIPsecを確立する事ができます。グローバルIPアドレス同士で通信する場合は、<remote_id>と<remote_addr>は同じ値になります。
ikev2 authentication psk id ipv4 <remote_id> key char <password> ! interface Tunnel0.0 tunnel mode ipsec-ikev2 ip address <tunnel_addr> ip tcp adjust-mss auto ikev2 connect-type auto ikev2 ipsec pre-fragment ikev2 peer <remote_addr> authentication psk id ipv4 <remote_id> no shutdown
事前共有鍵の設定
以下のコマンドで対向のID毎に事前共有鍵を定義できます。グローバルIP同士で通信する場合は、対向のIDはグローバルIPアドレスと同じ値になります。
ikev2 authentication psk id ipv4 <remote_id> key char <password>
IKEv2 saのパラメタ
NEC IX同士で接続する場合は、IKEv2 SAに関するパラメタ指定は不要です。互いにデフォルト設定を使用してIKEv2 SAを確立します。
NEC IX以外の機器と接続する場合やデフォルト以外のパラメタを使用する場合は、以下のようなコマンドで指定可能です。
ikev2 default-profile sa-proposal enc <encryption> sa-proposal integrity <hash> sa-proposal dh <gh-group>
設定例は以下の通りです。
ikev2 default-profile sa-proposal enc aes-cbc-256 sa-proposal integrity sha2-512 sa-proposal dh 2048-bit
IKEv2 child-saのパラメタ
IKEv1のISAKMPに相当する処理は、IKEv2ではchild-saと呼ばれます。NEC IX同士で接続する場合は、IKEv2 child-saに関するパラメタ指定は不要です。互いにデフォルト設定を使用してIKEv2 child-saを確立します。
NEC IX以外の機器と接続する場合やデフォルト以外のパラメタを使用する場合は、以下のようなコマンドで指定可能です。
ikev2 default-profile child-lifetime <sec> child-proposal enc <encryption> child-proposal integrity <hash>
設定例は以下の通りです。
ikev2 default-profile child-lifetime 28800 child-proposal enc aes-cbc-256 child-proposal integrity sha2-512
local-idの定義
以下のコマンドで自分自身のIDを定義する事ができます。省略した場合は自身のIPアドレスが設定されます。グローバルIPアドレスでIPsecを確立する場合は、特段の考慮は必要なく省略しても疎通可能になります。
ikev2 default-profile local-authentication id ipv4 <local-id>
トンネル設定
以下のようにTunnelインターフェースを定義するとIPsecが確立されます。
interface Tunnel0.0 tunnel mode ipsec-ikev2 ip address <tunnel_addr> ip tcp adjust-mss auto ikev2 connect-type auto ikev2 ipsec pre-fragment ikev2 peer <remote_addr> authentication psk id ipv4 <remote_id> no shutdown
Tunnelだけでは拠点間の疎通はできません。staticやBGPで適宜ルーティングを設定しましょう。以下はstatic routeを定義する構文です。
ip route <prefix> Tunnel0.0
NAT併用時の注意
「NEC IXのNAPT service(インターネットからNEC IXへの接続許可)設定」で説明した通り、NAPTが設定されている状態ではNEC IXは自身へのパケットを破棄します。この破棄される挙動はIPsecに関するパケットも同様です。
以下のようにIPsecに関するパケットの受信を許可する設定が必要です。
protocol number 50(ESP)は明示的な許可なしに受信可能です。udp 4500はNATトラバーサルが必要な環境下のみ必要な設定です。
NEC IXのバージョンによってはudp500, udp4500が暗黙的に許可され、設定投入を省略する事もできます。
interface GigaEthernet0.0 ip napt static GigaEthernet0.0 50 ip napt static GigaEthernet0.0 udp 500 ip napt static GigaEthernet0.0 udp 4500
動作確認
動作確認の構成
以下の環境で動作確認を行います。
+------------------+ | Rocky Linux 8.5 | | host010 | +-------+----------+ ens224 | .10 | | 192.168.10.0/24 | G1.0 | .1 +-------+----------+ | NEC IX 2015 | | R10 | +-------+----------+ G0.0 | .10 | | 200.0.10.0/24 | eth0 | .1 +-------+----------+ | VyOS 1.4 | | Internet | +-------+----------+ eth1 | .1 | | 200.0.20.0/24 | G0.0 | .20 +-------+----------+ | NEC IX 2015 | | R20 | +-------+----------+ G1.0 | .1 | | 192.168.20.0/24 | ens224 | .20 +-------+----------+ | Rocky Linux 8.5 | | host020 | +------------------+
初期設定
IX2015の初期設定は以下の通りとします。設定はIPアドレスとインターネットに接続するためのNATしか投入していません。
動作確認 (1) 最小限設定
IPsec設定投入
IPsecを確立するための設定を入れます。
[R10:IX2015] ikev2 authentication psk id ipv4 200.0.20.20 key char P@ssw0rd ! interface Tunnel0.0 tunnel mode ipsec-ikev2 ip address 169.254.0.10/24 ip tcp adjust-mss auto ikev2 connect-type auto ikev2 ipsec pre-fragment ikev2 peer 200.0.20.20 authentication psk id ipv4 200.0.20.20 no shutdown
[R20:IX2015] ikev2 authentication psk id ipv4 200.0.10.10 key char P@ssw0rd ! interface Tunnel0.0 tunnel mode ipsec-ikev2 ip address 169.254.0.20/24 ip tcp adjust-mss auto ikev2 connect-type auto ikev2 ipsec pre-fragment ikev2 peer 200.0.10.10 authentication psk id ipv4 200.0.10.10 no shutdown
NAT併用時の注意
NAT併用時はudp500などの接続許可が必要になる事もあります。
NEC IXのバージョンによっては暗黙的にudp500などが許可されるため、設定投入を省略できます。
[R10:IX2015] interface GigaEthernet0.0 ip napt static GigaEthernet0.0 50 ip napt static GigaEthernet0.0 udp 500
[R20:IX2015] interface GigaEthernet0.0 ip napt static GigaEthernet0.0 50 ip napt static GigaEthernet0.0 udp 500
IPsec確立確認
IPsecが確立された事を確認します。
IPsecが確立されるのは何らかの通信が開始されたタイミングですので、「NEC IXのIKEv1 IPsec設定 両拠点 固定IPアドレス」で示したIKEv1の場合は、pingなどで何らかの通信を発生させない限りIKEの確認はできません。
一方、NEC IXのIKE v2は設定投入のタイミングでパケットが生成されますので、pingコマンドなどを用いて通信を発生させずにIKEv2 SAの確認ができます。NEC IXのIKEv2は「仕様を知らない人でも何となくで動く」暗黙的な挙動が数多く設定されています。
IKEv2 saの確認結果は以下のようになります。
[R10:IX2015] R10(config)# show ikev2 sa IKEv2 SA - 1 created Interface Tunnel0.0 SPI (I)0xe085cf8e0732f92f (R)0xf1cae02858beca7d Remain lifetime[sec] : 85557 Serial : 5 Direction : responder Local Addr : 200.0.10.10:500 Peer Addr : 200.0.20.20:500 Local ID : IPV4-ADDR 200.0.10.10 Peer ID : IPV4-ADDR 200.0.20.20 Status : establish Local message ID : 2 Peer message ID : 3 <omitted>
IKEv2 child-saの確認結果は以下のようになります。
[R10:IX2015] R10(config)# show ikev2 child-sa Child SA - 1 connected Interface Tunnel0.0 IKE Peer ID : IPV4-ADDR 200.0.20.20 IKE SPI (I)0xe085cf8e0732f92f (R)0xf1cae02858beca7d IKE SA serial : 5 Child SA Protocol : ESP Local Addr : 200.0.10.10 Peer Addr : 200.0.20.20 Enc alg : AES-CBC-256 Hash alg : HMAC-SHA2-512-256 Remain lifetime[sec] : 27884 Anti-replay : on <omitted>
拠点間の疎通確認
拠点間となるhost010(192.168.10.10)とhost020(192.168.20.20)の間の疎通を確認します。拠点間で疎通可能なようにするにはIPsecの確立だけでなくルーティングの設定が必要です。
以下のように拠点間のルーティングを定義します。
[R10:IX2015] ip route 192.168.20.0/24 Tunnel0.0
[R20:IX2015] ip route 192.168.10.0/24 Tunnel0.0
host010(192.168.10.10)とhost020(192.168.20.20)の間で疎通可能である事を確認します。
[host010:RockyLinux8.5] [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=2.11 ms 64 bytes from 192.168.20.20: icmp_seq=2 ttl=62 time=1.47 ms 64 bytes from 192.168.20.20: icmp_seq=3 ttl=62 time=1.47 ms --- 192.168.20.20 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 1.467/1.682/2.105/0.299 ms
動作確認 (2) プロポーザルの明示指定
IKEv2 saのプロポーザル
デフォルト設定を用いてIKEv2 saを確立する事もできますが、IKEv2 saのプロポーザルを明示指定する事もできます。以下はデフォルト設定を明示的に記述したconfigです。
[R10:IX2015] ikev2 default-profile sa-proposal enc aes-cbc-256 sa-proposal integrity sha2-512 sa-proposal dh 2048-bit
IKEv2 child-saのプロポーザル
デフォルト設定を用いてIKEv2 child-saを確立する事もできますが、IKEv2 child-saのプロポーザルを明示指定する事もできます。以下はデフォルト設定を明示的に記述したconfigです。
[R10:IX2015] ikev2 default-profile child-lifetime 28800 child-proposal enc aes-cbc-256 child-proposal integrity sha2-512
パラメタを明示指定してもIPsecを確立できる事を確認するため、IKEv2を再起動します。
[R10:IX2015] show ikev2 sa show ikev2 child-sa
[R20:IX2015] show ikev2 sa show ikev2 child-sa
host010(192.168.10.10)とhost020(192.168.20.20)の間で疎通を確認します。
[host010:RockyLinux8.5] [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.73 ms 64 bytes from 192.168.20.20: icmp_seq=2 ttl=62 time=1.57 ms 64 bytes from 192.168.20.20: icmp_seq=3 ttl=62 time=1.47 ms --- 192.168.20.20 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 1.474/1.590/1.727/0.104 ms