
「Buffalo OpenWrt化WZR-HP-G300NHでIKEv2 VPN over ぷららIPv6 IPoE接続」が稼働した。
iPhone6S(iOS 12.1.3)のVPNアプリでStrongSwan(5.6.3)へのIKEv2接続設定で接続すると下記エラーで接続できない。

「iOS (Apple iPhone, iPad...) and Mac OS X」情報から、StrongSwanの「ike/esp」設定が原因と推定していた。しかし「ログ」を調べてみると「IKE」暗号の選定が終わり、ユーザ認証もされ、ネットワーク設定でエラーが発生しているようだ。
--- 接続時のログ ---
Sun Jan 27 10:15:01 2019 daemon.info : 13[NET] received packet: from 2001:240:2419:d162:8474:dcc1:af30:ac5[500] to 2409:10:XXXX:YY20::12:1[500] (604 bytes)
Sun Jan 27 10:15:01 2019 daemon.info : 13[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(REDIR_SUP) N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) ]
Sun Jan 27 10:15:01 2019 daemon.info : 13[IKE] 2001:240:2419:d162:8474:dcc1:af30:ac5 is initiating an IKE_SA
Sun Jan 27 10:15:01 2019 authpriv.info : 13[IKE] 2001:240:2419:d162:8474:dcc1:af30:ac5 is initiating an IKE_SA
Sun Jan 27 10:15:01 2019 daemon.info : 13[IKE] IKE_SA (unnamed)[2] state change: CREATED => CONNECTING
Sun Jan 27 10:15:04 2019 daemon.info : 13[IKE] sending cert request for " CN=Private Network CA, OU=Root Certificate Authority, O=1A72E31E-EA31-4576-AAE6-8C03A00091CD, C=JP"
Sun Jan 27 10:15:04 2019 daemon.info : 13[ENC] generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) CERTREQ N(FRAG_SUP) N(MULT_AUTH) ]
Sun Jan 27 10:15:04 2019 daemon.info : 13[NET] sending packet: from 2409:10:XXXX:YY20::12:1[500] to 2001:240:2419:d162:8474:dcc1:af30:ac5[500] (473 bytes)
Sun Jan 27 10:15:04 2019 daemon.info : 09[NET] received packet: from 2001:240:2419:d162:8474:dcc1:af30:ac5[500] to 2409:10:XXXX:YY20::12:1[500] (604 bytes)
Sun Jan 27 10:15:04 2019 daemon.info : 09[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(REDIR_SUP) N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) ]
Sun Jan 27 10:15:04 2019 daemon.info : 09[IKE] received retransmit of request with ID 0, retransmitting response
Sun Jan 27 10:15:04 2019 daemon.info : 09[NET] sending packet: from 2409:10:XXXX:YY20::12:1[500] to 2001:240:2419:d162:8474:dcc1:af30:ac5[500] (473 bytes)
Sun Jan 27 10:15:04 2019 daemon.info : 14[NET] received packet: from 2001:240:2419:d162:8474:dcc1:af30:ac5[4500] to 2409:10:XXXX:YY20::12:1[4500] (1220 bytes)
Sun Jan 27 10:15:04 2019 daemon.info : 14[ENC] parsed IKE_AUTH request 1 [ EF(1/2) ]
Sun Jan 27 10:15:04 2019 daemon.info : 14[ENC] received fragment #1 of 2, waiting for complete IKE message
Sun Jan 27 10:15:04 2019 daemon.info : 15[NET] received packet: from 2001:240:2419:d162:8474:dcc1:af30:ac5[4500] to 2409:10:XXXX:YY20::12:1[4500] (756 bytes)
Sun Jan 27 10:15:04 2019 daemon.info : 15[ENC] parsed IKE_AUTH request 1 [ EF(2/2) ]
Sun Jan 27 10:15:04 2019 daemon.info : 15[ENC] received fragment #2 of 2, reassembling fragmented IKE message
Sun Jan 27 10:15:04 2019 daemon.info : 15[ENC] unknown attribute type (25)
Sun Jan 27 10:15:04 2019 daemon.info : 15[ENC] parsed IKE_AUTH request 1 [ IDi N(INIT_CONTACT) N(MOBIKE_SUP) IDr AUTH CERT CPRQ(ADDR DHCP DNS MASK ADDR6 DHCP6 DNS6 (25)) N(ESP_TFC_PAD_N) N(NON_FIRST_FRAG) SA TSi TSr ]
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] received end entity cert " C=JP, ST=TOKYO, O=FAMILYNAME, OU=FAMILY, CN=Firstname LASTNAME"
Sun Jan 27 10:15:04 2019 daemon.info : 15[CFG] looking for peer configs matching 2409:10:XXXX:YY20::12:1[vpn.v6.AAAAAAAA.mydns.jp]...2001:240:2419:d162:8474:dcc1:af30:ac5[someone@white.plala.or.jp]
Sun Jan 27 10:15:04 2019 daemon.info : 15[CFG] selected peer config 'publiccert-user10'
Sun Jan 27 10:15:04 2019 daemon.info : 15[CFG] using certificate " C=JP, ST=TOKYO, O=FAMILYNAME, OU=FAMILY, CN=Firstname LASTNAME"
Sun Jan 27 10:15:04 2019 daemon.info : 15[CFG] using trusted ca certificate " CN=Private Network CA, OU=Root Certificate Authority, O=1A72E31E-EA31-4576-AAE6-8C03A00091CD, C=JP"
Sun Jan 27 10:15:04 2019 daemon.info : 15[CFG] checking certificate status of " C=JP, ST=TOKYO, O=FAMILYNAME, OU=FAMILY, CN=Firstname LASTNAME"
Sun Jan 27 10:15:04 2019 daemon.info : 15[CFG] certificate status is not available
Sun Jan 27 10:15:04 2019 daemon.info : 15[CFG] reached self-signed root ca with a path length of 0
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] authentication of 'someone@white.plala.or.jp' with RSA signature successful
#IKEv2 over IPv6接続し、ユーザ認証(証明書による公開鍵方式)が成功
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] processing INTERNAL_IP4_ADDRESS attribute
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] processing INTERNAL_IP4_DHCP attribute
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] processing INTERNAL_IP4_DNS attribute
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] processing INTERNAL_IP4_NETMASK attribute
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] processing INTERNAL_IP6_ADDRESS attribute
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] processing INTERNAL_IP6_DHCP attribute
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] processing INTERNAL_IP6_DNS attribute
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] processing (25) attribute
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] peer supports MOBIKE
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] authentication of 'vpn.v6.AAAAAAAA.mydns.jp' (myself) with RSA signature successful
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] IKE_SA publiccert-user10[2] established between 2409:10:XXXX:YY20::12:1[vpn.v6.AAAAAAAA.mydns.jp]...2001:240:2419:d162:8474:dcc1:af30:ac5[someone@white.plala.or.jp]
Sun Jan 27 10:15:04 2019 authpriv.info : 15[IKE] IKE_SA publiccert-user10[2] established between 2409:10:XXXX:YY20::12:1[vpn.v6.AAAAAAAA.mydns.jp]...2001:240:2419:d162:8474:dcc1:af30:ac5[someone@white.plala.or.jp]
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] IKE_SA publiccert-user10[2] state change: CONNECTING => ESTABLISHED
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] scheduling reauthentication in 9952s
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] maximum IKE_SA lifetime 10492s
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] peer requested virtual IP %any
Sun Jan 27 10:15:04 2019 daemon.info : 15[CFG] reassigning offline lease to 'someone@white.plala.or.jp'
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] assigning virtual IP 192.168.13.1 to peer 'someone@white.plala.or.jp'
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] peer requested virtual IP %any6
Sun Jan 27 10:15:04 2019 daemon.info : 15[CFG] reassigning offline lease to 'someone@white.plala.or.jp'
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] assigning virtual IP 2409:10:XXXX:YY20::13:1 to peer 'someone@white.plala.or.jp'
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] building INTERNAL_IP4_DNS attribute
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] building INTERNAL_IP6_DNS attribute
Sun Jan 27 10:15:04 2019 daemon.info : 15[IKE] CHILD_SA publiccert-user10{2} established with SPIs c9c438bf_i 0b79b19f_o and TS 192.168.0.0/20 2404:1a8::/32 2409:10:XXXX:YY00::/56 === 192.168.13.1/32 2409:10:XXXX:YY20::13:1/128
Sun Jan 27 10:15:04 2019 authpriv.info : 15[IKE] CHILD_SA publiccert-user10{2} established with SPIs c9c438bf_i 0b79b19f_o and TS 192.168.0.0/20 2404:1a8::/32 2409:10:XXXX:YY00::/56 === 192.168.13.1/32 2409:10:XXXX:YY20::13:1/128
Sun Jan 27 10:15:04 2019 daemon.info : 15[ENC] generating IKE_AUTH response 1 [ IDr AUTH CPRP(ADDR ADDR6 DNS DNS6) SA TSi TSr N(AUTH_LFT) N(MOBIKE_SUP) N(ADD_4_ADDR) N(ADD_4_ADDR) N(ADD_4_ADDR) N(ADD_6_ADDR) N(ADD_6_ADDR) ]
#StrongSwanのleftsubnet情報の設定要求を生成してiPhoneへ要求
Sun Jan 27 10:15:04 2019 daemon.info : 15[NET] sending packet: from 2409:10:XXXX:YY20::12:1[4500] to 2001:240:2419:d162:8474:dcc1:af30:ac5[4500] (752 bytes)
#応答を待つがiPhoneからの応答なし。iPhoneはエラーで接続を終了。
---------------------------
「iOS (Apple iPhone, iPad...) and Mac OS X」を見直してみる。構成ファイル(プロファイル)で「ServerCertificateIssuerCommonName」が定義されていると「CERTREQ」を行うが、アプリ設定だと「CERTREQ」しない。「leftsendcert=always」が必要。

StrongSwanの 「/etc/ipsec.conf」に設定し確認。アプリ設定でも接続する事を確認した。
---=== /etc/ipsec.conf ===---
# ipsec.conf - strongSwan IPsec configuration file
# Add connections here.
conn %default
keyexchange=ikev2
##Win10には必要
ike=aes256-sha256-modp1024
auto=add
left=%any
leftauth=pubkey
##leftsubnetでイントラネット内ネットワークを定義すると「Split Tunneling」として「Configuration Payload」を介して「Traffic Selectors情報」が端末に通知される。端末からのネットワーク通信を全てイントラネットに向けるには,デフォルトルート「0.0.0.0/0,::/0」を設定する
leftsubnet=192.168.0.0/20,2409:10:XXXX:YY00::/56,2404:1a8::/32
##iPhone VPNアプリ設定用に必要(iOS 12.1.3/macOSX 10.12.6)
leftsendcert=always
leftcert=srv-pub.pem
leftid=@vpn.v6.AAAAAAAA.mydns.jp
#ここから端末側の定義
right=%any
rightsourceip=192.168.13.0/24,2409:10:XXXX:YY20::13:0/120
##イントラネット内のFQDNを解決できるDNSアドレスを指定「Configuration Payload」で通知される
rightdns=192.168.12.1,2409:10:XXXX:YY20::12:1
------------------------
組織表示部が「不明」となっているのがVPNアプリで設定した接続先。一番上は、構成ファイルで設定した接続先。3番目4番目も構成ファイルでの設定。
構成ファイルでの接続、Windows10からの接続に影響を与えない事も確認した。
「ID/Password」によるユーザ認証。「ローカルID」は、空欄とする事。設定した場合、「EAP-TLS認証のID」と誤認識され接続出来ない場合がある。StrongSwan側で、「ID/Password」と「EAP-TLS認証」の両方式でユーザ設定されている場合に注意が必要。証明書を設定した場合、SAN(Subject Alternative Name)内の一つを「ローカルID」に指定する。iOS/macOSXでは、DN指定を受け付けないので注意が必要。また、SANの属性は、「emailかNT principal」。SANに記述するRFC822形式の「@ドメイン」は、トップドメインだけだと有効とならないので最低限「@2ndName.1stName」である事が必要。証明書は、事前に「設定」「一般」「プロファイル」にCA公開鍵と共に追加しておく事。
「ID/Password」「公開鍵方式」の設定値


「EAP-TLS方式」の設定値

macOSX SierraのVPN接続設定アプリ
「ID/Password」ユーザ認証で設定

iPhone6Sのテザリング接続(WiFi)し、IKEv2 VPN接続

DNSの設定はしていない(StrongSwanからの自動設定を目指す)

Split TunnelingとSplit DNS
「Windows10のSplit Tunneling/DNS設定」や「iOS/macOSX構成ファイル設定によるSplit Tunneling/DNS」と同じように、VPN設定アプリでSplit Tunneling/DNSが実現できるか確認してみる。
「iOS (Apple iPhone, iPad...) and Mac OS X」で「rightsourceip」でIPv6アドレスがプールされている場合、「leftsubnet」に「::/0」が設定されているか経路情報が設定されていない必要があると。。。Split Tunneling出来ないと言う事か?
StrongSwanのipsec.conf設定の「leftsubnet」でSplit Tunneling経路情報を指定し、「rightdns」でDNSを指定した状態で接続してみる。iPhoneでの確認が困難なのでmacOSX SierraのVPNアプリで確認した。
--- /etc/ipsec.conf
leftsubnet=192.168.0.0/20,2409:10:XXXX:YY00::/56,2404:1a8::/32
rightsourceip=192.168.13.0/24,2409:10:XXXX:YY20::13:0/120
rightdns=192.168.12.1,2409:10:XXXX:YY20::12:1
---
iPhone6Sのテザリングでインターネットへ接続「scutil --dns」で設定されるDNS情報を確認

IKEv2 VPNでStrongSwanに接続直後のDNS情報には、「rightdns」設定値が確認できる

「leftsubnet」で通知されたIPv4経路情報も設定されている。

IPv6経路情報も設定されている。

「nslookup」でインターネット上の「www11.plala.or.jp」の名前解決ができているがイントラネット内の「ds216j.familyname」の名前解決ができない。「ping」アプリのリゾルバーも名前解決できない。

IPアドレスで各ホストに接続できるか確認する。経路が確保されIPv4もIPv6も問題なく到達可能である。

インターネットからアクセスできるFQDN(DDNS)へブラウザでアクセスしてみるとVPN経由でIPv6接続する。

イントラネット内のDNSを指定して「nslookup」でイントラネット内のFQDN名前解決を確認。

イントラネット内のDNSアドレスが通知されているのにイントラネット内のDNSを使用してくれない。。。
iOSの「Split DNS」について下記の記述があった。
iOS 10.3.1以降、IKEv2「Configuration Payload」の「INTERNAL_DNS_DOMAIN」attributeが「INTERNAL_IP4_DNS」と「INTERNAL_IP6_DNS」と共にサポートされている。

「rightdns」が「INTERNAL_IP4_DNS「INTERNAL_IP6_DNS」で通知されているようなので、「INTERNAL_DNS_DOMAIN」に「familyname」と「felts-east.jp」を設定し通知させてみる。「INTERNAL_DNS_DOMAIN」のattrを確認すると「IKEv2 Configuration Payload Attribute Types」から「Value = 25」である事が判る。strongswan.confに設定して確認してみた。
--- /etc/strongswan.conf ---
# strongswan.conf - strongSwan configuration file
#
# Refer to the strongswan.conf(5) manpage for details
#
# Configuration changes should be made in the included files
charon {
load_modular = yes
plugins {
include strongswan.d/charon/*.conf
attr {
25 = familyname,flets-east.jp
}
}
}
include strongswan.d/*.conf
--------
iPhone6S(iOS 12.1.3)からVPNアプリ設定で接続した時のログ
接続時に「INTERNAL_DNS_DOMAIN(25)」が要求され、「strongswan.conf」に設定された「familyname」と「flets-eas.jp」の二つのドメインと思われる設定が「CPRQ」で「Traffic Selector」と共にiPhone6Sに送出されている。
----- connection log ---
Fri Feb 1 11:03:11 2019 daemon.info : 14[NET] received packet: from 2001:240:2412:fd46:65c8:6357:a02:c623[500] to 2409:10:XXXX:YY20::12:1[500] (604 bytes)
Fri Feb 1 11:03:14 2019 daemon.info : 15[ENC] parsed IKE_AUTH request 1 [ IDi N(INIT_CONTACT) N(MOBIKE_SUP) IDr CPRQ(ADDR DHCP DNS MASK ADDR6 DHCP6 DNS6 (25)) N(ESP_TFC_PAD_N) N(NON_FIRST_FRAG) SA TSi TSr ]
Fri Feb 1 11:03:14 2019 daemon.info : 15[IKE] processing INTERNAL_IP4_ADDRESS attribute
Fri Feb 1 11:03:14 2019 daemon.info : 15[IKE] processing INTERNAL_IP4_DHCP attribute
Fri Feb 1 11:03:14 2019 daemon.info : 15[IKE] processing INTERNAL_IP4_DNS attribute
Fri Feb 1 11:03:14 2019 daemon.info : 15[IKE] processing INTERNAL_IP4_NETMASK attribute
Fri Feb 1 11:03:14 2019 daemon.info : 15[IKE] processing INTERNAL_IP6_ADDRESS attribute
Fri Feb 1 11:03:14 2019 daemon.info : 15[IKE] processing INTERNAL_IP6_DHCP attribute
Fri Feb 1 11:03:14 2019 daemon.info : 15[IKE] processing INTERNAL_IP6_DNS attribute
Fri Feb 1 11:03:14 2019 daemon.info : 15[IKE] processing (25) attribute
Fri Feb 1 11:03:14 2019 daemon.info : 06[IKE] peer requested virtual IP %any
Fri Feb 1 11:03:14 2019 daemon.info : 06[IKE] assigning virtual IP 192.168.13.1 to peer
Fri Feb 1 11:03:14 2019 daemon.info : 06[IKE] peer requested virtual IP %any6
Fri Feb 1 11:03:14 2019 daemon.info : 06[IKE] assigning virtual IP 2409:10:XXXX:YY20::13:1 to peer
Fri Feb 1 11:03:14 2019 daemon.info : 06[IKE] building (25) attribute
Fri Feb 1 11:03:14 2019 daemon.info : 06[IKE] building (25) attribute
Fri Feb 1 11:03:14 2019 daemon.info : 06[IKE] building INTERNAL_IP4_DNS attribute
Fri Feb 1 11:03:14 2019 daemon.info : 06[IKE] building INTERNAL_IP6_DNS attribute
Fri Feb 1 11:03:14 2019 authpriv.info : 06[IKE] CHILD_SA eap-id-passwd{1} established with SPIs c6aad862_i 005bbe4e_o and TS 192.168.0.0/20 2404:1a8::/32 2409:10:XXXX:YY00::/56 === 192.168.13.1/32 2409:10:XXXX:YY20::13:1/128
Fri Feb 1 11:03:14 2019 daemon.info : 06[ENC] generating IKE_AUTH response 5 [ AUTH CPRP(ADDR ADDR6 (25) (25) DNS DNS6) SA TSi TSr N(AUTH_LFT) N(MOBIKE_SUP) N(ADD_4_ADDR) N(ADD_4_ADDR) N(ADD_4_ADDR) N(ADD_6_ADDR) N(ADD_6_ADDR) ]
--------
iPhone6Sでテザリング接続したmacOSXでIKEv2 VPN接続後の「scutile --dns」の結果、「INTERNAL_DNS_DOMAIN」に設定したドメインを確認できる。


「nslookup」でFQDN「ds216j.familyname」の名前解決が出来ない。DNSアドレスを指定すると「A」「AAAA」共に名前解決できる。「ping」アプリからは、名前解決ができる。

IPv6テストで確認するとIPv4/IPv6共にIIJ経由で接続される。

イントラネット内の「ds216j.familyname」へhttp接続する。IKEv2 VPN経由で接続。

「ds216j.familyname」のIPv4アドレスを指定してhttp接続。

インターネット上のDDNSに登録したIPv6専用httpサーバに接続してみる。IKEv2 VPN経由で接続。

「ぷらら」のPPPoE接続のIPv4アドレスで公開したhttpサーバにインターネット経由で接続。

IPv6/IPv4対応のhttpサーバにインターネット経由でIPv6接続。

iPhone(iOS 12.1.3)でも確認してみた。

IPv6テストで確認するとIPv4/IPv6共にIIJ経由で接続

イントラネット内の「ds216j.familyname」へhttp接続。IPv4アドレスを指定してhttp接続。


インターネット上のDDNSに登録したIPv6専用httpサーバ「mydns.jp」に接続してみる。IKEv2 VPN経由で接続。「ぷらら」のPPPoE接続のIPv4アドレスで公開したhttpサーバ「netvolante.jp」インターネット経由で接続。


IPv6/IPv4対応のhttpサーバにインターネット経由でIPv6接続。

ひかり電話ゲートウェイ(イントラネット内)にhttp接続。イントラネット内の「Home to Vehicle」サーバにhttp接続。


NGNのサービス情報サイトへhttp接続

インターネット上のhttpサーバへ接続

iOS(12.1.3)/ macOSX(10.12.6)のVPN設定アプリからでも「Split Tunneling」「Split DNS」が「構成プロファイル設定」と同様に利用できそうである。