今回は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インタフェースが存在することが確認できます。
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であることが確認できます。
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が確認できることが分かります。
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で使用する暗号化方式や認証方式が確認できることが分かります。
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で使用されている暗号化方式や認証方式等が確認できることが分かります。
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で使用されている暗号化方式や認証方式、暗号化対象の通信の範囲等が確認できます。
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#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で暗号化されていることが確認できます。
コメント