NEC IXで片拠点がプライベートアドレスを持つ場合のIPSec設定を紹介します。IPsecの通信経路上にNAT機器が存在する場合は、udp500, udp4500を用いてNAT変換前のIPアドレスを通知する「NATトラバーサル」と呼ばれる機能を有効にする必要があります。
NEC IXで「NATトラバーサル」を有効にできるのはversion9.2以降です。NEC IXのファームウェアは一般公開されていませんので、バージョンアップは極めて困難です。ヤフオクなどでNEC IXを入手する場合は、ファームウェアバージョンに注意が必要です。
設定まとめ
コマンド一覧
IKEv2 IPsecに関連するコマンド一覧は以下の通りです。「NEC IXのIKEv2 IPsec設定 両拠点 固定IPアドレス」に載せたコマンドは説明を省略します。
Router(config)# ikev2 default-profile Router(config-ikev2-dprof)# local-authentication id [keyid|ipv4|fqdn] <value> Router(config)# ikev2 profile <xxxx> Router(config-ikev2-nprof-xxxx)# local-authentication id [keyid|ipv4|fqdn] <value> Router(config)# interface Tunnel0.0 Router(config-Tunnel0.0)# ikev2 local-authentication id [keyid|ipv4|fqdn] <value> Router(config-Tunnel0.0)# ikev2 nat-traversal [ keepalive <sec> ]
local id / remote id
IPsecにはidと呼ばれる概念があります。前述の「NEC IXのIKEv2 IPsec設定 両拠点 固定IPアドレス」で示した例は互いにグローバルIPアドレス同士の通信ならば1:1の通信になりますが、途中でNAT機器が存在する場合はNAT変換前の情報を識別する必要があります。
どの機器から接続したかを識別するための情報として、IPsecにはidと呼ばれる仕様があります。このidはipv4, key, fqdnなどで指定する事ができます。ヘルプストリングは以下の通りです。
Router(config)# ikev2 default-profile Router(config-ikev2-dprof)# local-authentication id ? fqdn -- Fully Qualified Domain Name ipv4 -- IPv4 address ipv6 -- IPv6 address keyid -- Vendor-specific information rfc822-addr -- Mail address Router(config-ikev2-dprof)#
途中でNAT機器が存在する環境でIPsecを確立する場合は、idの値に注意が必要です。
プロファイルに対するID設定
自身のIDはIKEv2プロファイルやトンネルインターフェースに対して設定可能です。デフォルトのプロファイルに対して設定する場合は以下のようなコマンドになります。
Router(config)# ikev2 default-profile Router(config-ikev2-dprof)# local-authentication id [keyid|ipv4|fqdn] <value>
名前つきプロファイルに対して設定する場合は以下のようになります。
Router(config)# ikev2 profile <xxxx> Router(config-ikev2-nprof-xxxx)# local-authentication id [keyid|ipv4|fqdn] <value>
インターフェースに対するID設定
自身のIDはIKEv2プロファイルやトンネルインターフェースに対して設定可能です。トンネルインターフェースに対して設定する場合は以下のようなコマンドになります。
Router(config)# interface Tunnel0.0 Router(config-Tunnel0.0)# ikev2 local-authentication id [keyid|ipv4|fqdn] <value>
NATトラバーサル
NATトラバーサルを有効にするには以下のコマンドを使用します。
Router(config)# interface Tunnel0.0 Router(config-Tunnel0.0)# ikev2 nat-traversal [ keepalive <sec> ]
動作確認
動作確認の構成
以下の環境で動作確認を行います。
+------------------+ | 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 source NAT : any => 200.0.10.1 +-------+----------+ | VyOS 1.4 | | NAT20 | +-------+----------+ eth1 | .1 | | 192.168.20.0/24 | G0.0 | .30 +-------+----------+ | NEC IX 2015 | | R30 | +-------+----------+ G1.0 | .1 | | 192.168.30.0/24 | ens224 | .30 +-------+----------+ | Rocky Linux 8.5 | | host030 | +------------------+
初期設定
IX2015の初期設定は以下の通りとします。設定はIPアドレスとインターネットに接続するためのNATしか投入していません。
動作確認 (1) IPsec確立
local-id / remote-id
NAT越しでIPsecを確立する場合は、local-id, remote-idに注意が必要です。以下、注意点を述べます。
R20側の設定
IPsecを確立するための設定を入れます。プライベートアドレスを持つR20側は特段の考慮は不要です。R20は以下のような設定になります。
[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.30/24 ip tcp adjust-mss auto ikev2 connect-type auto ikev2 ipsec pre-fragment ikev2 nat-traversal keepalive 20 ikev2 peer 200.0.10.10 authentication psk id ipv4 200.0.10.10 no shutdown
設定そのものは難しくありませんが、R20のlocal idは注意が必要です。local idは自分自身のIPアドレスが設定されますので、local idは「192.168.20.30」になります。明示的な指定は必要ありませんが、以下のような暗黙のデフォルト設定が適用される事に注意してください。
local idは必ずしもプライベートIPアドレスを指定する必要はありません。またIPv4形式のIDを指定するのも必須ではありません。もし、このデフォルトの挙動が混乱を招くと感じるならば、keyid, fqdnなどを用いてIDを明示指定する事もできます。
[R20:IX2015] ikev2 default-profile local-authentication id ipv4 192.168.20.30
R10側の設定
グローバルIPアドレスを持つ側はやや考慮が必要です。R20のlocal idは「192.168.20.30」です。事前共有鍵は、以下のように対向のローカルIDを指定します。言い換えれば、対向のプライベートIPアドレスを指定します。
[R10:IX2015] ikev2 authentication psk id ipv4 192.168.20.30 key char P@ssw0rd
peerは引数に「対向のグローバルIPアドレス」と「対向のID」を指定する必要があります。グローバルIPアドレス同士の通信ならば「対向のグローバルIPアドレス」と「対向のID」が一致しますが、NAT越しの通信の場合は「対向のグローバルIPアドレス」と「対向のID」が異なる値になる事に注意が必要です。
[R10:IX2015] 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.10.1 authentication psk id ipv4 192.168.20.30 no shutdown
initiator / responder
NAT越しの環境ではプライベートIPアドレスを持つ機器からの発呼は可能ですが、逆方向の通信は許容されません。R30は通信を開始する「initiator」として設定し、R10は通信を受け付ける「responder」として設定します。
[R30:IX2015] interface Tunnel0.0 ikev2 negotiation-direction initiator
[R10:IX2015] interface Tunnel0.0 ikev2 negotiation-direction responder
NAT併用時の注意
NAT併用時はudp500などの接続許可が必要になる事もあります。
NEC IXのバージョンによっては暗黙的にudp500などが許可されるため、設定投入を省略できます。
[R10:IX2015] interface GigaEthernet0.0 ip napt static GigaEthernet0.0 50 ip napt static GigaEthernet0.0 udp 500
IPsec確立の確認
ikev2 saが確立された事を確認します。local id, remote id, initiator, responderあたりの仕様がやや複雑なので注意深く観察しましょう。
[R10:IX2015] R10(config)# show ikev2 sa IKEv2 SA - 1 created Interface Tunnel0.0 SPI (I)0x05ec6cf443bc0764 (R)0x60a13b8b525c656d Remain lifetime[sec] : 86314 Serial : 2 Direction : responder (only) Local Addr : 200.0.10.10:500 Peer Addr : 200.0.10.1:500 Local ID : IPV4-ADDR 200.0.10.10 Peer ID : IPV4-ADDR 192.168.20.30 Status : establish Local message ID : 0 Peer message ID : 2 Encryption alg : AES-CBC-256 <omitted>
[R30:IX2015] R30(config)# show ikev2 sa IKEv2 SA - 1 created Interface Tunnel0.0 SPI (I)0x05ec6cf443bc0764 (R)0x60a13b8b525c656d Remain lifetime[sec] : 86227 Serial : 2 Direction : initiator (only) Local Addr : 192.168.20.30:500 Peer Addr : 200.0.10.10:500 Local ID : IPV4-ADDR 192.168.20.30 Peer ID : IPV4-ADDR 200.0.10.10 Status : establish Local message ID : 2 Peer message ID : 0 Encryption alg : AES-CBC-256 <omitted>
ikev2 child-saが確立された事を確認します。
[R10:IX2015] R10(config)# show ikev2 child-sa Child SA - 1 connected Interface Tunnel0.0 IKE Peer ID : IPV4-ADDR 192.168.20.30 IKE SPI (I)0x05ec6cf443bc0764 (R)0x60a13b8b525c656d IKE SA serial : 2 Child SA Protocol : ESP Local Addr : 200.0.10.10 Peer Addr : 200.0.10.1 Enc alg : AES-CBC-256 Hash alg : HMAC-SHA2-512-256 Remain lifetime[sec] : 28543 Anti-replay : on Direction is outbound
[R30:IX2015] R30(config)# show ikev2 child-sa Child SA - 1 connected Interface Tunnel0.0 IKE Peer ID : IPV4-ADDR 200.0.10.10 IKE SPI (I)0x05ec6cf443bc0764 (R)0x60a13b8b525c656d IKE SA serial : 2 Child SA Protocol : ESP Local Addr : 192.168.20.30 Peer Addr : 200.0.10.10 Enc alg : AES-CBC-256 Hash alg : HMAC-SHA2-512-256 Remain lifetime[sec] : 28528 Anti-replay : on Direction is outbound
トンネル間の疎通を確認します。
[R10:IX2015] R10(config)# ping 169.254.0.30 count 3 PING 169.254.0.10 > 169.254.0.30 56 data bytes 64 bytes from 169.254.0.30: icmp_seq=0 ttl=64 time=1.122 ms 64 bytes from 169.254.0.30: icmp_seq=1 ttl=64 time=0.940 ms 64 bytes from 169.254.0.30: icmp_seq=2 ttl=64 time=0.812 ms --- 169.254.0.30 ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip (ms) min/avg/max = 0.812/0.958/1.122
動作確認 (2) 拠点間の疎通確認
ルーティング設定
host010とhost030間で疎通可能になるようにstatic routeを定義します。
[R10:IX2015] ip route 192.168.30.0/24 Tunnel0.0
[R30:IX2015] ip route 192.168.10.0/24 Tunnel0.0
疎通確認
host010(192.168.10.10)とhost030(192.168.30.30)の間で疎通を確認します。
[host010:RockyLinux8.5] [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.68 ms 64 bytes from 192.168.30.30: icmp_seq=2 ttl=62 time=1.50 ms 64 bytes from 192.168.30.30: icmp_seq=3 ttl=62 time=1.58 ms --- 192.168.30.30 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 1.502/1.586/1.679/0.085 ms