rabbit51

it's since Nov.30 2005
May.29 2014, transferred from broach

Buffalo OpenWrt化WZR-HP-G300NHでIKEv2 VPN over ぷららIPv6 IPoE接続

2019-01-25 18:38:41 | WZR-HP-G300NH
OpenWrt化WZR-HP-G300NHに「StrongSwan」を導入し、「ぷらら IPv6 IPoE」経由でイントラネットに「IPsec IKEv2 VPN 」接続する(ヤマハNVR500のL2TP/IPsecでは、IPv6経由のVPN接続が出来ない)。構成は、下記のように、端末からアクセスし、イントラネット内の仮想端末として接続する。VPNのアドレスは、DDNSを利用し、「vpn.v6.xxxxxxxx.mydns.jp」でIPv6アドレスだけが返されるようにする。イントラネット内の最初のFirewallは、PR-S300SEの「セキュリティ設定」で対応する。OpenWrt化WZR-HP-G300NHで稼働するStrongSwanは、イントラネット内の仮想IPv4ネットワーク「192.168.13.0/24」、IPv6 Prefix「2409:10:XXXX:YY20::/64」内のアドレスを仮想端末に設定させる。


(1)StrongSwanのインストール
OpenWrtサイトの「Documentation」「IPsec」「StrongSwan」「IPsec Basics」でインストールするパッケージが書かれているが、ユーティリティが必要になることも考慮し、「strong swan-full(5.6.3-1)」を使用した。
OpenWrt 18.06.1 / WZR-HP-G300NH
StrongSwan 5.6.3-1
iPhone6S iOS 12.1.3(16D39)
macOSX Sierra 10.12.6
Windows 10 Home ver.1803/OS build 17134.556

(2)DDNS
DDNSは、IPv6 によるWebサーバ公開時にも利用した「Mydns」を使用した。
DNSレコードは、IPv6アドレス
vpn.v6.AAAAAAAA.mydns.jp in aaaa 2409:10:XXXX:YY20::12:1
だけを登録した。定期更新は、OpenWrtのDDNSを使用し、IPv6だけを更新するよう設定した。

(3)PR-S300SEのフィルタ設定
「詳細」「セキュリティ」「IPv6パケットフィルタ設定(IPoE)」で下記の許可設定を加える

IPoE->LAN |any -> 2409:10:XXXX:YY20::12:1/64 |プロトコル50(ESP) |ポート any-> any |許可
IPoE->LAN |any -> 2409:10:XXXX:YY20::12:1/64 |プロトコル51(AH) |ポート any-> any |拒否
IPoE->LAN |any -> 2409:10:XXXX:YY20::12:1/64 |プロトコル UDP |ポート any-> 500 |許可(IKE)
IPoE->LAN |any -> 2409:10:XXXX:YY20::12:1/64 |プロトコル UDP |ポート any-> 4500 |許可(NAT Traversal)

NAT設定が無いので「NAT Traversal」設定不要と考えたが、アクセスが有り許可追加した。
AHプロトコルのアクセスは、検知されていないので拒否設定してある(必要時に許可設定する)。

(4)VPNサーバ証明書
iPhone構成ユーティリティ検証時に作成した「Private Network CA」の発行するサーバ証明書とした(opensslで生成)。
CAのDNは、
C=JP, O=1A72E31E-EA31-4576-AAE6-8C03A00091CD, OU=Root Certificate Authority, CN=Private Network CA

サーバ証明書は、
Subject: C=JP, ST=TOKYO, O=FAMILYNAME, CN=openwrt.familyname
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage: critical
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:OPENWRT.FAMILYNAME, DNS:vpn.v6.AAAAAAAA.mydns.jp

イントラネット内は、「familyname」ドメインで運用しているため、サーバ名のFQDNは、「openwrt.familyname」としている。インターネットからの接続は、DDNS「mydns.jp」で「vpn.v6.AAAAAAAA.mydns.jp」でアクセスされる。
VPNのFQDNは、「SubjectAltName」にDNSタイプで設定しておく(「openwrt.familyname」のFQDNもSAN設定してある)。
OpenWrt化WZR-HP-G300NHのLuCIをssl化する」で使用したサーバ証明書にVPN用のSANを加えたサーバ証明書となる。
サーバ証明書は、「/etc/ipsec.d/certs/」に公開鍵。「/etc/ipsec.d/private/」に秘密鍵を設定。「Private Network CA」の公開鍵を「/etc/ipsec.d/cacerts/」に設定する。

(5)ユーザ証明書
IKEv2 VPN接続認証には、「共有鍵」「Id/Password」あるいは「証明書」による方法がある。「証明書」による認証方式のため「Private Network CA」の発行したユーザ証明書を準備する(opensslで生成)。
ユーザ証明書は、
Subject: C=JP, ST=TOKYO, O=FAMILYNAME, OU=FAMILY, CN=Firstname LASTNAME
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Key Usage: critical
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Extended Key Usage: critical
TLS Web Client Authentication, E-mail Protection, Microsoft Smartcardlogin
X509v3 Subject Alternative Name:
othername:<unsupported>, othername:<unsupported>, email:someone@white.plala.or.jp

---------------------------------
subjectAltName(openssl 設定値)
---------------------------------
otherName:msUPN;UTF8:someone@FAMILYNAME (NTプリンシパル名)
otherName:0.9.2342.19200300.100.1.1;UTF8:someone (ユーザID)
email:someone@white.plala.or.jp (メールアドレス)
---------------------------------
「NTプリンシパル名」は、Microsoft ActiveDirectory認証時に必要。MS Radius経由Activedirecry認証時にも必要。「ユーザID」は、X509属性で定義されている。SmartCard認証やUNIX関連の認証にも有効なため。

(6)/etc/ipsec.confの設定(conn)
IPsecの設定については、「StrongSwan User Documentation」に詳細情報が集約されている。iPhone iOS/macOSXの設定を参考にした。端末側の設定には、1️⃣iOSやOSX設定アプリからの設定、2️⃣プロファイルによる設定、3️⃣ネットワーク拡張に対応したアプリ(CISCO?)からできるらしい。が、色々と試行したが1️⃣は、成功しなかった。イントラネット接続後のsplitDNS(イントラネット内のDNSやNGN内のDNS検索)には、プロファイルによる設定が必要なため、2️⃣で設定することとした。
ipsec.confのleft側パラメータをサーバ(WZR-HP-G300NH)側とし、right側パラメータを端末(iPhone/Mac/Windows)側として設定した。
iOS/OSXでは、IKE接続認証方式をオプション選択できる。「共有鍵方式」「公開鍵方式」「EAP-TLS方式」「EAP Id/Password」が選択できる。「共有鍵方式」以外の(あ)「EAP Id/Password方式」(い)「公開鍵方式」(う)「EAP-TLS方式」について接続確認した。

「/etc/ipsec.conf」の設定で(あ)(い)(う)に共通の設定値は、「conn %default」セクションに設定、(あ)の設定値は、「conn eap-id-passwd」セクションに設定、(い)「公開鍵方式」の設定値は、「conn publiccert」セクションに設定、(う)「EAP-TLS方式」の設定値は、「conn eap-tls」セクションに設定した。(い)(う)のユーザ指定接続許可設定は、「-user-番号」を付加して識別設定した。

(あ)(い)(う)に共通設定
---=== /etc/ipsec.conf ===---
# ipsec.conf - strongSwan IPsec configuration file

# basic configuration
config setup
	# strictcrlpolicy=yes
	# uniqueids = no
	##認証時ログを詳細にする設定を追加
	charondebug="ike 2"

# Add connections here.
conn %default
	keyexchange=ikev2
	##iOS設定アプリは、ikeにDH group2(modp 1024)、OSXには、desが必須との事で追加。Win7にも対応。
	##iOSアプリ設定から接続できなかったのでコメントアウト。
	#ike=aes256-sha256-modp2048,aes256-sha1-modp1024,aes128-sha1-modp1024
	# ,3des-sha1-modp1024
	#esp=aes256-sha256,aes256-sha1,3des-sha1
	##Win10には必要。多分WIN7も(レジストリ設定でも可)
	##HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters
	## \NegotiateDH2048_AES256=(DWORD)1
	ike=aes256-sha1-modp1024,aes128-sha1-modp1024
	esp=aes256-sha1
	auto=add
	left=%any
	leftauth=pubkey
	#イントラネット内のネットワークを定義。
	#IPv4は、192.168.[1,11,12,13].0/24を使用中
	#IPv6は、PR-S300SEがDHCPv6で「2409:10:XXXX:YY00::/56」を得る
	#「2404:1a8::/32」は、NGN内の各種サービス提供されるネットワーク
	leftsubnet=192.168.0.0/20,2409:10:XXXX:YY00::/56,2404:1a8::/32
	#(4)で作成したサーバ証明書(/etc/ipsec.d/certsに配置)
	leftcert=srv-pub.pem
	#(4)で作成したサーバ証明書のSAN(属性:DNS)
	leftid=@vpn.v6.AAAAAAAA.mydns.jp
	#ここから端末側の定義
	right=%any
	#端末接続時に設定されるIPv4とIPv6アドレス範囲
	rightsourceip=192.168.13.0/24,2409:10:XXXX:YY20::13:0/120
	#OpenWrt化WZR-HP-G300NH上のdnsmasqを指定
	rightdns=192.168.12.1,2409:10:XXXX:YY20::12:1
	#---ここまで(あ)(い)(う)で共通


(あ)「EAP Id/Password方式」の設定
#-- EAP Id/Password方式の設定
#-- ipsec.confの共通部分
#-- EAP Id/Password方式の設定
conn eap-id-passwd
	rightauth=eap-mschapv2
	eap_identity=%any

---=== /etc/ipsec.secrets ===---
: RSA srv-key.pem "秘密鍵暗号化パスワード"
user1 : EAP "user1パスワード"
user2 : EAP "user2パスワード"
user3 : EAP "user3パスワード"


(い)「公開鍵方式」の設定
#-- ipsec.confの共通部分
#-- 公開鍵方式の設定

#「rightid」を指定しないとiPhoneで設定された「LocalIdentifier」が「emailかNTprincipal属性」で「user@fqdn」の値であれば全て認証される。特定の証明書とID以外接続許可しないように有意な「rightid」を指定するのが良い。
#conn publiccert
#	rightauth=pubkey

#「someone@white.plala.or.jp」がユーザ証明書のSANでemail属性かNTprincipal属性であれば認証される
conn publiccert-user10
	rightauth=pubkey
	rightid=someone@white.plala.or.jp

#「NTprincipal属性」でも「someone@FAMILYNAME」では、認証されない。「someone@FAMILYNAME.jp」などとすると認証される
conn publiccert-user20
	rightauth=pubkey
	rightid=someone@FAMILYNAME

#「userID属性」で「someone」は認証されない。「userID属性」で「someone@white.plala.or.jp」も認証されない。
conn publiccert-user30
	rightauth=pubkey
	rightid=someone

#端末側LocalIdentifierにDNが設定され、rightidにDNが指定されても、されていなくても認証されない。
#windows10では、DNを指定する必要がある。指定なしでは接続できない。
conn publiccert-user40
	rightauth=pubkey
	rightid="C=JP, ST=TOKYO, O=FAMILYNAME, OU=FAMILY, CN=Firstname LASTNAME"


(う)「EAP-TLS方式」の設定
#-- ipsec.confの共通部分
#-- EAP-TLS方式の設定
#「rightid」を指定しないとiPhoneで設定された「LocalIdentifier」が「emailかNTprincipal属性」で「user@fqdn」の値であれば全て認証される。特定の証明書とID以外接続許可しないように有意な「rightid」を指定するのが良い。端末側のLocalIdentifierがDN指定されている場合、EAP-TLS方式では、「rightid」が指定されていない場合、認証される。「公開鍵方式」と異なる。
#conn eap-tls
#	rightauth=eap-tls
#	eap_identity=%any

#「rightcert」設定は無くても認証される。指定した場合は、DNやSANの一つがrightidに指定されないと設定エラーになる
conn eap-tls-user100
	rightauth=eap-tls
	eap_identity=%any
	rightcert=user100.pem
	rightid=someone@white.plala.or.jp

#公開鍵方式と同様に「NTprincipal属性のsomeone@FAMILYNAME」は認証されない。「someone@FAMILYNAME.jp」であれば認証される。トップドメインだけの場合fqdnとして認められないようだ。。。
conn eap-tls-user200
	rightauth=eap-tls
	eap_identity=%any
	rightid=someone@FAMILYNAME

#userID属性は、認証されない
conn eap-tls-user300
	rightauth=eap-tls
	eap_identity=%any
	rightid=someone

#strongSWAN 5.6.3でDNは認証されない。認証されると書かれたサイトもあるようだがSANにCN値定義されていた。fqdnで無いSANで認証されるか不明
conn eap-tls-user400
	rightauth=eap-tls
	eap_identity=%any
	rightid="C=JP, ST=TOKYO, O=FAMILYNAME, OU=FAMILY, CN=Firstname LASTNAME"

「/etc/ipsec.conf」の設定で共通設定部分を「conn」で定義し、「also=」で組込むと条件により意図しない動作となることがある。ユーザ毎の「conn」設定にマッチしないと共通設定部の「conn」設定とシステムデフォルト定義の内容で接続される事が発生した。
「%default」共通設定と(あ)(い)(う)方式の設定を混在しても適切に接続する。現在3方式で設定をし、クライアント側の方式を選択して接続している。

(7)iOS/macOSX用のプロファイル設定
IKEv2 Configuration Profile for Apple iOS 8 and newer」にプロファイル設定の詳細が記述されている。(あ)(い)(う)に対応するProfile設定の相違点が記載され、それぞれのProfile例が上記()()()に相当する。

iPhone構成ユーティリティのシュミレート」で生成されるプロファイルと同様に、「一般」ペイロードとその「PayloadContents」に「array」で記載される「資格情報(証明書類)」と「VPN」ペイロードを記載する。

一般ペイロード部


<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>PayloadContent</key>
	<array>
	#-- 資格情報 上記(い)(う)に必要 --
	#-- VPN情報 --
	</array>
	<key>PayloadDescription</key>
	<string>IKEv2 IPv6 VPN to the HOME
split DNS(familyname/flets-east.jp)</string>
	<key>PayloadDisplayName</key>
	<string>VPN IKEv2</string>
	<key>PayloadIdentifier</key>
	<string>familyname.openwrt.strongswan.ikev2.vpn-0001</string>
	<key>PayloadOrganization</key>
	<string>strongSWAN-IKE-V2-VPN</string>
	<key>PayloadRemovalDisallowed</key>
	<false/>
	<key>PayloadType</key>
	<string>Configuration</string>
	<key>PayloadUUID</key>
	<string>12345678-9ABC-DEF1-2345-6789ABCDEF12</string>
	<key>PayloadVersion</key>
	<integer>1</integer>
</dict>
</plist>


資格情報部
(5)で生成した「ユーザー証明書」の公開鍵と秘密鍵を「PKCS12」で格納し、base64化したデータ。「iPhone構成ユーティリティーのシュミレート」を参照。(あ)「EAP Id/Password方式」の場合は、設定不要。ユーザー証明書を発行した「Private Network CA」の公開鍵は、別途iPhoneにインストールし信頼させて置く必要がある。

	<dict>
	# PKCS12格納用パスワードを設定するとインストール時にパスワードを入れる必要が無くなる。但し、構成プロファイルの暗号化でパスワードが読み取られるのを防ぐ必要がある。設定しない場合は、インストール時にパスワード入力が求められる。
		<key>Password</key>
		<string></string>
		<key>PayloadCertificateFileName</key>
		<string>FirstnameLastname-SAN-usr-cert.p12</string>
		<key>PayloadContent</key>
		<data>
		MIILHgIBAzCCCuQGCSqGSIb3DQEHAaCCCtUEggrRMIIKzTCCBU8G
		CSqGSIb3DQEHBqCCBUAwggU8AgEAMIIFNQYJKoZIhvcNAQcBMBwG
               ---=== 省略 ===---
		DgMCGgUABBQvuMrxinQH2kD8O1lKQcHMc4s7wQQIZxDh0aNJrB8C
		AggA
		</data>
		<key>PayloadDescription</key>
		<string>PKCS#12 フォーマット証明書</string>
		<key>PayloadDisplayName</key>
		<string>FirstnameLastname-SAN-usr-cert.p12</string>
		<key>PayloadIdentifier</key>
		<string>com.apple.security.pkcs12.12345678-9ABC-DEF1-2345-6789ABCDEF14</string>
		<key>PayloadType</key>
		<string>com.apple.security.pkcs12</string>
		<key>PayloadUUID</key>
		<string>12345678-9ABC-DEF1-2345-6789ABCDEF14</string>
		<key>PayloadVersion</key>
		<integer>1</integer>
	</dict>


VPN情報部
「AuthenticationMethod」,「ExtendedAuthEnabled」,(「AuthName」「AuthPassword」)or「PayloadCertificateUUID」の設定値により(あ)「EAP Id/Password方式」(い)「公開鍵方式」(う)「EAP-TLS方式」となる。(あ)では、「AuthName」「AuthPassword」を設定するが、(い)(う)では、資格情報「PayloadUUID」値の「12345678-9ABC-DEF1-2345-6789ABCDEF14」を「PayloadCertificateUUID」に設定する。「LocalIdentifier」は、証明書内に複数のSANが定義されている場合、特定のSANを指定し、strongSWAN側設定と共に特定のユーザーだけ接続する事を許可する事が出来る。「LocalIdentifier」の指定は、「email」「NTプリンシパル名」は、有効に機能したが、「DN」と「ユーザID」は、機能しなかった。








(あ)Id-Pass(い)Pubkey(う)EAP-TLS
AuthenticationMethodNoneCertificateCertificate
ExtendedAuthEnabledtruefalsetrue
AuthNameuser1X(未設定)X(未設定)
AuthPassworduser1のパスワードX(未設定)X(未設定)
PayloadCertificateUUIDX(未設定)(資格情報PayloadUUID)(資格情報PayloadUUID)
LocalIdentifier-指定指定


	<dict>
		<key>IKEv2</key>
		<dict>
			<key>AuthenticationMethod</key>
			<string>None</string>
			<key>ChildSecurityAssociationParameters</key>
			<dict>
				<key>DiffieHellmanGroup</key>
				<integer>14</integer>
				<key>EncryptionAlgorithm</key>
				<string>AES-256</string>
				<key>IntegrityAlgorithm</key>
				<string>SHA2-256</string>
				<key>LifeTimeInMinutes</key>
				<integer>1440</integer>
			</dict>
			<key>DeadPeerDetectionRate</key>
			<string>Medium</string>
			<key>DisableMOBIKE</key>
			<integer>0</integer>
			<key>DisableRedirect</key>
			<integer>0</integer>
			<key>EnableCertificateRevocationCheck</key>
			<integer>0</integer>
			<key>AuthName</key>
			<string>user1</string>
			<key>AuthPassword</key>
			<string>user1のパスワード</string>
			<key>EnablePFS</key>
			<integer>0</integer>
			<key>ExtendedAuthEnabled</key>
			<true/>
			<key>IKESecurityAssociationParameters</key>
			<dict>
				<key>DiffieHellmanGroup</key>
				<integer>14</integer>
				<key>EncryptionAlgorithm</key>
				<string>AES-256</string>
				<key>IntegrityAlgorithm</key>
				<string>SHA2-256</string>
				<key>LifeTimeInMinutes</key>
				<integer>1440</integer>
			</dict>
			<key>LocalIdentifier</key>
			<string></string>
			<key>RemoteAddress</key>
			<string>vpn.v6.AAAAAAAA.mydns.jp</string>
			<key>RemoteIdentifier</key>
			<string>vpn.v6.AAAAAAAA.mydns.jp</string>
			<key>ServerCertificateCommonName</key>
			<string>Openwrt.familyname</string>
			<key>ServerCertificateIssuerCommonName</key>
			<string>Private Network CA</string>
			<key>UseConfigurationAttributeInternalIPSubnet</key>
			<integer>0</integer>
		</dict>
		#イントラネット宛てIPは、VPN経由。それ以外は、VPNを経由しない設定。
		<key>IPv4</key>
		<dict>
			<key>OverridePrimary</key>
			<integer>0</integer>
		</dict>
		<key>PayloadDescription</key>
		<string>VPN 設定</string>
		<key>PayloadDisplayName</key>
		<string>VPN</string>
		<key>PayloadIdentifier</key>
		<string>com.apple.vpn.managed.12345678-9ABC-DEF1-2345-6789ABCDEF13</string>
		<key>PayloadType</key>
		<string>com.apple.vpn.managed</string>
		<key>PayloadUUID</key>
		<string>12345678-9ABC-DEF1-2345-6789ABCDEF13</string>
		<key>PayloadVersion</key>
		<integer>1</integer>
		#「familyname」と「felts-east.jp」ドメインは、指定のDNSを使用するよう設定。
		<key>DNS</key>
		<dict>
			<key>ServerAddresses</key>
			<array>
				#イントラネット内のDNSサーバを指定する。
				<string>192.168.12.1</string>
				<string>2409:10:XXXX:YY20::12:1</string>
			</array>
			<key>DomainName</key>
			<string>familyname</string>
			<key>SearchDomains</key>
			<array>
				<string>familyname</string>
				<string>flets-east.jp</string>
			</array>
			<key>SupplementalMatchDomains</key>
			<array>
				<string>familyname</string>
				<string>flets-east.jp</string>
			</array>
		</dict>
		<key>Proxies</key>
		<dict>
			<key>HTTPEnable</key>
			<integer>0</integer>
			<key>HTTPSEnable</key>
			<integer>0</integer>
		</dict>
		<key>UserDefinedName</key>
		<string>IKEv2 VPN to the HOME</string>
		#iPhoneのVPN接続アプリで「UserDefinedName」の補足として記述。
		#(あ)「strongSWAN-ID-PASS」、(い)「strongSWAN-publickey」、(う)「strongSWAN-EAP-TLS」
		<key>PayloadOrganization</key>
		<string>strongSWAN-ID-PASS</string>
		<key>VPNType</key>
		<string>IKEv2</string>
	</dict>


(8)Windows10接続設定
Windows端末の設定を参考に、(4)の「Private Network CA」の公開鍵は、「certlm.msc」を起動し、「ローカルコンピュータ」「信頼されたルート証明機関」に「操作」「すべてのタスク」「インポート」で設定した。
(5)のユーザ証明書は、(い)公開鍵方式による接続の場合は、「ローカルコンピュータ」「個人」に「.p12/.pfx」ファイルで秘密鍵と共にインストールした。
(う)EAP-TLS方式では、「certmgr.msc」を起動し、「現在のユーザ」に(4)(5)の証明書をインストールした。
IKEv2接続設定は、「設定」「ネットワークとインターネット」「VPN」から設定した。

(9)iOS/macOSX接続結果
(あ)「Id-Password方式」は、比較的容易にユーザを識別してVPN接続が可能だが、サーバ側とクライアント側に平文のパスワード設定が必要となる。iOS/OSX構成プロファイルを暗号化する必要があると思う。イントラネット接続用と考えると選択し易い。
(い)(う)では、サーバ側の設定により「個別ユーザ」を識別せず、有効な証明書が提示されると接続されてしまう。「/etc/ipsec.conf」のコメントアウト部「conn publiccert」や「conn eap-tls」のような「ユーザを指定しない設定」を避ける必要があると思う。
(う)「EAP TLS方式」では、strongSWANのEAPを使用したため、ユーザ認証設定がよく判らなかった。「/etc/ipsec.conf」の「rightcert」と「rightid」が適正でないとsystemlogにエラーが記録され接続定義が有効にならない。「rightcert」設定が無くても認証される。「/etc/ipsec.secrets」で設定出来れば直感的な気がする。外部RADIUSサーバを使えば、このような判り難さが解消されると思う。家庭内LANへのVPN接続では、「公開鍵方式」でもユーザ指定できるので良いかと思う。

IPv6経由でIKEv2 VPN接続によりstrongSWANからイントラネット内のIPv4(192.168.13.1-254)とIPv6アドレス(2409:10:XXXX:YY20::13:1-254)が設定される。IPv6-testで確認するとAEONモバイル(IIJ)のインターネット経由で接続されている事が判る(iPhoneのOverridePrimary=0設定が機能している)。


イントラネット内のDS-216Jサーバにイントラネット内FQDNでアクセスするとVPN経由でイントラネット内のIPv6で接続される。同じサーバのIPv4アドレスで接続すると接続元のアドレスがstrongSWANのIPv4アドレスとなっている。NATされているようだ。

NATの状況を調べてみると、「OpenWrt」インターフェースの「PlalaV4」マスカレード設定が作用しているようだ。「PlalaV4」IPv4 PPPoE接続が「断」されていても「WAN」が利用されない。「WAN」と「PlalaV4」をブリッジ設定するとNATされないようだ。要調査。

ぷららのIPv4 PPPoE接続側へアクセスするとキャリアからアサインされたIPv4アドレスからインターネット経由で接続された事が判る。MyDNS DDNSに設定したIPv6アドレスで接続するとイントラネットIPv6アドレスでVPN経由接続された事が判る。


NGN側のサービス情報サイトへVPN経由で接続され、速度確認も出来る。


イントラネット内のNVR500の管理画面に接続。

設計通りイントラネット内へのアクセスだけIKEv2 VPNで接続している事が確認出来た。
NVR500のhttpアクセス許可設定の初期値が接続されたnetwork lanになっている。NATされている場合は、問題ないが、IKEv2接続端末に設定される仮想ネットワーク「192.168.13.0/24」が許可されずに接続できない。「NVR500」に「httpd host 192.168.1.0-192.168.1.255 192.168.11.0-192.168.13.255 2409:10:XXXX:YY00::-2409:10:XXXX:YY20:FFFF:FFFF:FFFF:FFFF」を設定し、イントラネット内からの接続を許可した。

macOSX SierraをiPhone6SのWiFiでテザリング接続し、IKEv2接続。


IPv6-testで接続状態を確認


イントラネット内のDNSでDS-216Jサーバにイントラネット内FQDNで接続。イントラネットのIPv6アドレスからの接続を確認。


DS-216JのIPv4アドレスで接続。strongSWANのIPv4アドレスから接続された事が確認出来る(NATされている)。


ぷららのIPv4 PPPoE接続のIPv4インターネット接続。AEONモバイル(IIJ)のIPv4アドレスで接続された事を確認。


インターネットのIPv6/IPv4対応のサーバに接続。AEONモバイルのIPv6アドレスで接続された事を確認。


DS-216JのIPv6アドレスへインターネット経由で接続。イントラネット内のIPv6アドレスから接続された事を確認。

設計通りイントラネット内へのアクセスだけIKEv2 VPNで接続している事が確認出来た。

macOSX Sierra上にParallels Desktop仮想サーバでWindows10 homeを稼働している。Windowsアプリをcoherent機能で稼働させるが、VPN接続されていないため、Windowsアプリからイントラネット内へ接続出来ない。WindowsからもIKEv2 VPN接続を同時に行う必要がある。

(10)Windows10接続結果
Windowsでは、「Windows Clientの接続設定」に従い、「ike=aes256-sha1-modp1024,aes128-sha1-modp1024」と「esp=aes256-sha1」を加えるか、レジストリーに「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters\NegotiateDH2048_AES256=(DWORD)1」を加える必要があった。
(い)公開鍵方式では、証明書を「local machine」に設定する必要があり、そのWindowsにログインするユーザ(admin権限必要)から誰でも使用する事が出来てしまう。(う)EAP-TLSでは、ユーザアカウントに証明書を設定するが「この拡張認証プロトコルで使用できる証明書が見つかりませんでした。」で起動しない。証明書の「Basic constrains」、「Key usage」「Extended Key Usage」の「critical」属性を外したり、「EKU OID=1.3.6.1.4.1.311.10.12.1 (全てのアプリケーションポリシー)」を加えてみたが証明書を見つける事が出来なかった。どうも「別のキースペース」を探しているようだ。。。もしかすると「Windows Home」では使えないという事???
「Windows7 pro」からもEAP-TLSで接続できない。「Windows Home」の問題では無さそう。

IKEv2 VPN接続後、指定されたネットワーク「192.168.0.0/20」、「2409:10:XXXX:YY00::/56」と「2404:1a8::/32」をVPNインターフェース経路へ設定しないためイントラネット内へアクセスできない(strongSWANの仮想ネットワーク「192.168.13.0/24」への経路が設定されるだけのため)。このページの「Bugs & Features」で指摘されたWindows10のVPNアダプタ・プロパティの「ネットワーク」「インターネット プロトコル バージョン4/6」の「プロパティ」「詳細設定」で「リモートネットワークでデフォルトゲートウェイを使う」にチェックを入れ、「iOS/OSXのOverride Primaryを有効にする」のと同じ状態にしてみた。指摘通りIPv4は、有効になったが、IPv6は、有効にならなかった。

証明書(ローカルコンピュータ鍵管理)を使用した接続


EAP-MSCHAPv2によるユーザID/パスワードによる接続


EAP-TLSは、証明書が見つけられない。。。


iPhone6SのWiFiテザリング接続し、AEONモバイル(IIJ)経由でIPv6 IKEv2 VPN接続後のipconfig状態


IPv4経路情報。デフォルトルートがVPNインターフェース側に設定されている。strongSWANで指定したネットワークは、設定されない。


IPv6経路情報。デフォルトルートがVPNインターフェース側に設定されない。インターネット側に向いている。VPNインターフェース側にIPv6デフォルトルートを追加設定すると、イントラネット内へのIPv6接続ができるが、インターネットへの接続ができなくなる。


イントラネット内のFQDN(FAMILYNAMEドメイン)を解決するDNSは、接続時にstrongSWANから指定される(192.168.12.1/2409:10:XXXX:YY20::12:1)。IPv6経路情報にホストルートでゲートウェイがインターネット側のリンク・ローカル・インターフェース生成されている。「nslookup」を行うと名前解決できない。「ping」や「tracert」「http」などのリゾルバーは、イントラネット内のDNSを使用しているようだ(名前解決できる)。不思議?。

「split DNS」として「FAMILYNAME」ドメインと「felts-east.jp」ドメインの検索は、VPN側のDNSが使用されるようにしたいのだが、どうしたら良いのか?
「VpnConnectionTriggerDnsConfiguration」の設定で実現しそうだが、Windows10で機能がオフされているようだ。
イントラネット内のDNSは、イントラネット内ドメインとNGNから指定されたDNSへリンクされているので名前解決に不都合は無い。

Windows10の「split tunneling」を設定する(iOS/OSXのOverRidePrimary=0)。
「インターネット プロトコル バージョン4/6」の「プロパティ」「詳細設定」で「リモートネットワークでデフォルトゲートウェイを使う」のチェックを外す(Windows10からデフォルト設定)
PowerShellのコマンドレッドで接続時に「SplitTunneling」の「経路情報」を設定する
「Split Tunneling」が有効なことを確認する。


必要な経路を設定する(「-PassThru」を付けないと処理結果が表示されない)




設定したルートを確認する

VPN接続すると設定した経路情報がセットされ、「iOS/OSXのOverRidePrimary=0」設定と同じ動作になる。

IKEv2接続後のIPv4経路情報

「192.168.15.255」ブロードキャスト経路は、「192.168.0.0/255.255.240.0」ネットワークのブロードキャストアドレス。

IKEv2接続後のIPv6経路情報


WindowsでもiOS/macOSXと同様にイントラネット内へ接続できるようになった。
「OnDemand」接続設定が出来れば便利そうでだ。要調査。


(11)ぷららIPv6 IPoE経由のIKEv2 VPN接続について
ホテルの無料WiFiから接続を試みたが、IKEv2接続出来なかった。IPv6-testで確認してみるとWiFiのIPv6がサポートされていない。

昨年末のニュースなどでFree WiFiのIPv6対応を推進する事が報道されていた。期待。
同時にメールサーバのIPv6化もお願いしたい。

関連事項
StrongSwan IKEv2 VPN over IPv6 with iOS/macOSX/Win10 (IKE設定)
StrongSwan IKEv2 VPN over IPv6 with Win10 (Split DNS設定)
StrongSwan IKEv2 VPN over IPv6 with iPhone(iOS VPNアプリ設定接続)
StrongSwan IKEv2 VPN接続とINTERNAL_DNS_DOMAIN設定

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« フレッツ光NGNのIPv6(IPoE)... | トップ | StrongSwan IKEv2 VPN over I... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

WZR-HP-G300NH」カテゴリの最新記事