NEC IXのIKEv2 IPsec設定 片拠点 プライベートIPアドレス

スポンサーリンク

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しか投入していません。

R10 : NEC IX 2015
! NEC Portable Internetwork Core Operating System Software
! IX Series IX2105 (magellan-sec) Software, Version 8.10.11, RELEASE SOFTWARE
! Compiled Aug 02-Fri-2013 13:57:45 JST #2
! Current time Nov 23-Tue-2021 17:46:43 JST
!
!
hostname R10
timezone +09 00
!
!
!
username admin password hash 0C34240482 administrator
!
!
!
!
!
!
logging buffered 131072
logging subsystem all warn
logging timestamp datetime
!       
!
ip route default 200.0.10.1
!
!
!
!
!
!
!
!
!
!
telnet-server ip enable
!
!
!
!
!
!
!
!
!
device GigaEthernet0
!
device GigaEthernet1
!
interface GigaEthernet0.0
  ip address 200.0.10.10/24
  ip napt enable
  no shutdown
!
interface GigaEthernet1.0
  ip address 192.168.10.1/24
  no shutdown
!
interface Loopback0.0
  no ip address
!
interface Null0.0
  no ip address
R30 : NEC IX 2015
! NEC Portable Internetwork Core Operating System Software
! IX Series IX2105 (magellan-sec) Software, Version 10.2.34, RELEASE SOFTWARE
! Compiled Mar 26-Fri-2021 16:04:41 JST #2
! Current time Nov 23-Tue-2021 18:02:23 JST
!
hostname R30
timezone +09 00
!
logging buffered 8192
logging subsystem all warn
logging timestamp datetime
!
username admin password hash 63cA632c6fBB8D099804ed6eBc758b@ administrator
!
!
ip ufs-cache enable
ip route default 192.168.20.1
!
!
!
!
!
!
!       
!
!
telnet-server ip enable
!
!
!
device GigaEthernet0
!
device GigaEthernet1
!
interface GigaEthernet0.0
  ip address 192.168.20.30/24
  no shutdown
!
interface GigaEthernet1.0
  ip address 192.168.30.1/24
  no shutdown
!
interface Loopback0.0
  no ip address
!
interface Null0.0
  no ip address
Internet : VyOS1.4
set interfaces ethernet eth0 address '200.0.10.1/24'
set interfaces ethernet eth0 hw-id '00:50:56:90:8e:9d'
set interfaces ethernet eth1 address '192.168.20.1/24'
set interfaces ethernet eth1 hw-id '00:50:56:90:a2:8c'
set nat source rule 100 destination
set nat source rule 100 outbound-interface 'eth0'
set nat source rule 100 source address '0.0.0.0/0'
set nat source rule 100 translation address '200.0.10.1'
set protocols static route 192.168.0.0/16 next-hop 192.168.20.30
set service ssh disable-host-validation
set system config-management commit-revisions '100'
set system conntrack modules ftp
set system conntrack modules h323
set system conntrack modules nfs
set system conntrack modules pptp
set system conntrack modules sip
set system conntrack modules sqlnet
set system conntrack modules tftp
set system console device ttyS0 speed '115200'
set system host-name 'NAT20'
set system login user admin authentication encrypted-password '$6$cl1DIDt8CHJnLXst$zNkGlajjlSDirfSVdmFEkVfkvj3rxjayuu1RfzvuJQ.rNzJlb3s995/1HZX91nvW83ZvINnGvXBG6Z.sWVE7W/'
set system login user vyos authentication encrypted-password '$6$BLBE.ChYBI4ynui8$u2B.sTlyz1d.5GEjLyQKQmNRPN3kDHb3ynAzolORLLGOYe3up4u3vNg93QWk1DkOBbRNgkJJyYYVkrMofOFgw1'
set system login user vyos authentication plaintext-password ''
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'

動作確認 (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
タイトルとURLをコピーしました