ぷららIPv6 IPoE接続後のイントラネット内、NGN経由インターネット、IPv4 over IPv6(Transix DS-Lite)、ぷららIPv4 PPPoE、L2TP/IPsec over IPv4(ヤマハ NVR500)、IKEv2/IPsec over IPv6(StrongSWAN/OpenWrt)の各経路でのMTUを評価確認してみた。
イントラネット内は、 IPv4 MTU=1500bytes / IPv6 MTU=1500bytes
NGNは、IPv4 MTU=1454bytes / IPv6 PPPoE MTU=1454bytes / IPv6 IPoE MTU=1500bytes (IP通信網サービスのインターフェース 第三分冊 第36版)
イントラネット内からインターネットへは、「ぷらら IPv4 over PPPoE」、「Transix DS-Lite IPv4 over IPv6」と「Transix IPv6 IPoE」で、IPv4 over PPPoEのMTU=1454Bytes、IPv4 over IPv6のMTU=1460Bytes、IPv6のMTU=1500Bytes。
IPv4 over PPPoEのフレームは、「Ether(14)+PPPoE(6)+PPP(2)+Payload+FCS(4)」。PPPoEのPayloadは、NTTのコンセントレータから「ぷららISP」へL2TP「Ether(14)+IPv4(20)+UDP(8)+L2TP(16)+PPP(2)+Payload1(1454)+FCS(4)」で転送。結果フレッツひかりネクスト上の IPv4 PPPoEは、Payload=Payload1=MTU=1454Bytesとなる。
IPv4 over IPv6のフレームは、「Ether(14)+IPv6(40)+Payload2(IPv4(20)+Payload3)+FCS(4)」。Payload2=MTU=1460Bytes。
L2TP/IPsec VPN(ヤマハNVR500)は、ぷららIPv4 PPPoE経由となるためPayload部にAES256-CBC/SHA-1(iOS/macOS接続端末)のIPsec ESPをUDP/4500NAT Traversalとして接続する。フレームは、「IPv4(20)+UDP(8)NAT_T+ESP(8)+ESP_IV(16)+Payload4+ESP_Trailer(2+pad(n))+ESP_Auth(12)」。「Payload4+ESP_Trailer(2+pad(n))」は、16の倍数長。Payload4=UDP(8)+L2TP(8)+PPP(4)+Payload5。Payload5=MTU=1354Bytes。(Payload4=int(1454-(20+8+8+16+12)/16) *16-2=1374 / Payload5=1374-(8+8+4)=1354)
IKEv2/IPsec VPN(StrongSWAN)は、IPv6経由でAES256-CBC/SHA256のIPsec ESP。フレームは、「Ether(14)+IPv6(40)+UDP(8)NAT_T+ESP(8)+ESP_IV(16)+Payload6+ESP_Trailer(2+pad(n))+ESP_Auth(16)+FCS(4)」(iOS/macOS)。Windows10では、ESP_Auth(12)。「Payload6+ESP_Trailer(2+pad(n))」は、16の倍数長。Payload6=MTU=1406Bytes。(Payload6(iOS/macOS)=int(1500-(40+8+8+16+16)/16)*16-2=1406 / Payload6(win10)=int(1500-(40+8+8+16+12)/16)*16-2=1406)
以上のMTUを設計値とし、ping/ping6とwiresharkでMTU実測値として纏めた
ping/ping6は、Macbook pro macOS Sierraのターミナルから実施した。macOSのping/ping6は、icmp/icmpv6のデータ長を最低値から最高値まで指定増数で実行する。MTU(ping)=(MSS=(指定長+8))+20 /MTU(ping6)=(MSS=(指定長+8))+40。MTU(ping)=(指定長+8)+20(IPv4ヘッダー) /MTU(ping6)=(指定長+8)+40(IPv6ヘッダー)。
インターネット
(IPv6) sudo ping6 -m -D -G 1454,1450,1 www11.plala.or.jp
NGN NTT東日本
(IPv6) sudo ping6 -m -D -G 1454,1450,1 www1.syutoken-speed.flets-east.jp
イントラネット
(IPv6) sudo ping6 -m -D -G 1454,1450,1 ds216j.familyname
(IPv4) ping -D -G 1474 -g 1470 -h 1 ds216j.familyname
インターネット DS-Lite
(IPv4) ping -D -G 1434 -g 1430 -h 1 www11.plala.or.jp
インターネット ぷららIPv4 over PPPoE
(IPv4) ping -D -G 1428 -g 1424 -h 1 www11.plala.or.jp
Wiresharkでパケットキャプチャ
フレーム構造とプロトコルヘッダーのサイズを確認
IKEv2/IPsec over IPv6
(IPv6) sudo ping6 -m -D -G 1360,1350,1 2409:10:XXXX:YY20::13:1
iPhone(iOS 12.1.4)+Aeon mobile(IIJ/docomo)でVPN接続し、イントラネット内のMacbook pro(macOS Sierra)からiPhoneへping6。StrongSWANの入力インターフェースでキャプチャ。StrongSWANのログからESP鍵を取出し、Wiresharkで復号表示。echo replyが4Bytes多いのは、VLANのヘッダーが含まれるため。
(IPv4) ping -D -G 1380 -g 1370 -h 1 192.168.13.1
L2TP/IPsec over IPv4 over PPPoE
(IPv4) ping -D -G 1328 -g 1228 -h 1 192.168.11.13
iPhone(iOS 12.1.4)+Aeon mobile(IIJ/docomo)でVPN接続し、イントラネット内のMacbook pro(macOS Sierra)からiPhoneへping。ヤマハNVR500の入力インターフェースでキャプチャ。NVR500 のログからESP鍵を取り出し、Wiresharkで復号表示。NVR500のESP鍵サイズ記録の問題で、「AES128-CBC/SHA1」に変更してキャプチャした。現時点の通常設定は、「AES256-CBC/SHA1」。SHA256の設定が可能だが、iPhone(iOS12.1.4)で接続できない。ISAKMP(IKE)では、AES256-CBC/SHA256で鍵交換が出来ているので不思議。。。
確認結果
IKEv2/IPsec接続時に設計値と実測値が異なる。これは、iPhone(iOS 12.1.4)、Macbook pro(macOS Sierra 10.12.6)、Windows10( Ver 1803 Build 17134.619)のIKEv2 VPNアプリがMTU=1400Bytesをdefault値に指定しているため。
L2TP/IPsec接続時に設計値と実測値が異なる。これは、iPhone(iOS 12.1.4)、Macbook pro (macOS Sierra 10.12.6)のL2TP VPNアプリがMTU=1280Bytesをdefault値にしているため。また、ヤマハNVR500のVPN GUI設定でL2TP/IPsec用pp anonymousにmtumru=1258が設定されている(IPsecのpayloadで1280Bytes)。
L2TP/IPsec VPN接続で「PPP IPV6CP」が確立するので、IPv6パケットが利用できるか確認してみた。
OverridePrimary=0:
(IPv6):端末(iPhone)からイントラネット内のIPv6 httpサーバへアクセスするとソースアドレスがキャリアのグローバルアドレスで接続。http応答は、グローバルアドレスへ。結果表示される。が、イントラネット内から端末へはIP到達しない。(2019/03/11)調査中 <---- 2019/9/24追記:そもそもNVR500のL2TP/IPsecは、IPv6に対応していない。NVR700とかRTX830でIPv6対応されているようだ。。。
(IPv4):NVR500のPPP IPCP(DHCPアサイン)で設定される端末IPv4アドレスの所属するネットワーク内だけアクセス可能。それ以外は、キャリアのインターネット経由でアクセス。
OverridePrimary=1:
(IPv6):アクセス出来なくなる。
(IPv4):イントラネット内とインターネットへの接続が可能。イントラネット内の端末と同じ。
------
2019/04/10 追記:
Win10でNVR500 L2TP/IPsec VPNへ接続した時のMTUを確認
イントラネット内は、 IPv4 MTU=1500bytes / IPv6 MTU=1500bytes
NGNは、IPv4 MTU=1454bytes / IPv6 PPPoE MTU=1454bytes / IPv6 IPoE MTU=1500bytes (IP通信網サービスのインターフェース 第三分冊 第36版)
イントラネット内からインターネットへは、「ぷらら IPv4 over PPPoE」、「Transix DS-Lite IPv4 over IPv6」と「Transix IPv6 IPoE」で、IPv4 over PPPoEのMTU=1454Bytes、IPv4 over IPv6のMTU=1460Bytes、IPv6のMTU=1500Bytes。
IPv4 over PPPoEのフレームは、「Ether(14)+PPPoE(6)+PPP(2)+Payload+FCS(4)」。PPPoEのPayloadは、NTTのコンセントレータから「ぷららISP」へL2TP「Ether(14)+IPv4(20)+UDP(8)+L2TP(16)+PPP(2)+Payload1(1454)+FCS(4)」で転送。結果フレッツひかりネクスト上の IPv4 PPPoEは、Payload=Payload1=MTU=1454Bytesとなる。
IPv4 over IPv6のフレームは、「Ether(14)+IPv6(40)+Payload2(IPv4(20)+Payload3)+FCS(4)」。Payload2=MTU=1460Bytes。
L2TP/IPsec VPN(ヤマハNVR500)は、ぷららIPv4 PPPoE経由となるためPayload部にAES256-CBC/SHA-1(iOS/macOS接続端末)のIPsec ESPをUDP/4500NAT Traversalとして接続する。フレームは、「IPv4(20)+UDP(8)NAT_T+ESP(8)+ESP_IV(16)+Payload4+ESP_Trailer(2+pad(n))+ESP_Auth(12)」。「Payload4+ESP_Trailer(2+pad(n))」は、16の倍数長。Payload4=UDP(8)+L2TP(8)+PPP(4)+Payload5。Payload5=MTU=1354Bytes。(Payload4=int(1454-(20+8+8+16+12)/16) *16-2=1374 / Payload5=1374-(8+8+4)=1354)
IKEv2/IPsec VPN(StrongSWAN)は、IPv6経由でAES256-CBC/SHA256のIPsec ESP。フレームは、「Ether(14)+IPv6(40)+UDP(8)NAT_T+ESP(8)+ESP_IV(16)+Payload6+ESP_Trailer(2+pad(n))+ESP_Auth(16)+FCS(4)」(iOS/macOS)。Windows10では、ESP_Auth(12)。「Payload6+ESP_Trailer(2+pad(n))」は、16の倍数長。Payload6=MTU=1406Bytes。(Payload6(iOS/macOS)=int(1500-(40+8+8+16+16)/16)*16-2=1406 / Payload6(win10)=int(1500-(40+8+8+16+12)/16)*16-2=1406)
以上のMTUを設計値とし、ping/ping6とwiresharkでMTU実測値として纏めた
ping/ping6は、Macbook pro macOS Sierraのターミナルから実施した。macOSのping/ping6は、icmp/icmpv6のデータ長を最低値から最高値まで指定増数で実行する。
インターネット
(IPv6) sudo ping6 -m -D -G 1454,1450,1 www11.plala.or.jp
NGN NTT東日本
(IPv6) sudo ping6 -m -D -G 1454,1450,1 www1.syutoken-speed.flets-east.jp
イントラネット
(IPv6) sudo ping6 -m -D -G 1454,1450,1 ds216j.familyname
(IPv4) ping -D -G 1474 -g 1470 -h 1 ds216j.familyname
インターネット DS-Lite
(IPv4) ping -D -G 1434 -g 1430 -h 1 www11.plala.or.jp
インターネット ぷららIPv4 over PPPoE
(IPv4) ping -D -G 1428 -g 1424 -h 1 www11.plala.or.jp
Wiresharkでパケットキャプチャ
フレーム構造とプロトコルヘッダーのサイズを確認
IKEv2/IPsec over IPv6
(IPv6) sudo ping6 -m -D -G 1360,1350,1 2409:10:XXXX:YY20::13:1
iPhone(iOS 12.1.4)+Aeon mobile(IIJ/docomo)でVPN接続し、イントラネット内のMacbook pro(macOS Sierra)からiPhoneへping6。StrongSWANの入力インターフェースでキャプチャ。StrongSWANのログからESP鍵を取出し、Wiresharkで復号表示。echo replyが4Bytes多いのは、VLANのヘッダーが含まれるため。
(IPv4) ping -D -G 1380 -g 1370 -h 1 192.168.13.1
L2TP/IPsec over IPv4 over PPPoE
(IPv4) ping -D -G 1328 -g 1228 -h 1 192.168.11.13
iPhone(iOS 12.1.4)+Aeon mobile(IIJ/docomo)でVPN接続し、イントラネット内のMacbook pro(macOS Sierra)からiPhoneへping。ヤマハNVR500の入力インターフェースでキャプチャ。NVR500 のログからESP鍵を取り出し、Wiresharkで復号表示。NVR500のESP鍵サイズ記録の問題で、「AES128-CBC/SHA1」に変更してキャプチャした。現時点の通常設定は、「AES256-CBC/SHA1」。SHA256の設定が可能だが、iPhone(iOS12.1.4)で接続できない。ISAKMP(IKE)では、AES256-CBC/SHA256で鍵交換が出来ているので不思議。。。
確認結果
IKEv2/IPsec接続時に設計値と実測値が異なる。これは、iPhone(iOS 12.1.4)、Macbook pro(macOS Sierra 10.12.6)、Windows10( Ver 1803 Build 17134.619)のIKEv2 VPNアプリがMTU=1400Bytesをdefault値に指定しているため。
L2TP/IPsec接続時に設計値と実測値が異なる。これは、iPhone(iOS 12.1.4)、Macbook pro (macOS Sierra 10.12.6)のL2TP VPNアプリがMTU=1280Bytesをdefault値にしているため。また、ヤマハNVR500のVPN GUI設定でL2TP/IPsec用pp anonymousにmtu
L2TP/IPsec VPN接続で「PPP IPV6CP」が確立するので、IPv6パケットが利用できるか確認してみた。
OverridePrimary=0:
(IPv6):
(IPv4):NVR500のPPP IPCP(DHCPアサイン)で設定される端末IPv4アドレスの所属するネットワーク内だけアクセス可能。それ以外は、キャリアのインターネット経由でアクセス。
OverridePrimary=1:
(IPv6):アクセス出来なくなる。
(IPv4):イントラネット内とインターネットへの接続が可能。イントラネット内の端末と同じ。
------
2019/04/10 追記:
Win10でNVR500 L2TP/IPsec VPNへ接続した時のMTUを確認