NSX-T IPsec VPN – IKEv2

今回はNSX-TでのIPsec VPNの検証証跡をまとめました。

 

概要

VPNについて

VPN(Virtual Private Network)とはインターネット上に仮想的な専用線を構築し、物理的に離れた場所を接続し、安全にデータをやり取りする技術になります。

VPNには離れた拠点間を接続するSite-to-Site VPNと、拠点と自身のPC間を接続するRemote Access VPN等が存在します。(Site-to-Site VPNはLAN-to-LAN VPNやL2L VPNとも呼ばれます。)

 

一般的にインターネット上でVPNは構築されるため、データの盗聴や改竄が発生する可能性があります。そのため、VPN上でやり取りされるデータに対しては暗号化等が実施されます。

 

IPsecについて

IPsecはSite-to-Site VPNで使用される技術の一種で、データの盗聴や改竄を防止する機能を提供します。

IPsecではESP(Encapsulated Security Payload)、または、AH(Authentication Header)と呼ばれるプロトコルを使用して、データの暗号化や認証を実施します。ESPは暗号化と認証の両方をサポートしていますが、AHは認証のみサポートしています。(以下はトンネルモードの場合のパケットフォーマットになります。トランスポートモードと呼ばれる方式も存在します。また、ESPとAHを併用することも可能です。)

NSX-TではESPのみサポートしています。

 

IKEについて

IKE(Internet Key Exchange)はIPsec VPNの生成や管理をするためのプロトコルになります。現在、IKEにはIKEv1(IKE version 1)とIKEv2(IKE version 2)の2種類が存在しており、NSX-TはデフォルトでIKEv2を使用します。

IKEではISAKMP(Internet Security Association and Key Management Protocol)と呼ばれるプロトコルを使用して、ルータ間で暗号化や認証用の鍵やアルゴリズムなどの情報を交換します。

(以降のIKEv2の通信フローになります。)

 

IKEでは通信を開始する側をInitiator、対向をResponderと呼びます。

IKEv2では最初に暗号化方式、認証方式、PRF(Puseudo-Random Function)方式、DH(Diffie-Hellman) Groupを交換します。この情報をProposalと呼び、InitiatorとResponder間でProposalが一致している必要があります。また、DHの計算値とNonceなども交換されます。

補足として、PRFは擬似乱数関数、DHはインターネット上で安全に秘密の共有値を交換/生成する技術、Nonceはランダムな値になります。

 

上記のメッセージの交換が完了後、InitiatorとResponder間にはIKE SA(Security Association)と呼ばれる暗号化された通信路が確立されます。

IKE SA確立後、IKE SA上でユーザのトラフィックを暗号化/認証するための通信路を生成するの必要な情報をやり取りします。また、この際、InitiatorとResponderはお互いを認証します。認証にはパスワードを使用するPSK(Pre Shared Key)と呼ばれる方式と、CA(Certificate Authority)を使用する方法が存在します。

PSKの場合、InitiatorとResponderに対して、事前にピアのIDとパスワードを設定しておく必要があります。受信したパケットに含まれているIDとパスワードが事前に設定したモノと一致している場合、認証が成功します。

また、TS(Traffic Selector)は暗号化対象の通信の範囲になります。

 

その後、InitiatorとResponder間でIPsec SAが2個生成されます。InitiatorからResponderへの通信と、ResponderからInitiatorへの通信で別々のIPsec SAを使用します。

 

検証結果

検証内容、構成

Tier-1 GWでSegment 1を収容します。
Tier-1 GWとTier-0 GWを接続します。
NSX EdgeにTier-0 GWのSRを配置し、物理ネットワークとNSX-Tの仮想ネットワークを接続します。

Tier-0 GWのSRとR2間でIPsec VPNを確立し、10.1.1.0/24と20.2.2.0/24間の通信をESPで暗号化します。
IKEにばバージョン2のIKEv2を使用します。

 

ネットワーク機器のCLIの設定


interface GigabitEthernet2
 ip address 10.1.1.1 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 10.1.1.254
            


crypto ikev2 proposal IKEV2_PROPOSAL
 encryption aes-cbc-128
 integrity sha256
 group 14
!
crypto ikev2 policy IKEV2_POLICY
 proposal IKEV2_PROPOSAL
!
crypto ikev2 keyring IKEV2_KEYRING
 peer PEER_BLOCK
  address 10.2.2.1
  pre-shared-key Zaq12wsx!@
!
crypto ikev2 profile IKEV2_PROFILE
 match identity remote address 10.2.2.1 255.255.255.255
 identity local address 20.1.1.100
 authentication remote pre-share
 authentication local pre-share
 keyring local IKEV2_KEYRING
!
crypto ipsec transform-set TRANSFORM_SET esp-gcm
 mode tunnel
!
crypto map CRYPTO_MAP 10 ipsec-isakmp
 set peer 10.2.2.1
 set transform-set TRANSFORM_SET
 set ikev2-profile IKEV2_PROFILE
 match address CRYPTO_ACL
!
interface Loopback0
 ip address 20.2.2.2 255.255.255.0
!
interface GigabitEthernet2
 ip address 20.1.1.100 255.255.255.0
 crypto map CRYPTO_MAP
!
ip route 0.0.0.0 0.0.0.0 20.1.1.1
!
ip access-list extended CRYPTO_ACL
 10 permit ip 20.2.2.0 0.0.0.255 10.1.1.0 0.0.0.255
            

 

IPsecの設定

VPNサービスの定義

最初にIPsec用のVPNサービスを定義します。

 

ローカルエンドポイントの定義

次に、ローカルエンドポイントを定義します。

IPアドレスにはTier-0 GWのSRがIKEやIPsecの通信で使用する送信元アドレスを指定します。IPアドレスにはTier-0 GWのSRのUplinkのアドレスは使用できません。ここで指定したIPアドレスを保持したLoopbackインタフェースが自動的に生成されます。
ローカルIDにはTier-0 GWのSRがIKEの通信で使用するIDを指定します。

 

ポリシーベースのIPsecセッションの定義

最後にポリシーベースのIPsecセッションを定義し、先程作成したVPNサービスとローカルエンドポイントを関連付けます。

リモートIPには対向ルータがIKEやIPsecの通信で使用する送信元アドレスを指定します。リモートIDには対向ルータがIKEの通信で使用するIDを指定します。
認証モードにはPSK、プリシェアードキーに認証用のパスワードを指定します。
ローカルネットワークとリモートネットワークには暗号化対象の通信の範囲を指定します。

 

スタティックルートの設定

対向拠点のルート情報に関するスタティックルートのネクストホップにはUplinkを指定します。

 

状態確認

Tier-0 GWのSRのインタフェースの確認

Tier-0 GWのSRのインタフェースを見ると、ローカルエンドポイントで指定したアドレスが割り当てられたLoopbackインタフェースが存在することが確認できます。

NSX Edge1

edge1(tier0_sr)> get interfaces
Logical Router
UUID                                   VRF    LR-ID  Name                              Type
f6d536a6-0edc-459c-9fff-bef1a717f5a7   3      4099   SR-Tier-0_GW                      SERVICE_ROUTER_TIER0
Interfaces (IPv6 DAD Status A-Assigned, D-Duplicate, T-Tentative)
    .
    <一部省略>
    .
    Interface     : 52a86792-791f-4d32-b826-e40a70efb6e4
    Ifuid         : 276
    Name          : Ext_Uplink1
    Fwd-mode      : IPV4_ONLY
    Internal name : uplink-276
    Mode          : lif
    Port-type     : uplink
    IP/Mask       : 20.1.1.1/24
    MAC           : 00:50:56:b9:a7:b2
    VLAN          : None
    Access-VLAN   : None
    LS port       : fae3f22b-3ff0-4142-9f50-7e8f5a209c74
    Urpf-mode     : STRICT_MODE
    DAD-mode      : LOOSE
    RA-mode       : SLAAC_DNS_TRHOUGH_RA(M=0, O=0)
    Admin         : up
    Op_state      : up
    MTU           : 1500

    Interface     : 24a9de12-98e9-4d65-927a-da5d756769f0
    Ifuid         : 283
    Mode          : loopback
    Port-type     : loopback
    IP/Mask       : 10.2.2.1/32;127.0.0.1/8;::1/128(NA)
            

 

Tier-0 GWのSRのルーティングテーブルの確認

Tier-0 GWのSRのルーティングを見ると、20.2.2.0/24のネクストホップがアンダーレイのExt_Uplink1であることが確認できます。

NSX Edge1

edge1(tier0_sr)> get route

Flags: t0c - Tier0-Connected, t0s - Tier0-Static, b - BGP,
t0n - Tier0-NAT, t1s - Tier1-Static, t1c - Tier1-Connected,
t1n: Tier1-NAT, t1l: Tier1-LB VIP, t1ls: Tier1-LB SNAT,
t1d: Tier1-DNS FORWARDER, t1ipsec: Tier1-IPSec, isr: Inter-SR,
> - selected route, * - FIB route

Total number of routes: 8

t1c> * 10.1.1.0/24 [3/0] via 100.64.176.1, linked-280, 1d13h20m
t0c> * 10.2.2.1/32 is directly connected, loopback-283, 3d01h58m
t0c> * 20.1.1.0/24 is directly connected, uplink-276, 4d08h38m
t0s> * 20.2.2.0/24 [1/0] via 20.1.1.100, uplink-276, 3d02h07m
t0c> * 100.64.176.0/31 is directly connected, linked-280, 1d13h20m
t0c> * 169.254.0.0/24 is directly connected, downlink-274, 1d13h20m
t0c> * fcd4:ae0b:c612:b800::/64 is directly connected, linked-280, 1d13h20m
t0c> * fe80::/64 is directly connected, linked-280, 1d13h20m
            

 

Tier-0 GWのSRのIPsec VPNの設定/状態確認

ローカルエンドポイントの設定はget ipsecvpn config local-endpointコマンドで確認可能です。Tier-0 GWのSRがIKEやIPsecで使用するアドレスやIDが確認できることが分かります。

NSX Edge1

edge1> get ipsecvpn config local-endpoint
UUID                                : a4bcf808-0f56-40b7-a8f6-00a03f71b868
Local Address                       :
    Ipv4                            : 10.2.2.1
Local Endpoint State                : 3
Local ID                            : 10.2.2.1
Local ID Type                       : IPSEC_IP_ADDR_TYPE
            

 

ピアの設定はget ipsecvpn config peer-endpointコマンドで確認可能です。対向ルータがIKEやIPsecで使用するアドレスやID、また、IKE SAやIPsec SAで使用する暗号化方式や認証方式が確認できることが分かります。

NSX Edge1

edge1> get ipsecvpn config peer-endpoint
UUID                                : 5e43357d-05ea-4cd0-9e1d-ba7d1e885483
Auth Mode                           : AUTH_MODE_PSK
DPD Profile                         :
    UUID                            : b23e719e-ab6f-437f-8250-16a261f00afc
    DPD Probe Interval              : 60 sec
    DPD Probe Mode                  : Periodic
    Enabled                         : True
    Retry Count                     : 5
IKE Profile                         :
    UUID                            : 6cc4ac2e-f771-4ab0-80d1-8fe77b7a9ea3
    Authentication Algorithm        : AUTH_HMAC_SHA256
    DH Group                        : DH_GROUP_14
    Encryption Algorithm            : ENCR_AES_128_CBC
    IKE Version                     : IKE_V2
    SA Expiry Time                  : 86400 sec
IKE Role                            : INITIATOR
Ipsec Tunnel Profile                :
    UUID                            : 85d989d9-50fb-4ec1-91d0-1aada473aeb2
    DF Policy                       : DF_COPY
    Encryption Algorithm            : ENCR_AES_128_GCM
    PFS Group                       : DH_GROUP_14
    SA Expiry Time                  : 3600 sec
Peer Address                        : 20.1.1.100
Peer ID                             : 20.1.1.100
Peer ID Type                        : IPSEC_IP_ADDR_TYPE
            

 

IKE SAの状態はget ipsecvpn ikesaコマンドで確認可能です。IKE SAで使用されている暗号化方式や認証方式等が確認できることが分かります。

NSX Edge1

edge1> get ipsecvpn ikesa
    Total Number of IKE SAs: 1

    IKE Version              : IKEv2
    IKE Status               : Up
    IKE Session ID           : 8193
    Session Name             : Tunnel-f195da00-47294555-8ad48653-c00f5b16
    Session Type             : Policy Based

    IKE SPI Initiator        : 0x13b4e00a799af762
    IKE SPI Responder        : 0xd3cc4c3d6bf57f34
    Role                     : Initiator

    Number of Child SA Pairs : 1
    Created Timestamp        : 2020-09-06 12:27:50
    IKE SA Uptime            : 707 sec
    IKE SA Lifetime          : 86400 sec
    DPD Probe Interval       : 60 sec

    IP Address:
      Local                  : 10.2.2.1
      Remote                 : 20.1.1.100

    Identity:
      Local                  : 10.2.2.1 (ipv4)
      Remote                 : 20.1.1.100 (ipv4)

    Algorithm:
      Encryption             : aes128-cbc
      Authentication         : hmac-sha256-128
      PRF                    : hmac-sha256
    DH Group                 : 14

    Authentication Method    : Pre-shared key
    ----------------------------------------
            

 

IPsec SAの状態はget ipsecvpn ipsecsaコマンドで確認可能です。IPsec SAで使用されている暗号化方式や認証方式、暗号化対象の通信の範囲等が確認できます。

NSX Edge1

edge1> get ipsecvpn ipsecsa
    Total Number of IPSec SA Pairs: 1

    Session ID               : 8193
    Created Timestamp        : 2020-09-06 12:27:49
    Local TS                 : ipv4(10.1.1.0-10.1.1.255)
    Remote TS                : ipv4(20.2.2.0-20.2.2.255)

    SPI In         : 0x5c2b621c         SPI Out        : 0x562e1e96
    Rule ID In     : 536870914          Rule ID Out    : 2684354562
    SA Uptime      : 729 sec            SA Lifetime    : 3600 sec
    Local Endpoint : 10.2.2.1           Remote Endpoint: 20.1.1.100

    Algorithm: aes128-gcm-16/none
    NAT-T: False,  ESN: False,  DF-Policy: Copy
    Anti-Replay Window Size: 960, Role: Initiator
    ----------------------------------------
            

 

ISAKMPメッセージの確認

IKE SA確立前

以下はTier-0 GWのSRがR2に対して送信した最初のISAKMPメッセージのキャプチャになります。

 

SA PayloadにはIKE SAに関するProposalが格納されています。

 

KE(Key Exchange) PayloadにはDHの計算値が格納されます。

 

Nonce Payloadにはランダムな値が格納されます。

 

IKE SA確立後

以下はIKE SA確立後に、Tier-0 GWのSRがR2に対して送信したISAKMPメッセージのキャプチャになります。暗号化されていることが確認できます。

 

疎通確認

R1の10.1.1.1からR2の20.2.2.2へPingを実施します。

 

R1の10.1.1.1からR2の20.2.2.2へのPingが成功していることが確認できます。

R1

R1#ping 20.2.2.2 source 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.2.2.2, timeout is 2 seconds:
Packet sent with a source address of 10.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/2 ms
            

 

以下は20.1.1.0/24上でキャプチャしたR1の10.1.1.1からR2の20.2.2.2へのICMP Echoになります。ESPで暗号化されていることが確認できます。

コメント

タイトルとURLをコピーしました