【VyOS】【Win11】IKEv2 VPN リモートアクセス (User/Password 認証)

接続構成

Windows 11 端末から宛先の NAT 配下サーバにアクセスするため、IKEv2 を用いて同一の LAN セグメントに接続する。この時、Winsows 11 端末は NAPT ルータ配下で送信元 NAPT が行われる。
各パラメータは Windows 11 標準の VPN クライアントで利用・変更可能なものを使用する。
※証明書等は「【VyOS】SSTP を使用した SSL/TLS VPN リモートアクセス (User/Password 認証)」を参照。

IKE バージョンIKEv2
暗号アルゴリズム(認証付き)AES128-GCM
鍵交換アルゴリズムDiffie-Hellman Group 14 (MODP 2048)
PRF (Pseudo-Random Function)PRF_HMAC_SHA2_256
サーバ認証方式
(クライアントがサーバを認証)
RSA デジタル署名 (X.509証明書)
クライアント認証方式
(サーバがクライアントを認証)
EAP-MSCHAP v2
キープアライブ (DPD)Disabled
NAT TraversalNAT 環境下
ライフタイム28800 (8時間)
MTU自動(Windows側で決定?)
IKEv2 ネゴシエーション
暗号アルゴリズム(認証付き)AES128-GCM
暗号プロトコルESP
通信モードTunnel Mode
PFS (鍵交換アルゴリズム)無効
ライフタイム3600 (1時間)
払い出し IP 範囲192.168.1.0/28
IPsec ネゴシエーション

プライベートCA (認証局)

秘密鍵のフォーマットPKCS#8 (OpenSSL 3 系の標準)
サブジェクト DNC=JP, CN=Ubuntu CA, O=Private Lab
X.509 エンコーディング形式PEM (Base64)
プライベート認証局 (CA)

サーバ証明書

有効期限約1年 (365日)
RSA 暗号の鍵長2,048bit (約617桁 log2 x 2048)
秘密鍵のフォーマットPKCS#8 (OpenSSL 3 系の標準)
サブジェクト DNCN=vyos.net.home
※対象に合わせて適切に変更
シリアル番号自動生成
X.509 エンコーディング形式PEM (Base64)
基本制約重要【critical】
CA:FALSE
鍵用途重要【critical】
digitalSignature
拡張鍵用途重要【critical】
serverAuth
サブジェクトの別名 (SAN)【DNS】vyos.net.home
※対象に合わせて適切に変更
サーバ証明書
IKEv2 暗号スイートIKE:AES_GCM_16_128/PRF_HMAC_SHA2_256/MODP_2048
※コマンドで変更
IKEv2 ライフタイム28800 (8時間) ※変更方法わからない
ESP 暗号スイートESP:AES_GCM_16_128/NO_EXT_SEQ
※コマンドで変更
ESP ライフタイム3600 (1時間) ※変更方法わからない
暗号化必須
スプリットトンネル有効
Windows 11 VPN 設定

Windows の VPN 設定

VPN 接続設定の作成

Window 11 からVPNの設定を行う。これはGUIから可能。コマンドの場合は以下。
※長いので「`」で改行して入力。

Add-VpnConnection -Name "vyos-01" `
>> -ServerAddress "vyos.net.home" `
>> -TunnelType "Ikev2" `
>> -Encryptionevel "Required" `
>> -SplitTunneling

次に暗号スイートの設定を行う。これはコマンドの設定が必須となる。
※長いので「`」で改行して入力。

Set-VpnConnectionIPsecConfiguration -ConnectionName "vyos-01" `
>> -EncryptionMethod GCMAES128 `
>> -IntegrityCheckMethod SHA256 `
>> -DHGroup Group14 -PfsGroup None `
>> -AuthenticationTransformConstants GCMAES128 `
>> -CipherTransformConstants GCMAES128

※リセットは以下
Set-VpnConnectionIPsecConfiguration -ConnectionName "vyos-01"
 -RevertToDefault

設定値の確認

PS C:\Users\admin> Get-VpnConnection
Name                  : vyos-01
ServerAddress         : vyos.net.home
AllUserConnection     : False
Guid                  : {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
TunnelType            : Ikev2
AuthenticationMethod  : {Eap}
EncryptionLevel       : Custom
L2tpIPsecAuth         :
UseWinlogonCredential : False
EapConfigXmlStream    : #document
ConnectionStatus      : Disconnected
RememberCredential    : True
SplitTunneling        : True
DnsSuffix             :
IdleDisconnectSeconds : 0

VyOS (1.5 系) の設定

証明書のインポート

作成したCA 証明書、サーバ証明書を VyOS にインポートする。

[edit]
# set pki ca private_ca certificate MII... (略)
# set pki certificate server_crt private key MII... (略)
# set pki certificate server_crt certificate MII... (略)
# commit

# run show pki
Certificate Authorities:
Name       Subject                          Issuer CN    Issued               Expiry               Private Key    Parent
---------  -------------------------------  -----------  -------------------  -------------------  -------------  --------
private_ca  C=JP,CN=Ubuntu CA,O=Private Lab  C=JP         2024-10-25 15:19:37  2034-10-25 15:19:37  No             N/A

Certificates:
Name      Type    Subject CN            Issuer CN    Issued               Expiry               Revoked    Private Key    CA Present
--------  ------  --------------------  -----------  -------------------  -------------------  ---------  -------------  ---------------
server_crt  Server  CN=vyos.net.home  C=JP         2024-11-24 11:18:32  2025-11-24 11:18:32  No         Yes            Yes (private_ca)

Certificate Revocation Lists:
CA Name    Updated    Revokes
---------  ---------  ---------

Config (VyOS ver1.5系)

【enable-proxy-arp】を忘れると同セグメント間通信ができない事に注意。
※ESP 側のハッシュは何でも良い?(AES128GMAC 指定しても変化せず接続化)

interfaces {
    ethernet eth0 {
        address 10.0.0.250/24
    }
    ethernet eth1 {
        address 192.168.1.254/24
        ip {
            enable-proxy-arp
        }
    }
}
nat {
    source {
        rule 100 {
            outbound-interface name eth0
            source {
                address 192.168.1.0/24
            }
            translation {
                address masquerade
            }
        }
    }
}
pki {
     ca private_ca {
         certificate MII... (略)
     }
     certificate server_cert {
         certificate MII... (略)
         private {
             key ****************
         }
     }
}
protocols {
    static {
        route 0.0.0.0/0 {
            next-hop 10.0.0.254 {
                interface eth0
            }
        }
    }
}
vpn {
    ipsec {
        esp-group ikev2-esp {
            pfs disable
            proposal 10 {
                encryption aes128gcm128
                hash sha256   ← aes128gmac や未設定でも変わらず
            }
        }
        ike-group ikev2-ike {
            disable-mobike
            key-exchange ikev2
            proposal 10 {
                dh-group 14
                encryption aes128gcm128
                hash sha256
            }
        }
        interface eth0
        remote-access {
            connection vpn-01 {
                authentication {
                    client-mode eap-mschapv2
                    local-id 10.0.0.250
                    local-users {
                        username user-01 {
                            password password123
                        }
                    }
                    x509 {
                        ca-certificate private_ca
                        certificate server_cert
                    }
                }
                esp-group ikev2-esp
                ike-group ikev2-ike
                local-address 10.0.0.250
                pool ipv4-pool-01
            }
            pool ipv4-pool-01 {
                prefix 192.168.1.0/28
            }
        }
    }
}

VPN 接続確認

Windows 11 にプライベートCA の証明書を信頼できる証明書としてインポートする。
※詳細は「【VyOS】SSTP を使用した SSL/TLS VPN リモートアクセス (User/Password 認証)」を参照。
インポート後にWindows 11 から接続し、状態を確認する。

PS C:\Users\admin> Get-NetIPsecMainModeSA
Name                                : 1
LocalEndpoint                       : 192.168.100.1
RemoteEndpoint                      : 10.0.0.250
LocalFirstId.Identity               :
LocalFirstId.ImpersonationType      : None
LocalFirstId.AuthenticationMethod   : EAP
LocalFirstId.Flags                  : None
RemoteFirstId.Identity              : vyos.net.home
RemoteFirstId.ImpersonationType     : None
RemoteFirstId.AuthenticationMethod  : Certificate
RemoteFirstId.Flags                 : None
LocalSecondId.Identity              :
LocalSecondId.ImpersonationType     :
LocalSecondId.AuthenticationMethod  :
LocalSecondId.Flags                 :
RemoteSecondId.Identity             :
RemoteSecondId.ImpersonationType    :
RemoteSecondId.AuthenticationMethod :
RemoteSecondId.Flags                :
CipherAlgorithm                     : AESGCM128
HashAlgorithm                       : SHA256
GroupId                             : DH14
KeyModule                           : IkeV2
MaxQMSAs                            : 0
LifetimeSeconds                     : 28800
LocalUdpEncapsulationPort           : 4500
RemoteUdpEncapsulationPort          : 4500
ExtendedFilterId                    : 0


PS C:\Users\admin> Get-NetIPsecQuickModeSA
Name                       : 1
LocalEndpoint              : 192.168.100.1
RemoteEndpoint             : 10.0.0.250
TransportLayerFilterName   : IKEv2 Client Quick mode IPsec tunnel policy
EncapsulationMode          : Tunnel
Direction                  : Inbound
LocalPort                  :
RemotePort                 :
IpProtocol                 : 4
InterfaceAlias             : Wi-Fi
RealIfProfileId            : 0
LocalUdpEncapsulationPort  : 4500
RemoteUdpEncapsulationPort : 4500
SPI                        : 2464408466
FirstTransformType         : EspAuthAndCipher
FirstIntegrityAlgorithm    : AESGMAC128
FirstCipherAlgorithm       : AESGCM128
SecondSpi                  :
SecondTransformType        : None
SecondIntegrityAlgorithm   : None
SecondCipherAlgorithm      : None
Flags                      : NoExplicitCredMatch, AllowNullTargetNameMatch, AssumeUdpContextOutbound
MmSaId                     : 1
PfsGroupId                 : None
PeerV4PrivateAddress       : 0.0.0.0
QuickModeFilterid          : 67853
LifetimeSeconds            : 3600
LifetimeKilobytes          : 250000
LifetimePackets            : 2147483647
IdleDurationSeconds        : 300
NdAllowClearTimeoutSeconds : 0
NapContext                 : 0
QmSaId                     : 3848172696
VirtualIfTunnelId          : 1
TrafficSelectorId          : 1
MmTargetName               : vyos.net.home
EmTargetName               :
ExplicitCredentials        : 0

Name                       : 1
LocalEndpoint              : 192.168.100.1
RemoteEndpoint             : 10.0.0.250
TransportLayerFilterName   : IKEv2 Client Quick mode IPsec tunnel policy
EncapsulationMode          : Tunnel
Direction                  : Outbound
LocalPort                  :
RemotePort                 :
IpProtocol                 : 4
InterfaceAlias             : Wi-Fi
RealIfProfileId            : 0
LocalUdpEncapsulationPort  : 4500
RemoteUdpEncapsulationPort : 4500
SPI                        : 3477435066
FirstTransformType         : EspAuthAndCipher
FirstIntegrityAlgorithm    : AESGMAC128
FirstCipherAlgorithm       : AESGCM128
SecondSpi                  :
SecondTransformType        : None
SecondIntegrityAlgorithm   : None
SecondCipherAlgorithm      : None
Flags                      : NoExplicitCredMatch, AllowNullTargetNameMatch, AssumeUdpContextOutbound
MmSaId                     : 1
PfsGroupId                 : None
PeerV4PrivateAddress       : 0.0.0.0
QuickModeFilterid          : 67853
LifetimeSeconds            : 3600
LifetimeKilobytes          : 250000
LifetimePackets            : 2147483647
IdleDurationSeconds        : 300
NdAllowClearTimeoutSeconds : 0
NapContext                 : 0
QmSaId                     : 3848172696
VirtualIfTunnelId          : 1
TrafficSelectorId          : 1
MmTargetName               : vyos.net.home
EmTargetName               :
ExplicitCredentials        : 0

同様に、 VyOS 側で確認する。

$ show vpn ike sa
Peer ID / IP                            Local ID / IP
------------                            -------------
10.0.0.251 192.168.100.1           10.0.0.250 10.0.0.250

    State  IKEVer  Encrypt      Hash          D-H Group      NAT-T  A-Time  L-Time
    -----  ------  -------      ----          ---------      -----  ------  ------
    up     IKEv2   AES_GCM_16_128 n/a           MODP_2048      no     31      28116


$ show vpn ipsec sa
Connection     State    Uptime    Bytes In/Out    Packets In/Out    Remote address    Remote ID      Proposal
-------------  -------  --------  --------------  ----------------  ----------------  -------------  --------------
vpn-01-client  up       35s       2K/0B           29/0              10.0.0.251   192.168.100.1  AES_GCM_16_128


$ show vpn ipsec remote-access detail
ra-vpn-01: #17, ESTABLISHED, IKEv2, ea97eb1e370c46b9_i 0957e648b0afc4e2_r*
  local  '10.0.0.250' @ 10.0.0.250[4500]
  remote '192.168.100.1' @ 10.0.0.251[14684] EAP: 'user-01' [192.168.1.1]
  AES_GCM_16-128/PRF_HMAC_SHA2_256/MODP_2048
  established 57s ago, rekeying in 28090s
  vpn-01-client: #20, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_GCM_16-128
    installed 57s ago, rekeying in 2965s, expires in 3543s
    in  c3a27725,   3300 bytes,    30 packets,    21s ago
    out 598724b6,      0 bytes,     0 packets
    local  0.0.0.0/0 ::/0
    remote 192.168.1.1/32

【参照URL】
Add-VpnConnection
Set-VpnConnectionIPsecConfiguration
IKEv2 IPSec road-warriors remote-access VPN
【図解/IPsec】IKEv1とIKEv2の違いと仕組み~シーケンス,フォーマット,isakmp,DH group,PFSについて~