SoftEther VPN Serverで構築したVPN環境でiPhoneからのAirPlayができずいろいろ調べていたのですが、やっと理由が分かりました。
また、nasneの登録ができない理由も分かりました。
AirPlay
Apple製品で使われている画像や動画や音楽を対応機器に配信する仕組みです。
Apple TVを使えばiPhoneで見ているものやiPhoneの画面を大画面テレビで見れるので非常に便利です。
同一ネットワーク上にある機器同士なら問題無いのですが、サブネットを超えると使えなくなります。
しかし、VPNで同じネットワーク上に接続すれば問題無く使えると思えるのですが、実際には使えませんでした。
AirPlayのプロトコル
AirPlayでは2つのプロトコルが使われています。
まず、AirPlay対応機器の検索はBonjourサービスで行われます。Bonjourでの検索はマルチキャストDNS(mDNS)を使うため5353/udpが使用されます。
対応機器が見つかったらその機器とのデータ転送にはHTTPが使用されます。HTTPは80/tcpで一般的なWebサイトの表示に使われるため殆どのサービスは通過することができます。
これらの使用されるポートについてはこちらに記載されています。
Bonjour/mDNS
問題はAirPlay対応機器の検索に使われるmDNSです。5353/udpならIPが伝送できるレイヤー3 VPNでも使えると思っていたのですが、mDNSはレイヤー2での通信が必要とのことです。
SoftEther VPN ServerとiOS機器との接続はL2TPを使います。L2TPとは名前の通りレイヤー2トランスファープロトコルでレイヤー2を伝送できるのですが、暗号化されていないため通常は暗号化の仕組みと組み合わせて使用されます。
iOSではIPsecと組み合わせてL2TP/IPsecで使用されます。IPsecはIPパケット(レイヤー3)を暗号化する仕組みですのでL2TP/IPsecでVPNを構築するとレイヤー3 VPNとなってしまうようです。ただ、L2TPv3/IPsecではレイヤー2 VPNの構築が可能とのことでIPsecの問題ではないのかもしれません。
このあたりの詳細は、こちらの論文に記されています。
- コンピュータソフトウェア、Vol.32、No.4(2015)
- SoftEther VPN Server:マルチプロトコル対応のクロスプラットフォームなオープンソースVPNサーバ(登 大遊、新城 靖、佐藤 聡、2014/10/29)
要点を引用すると論文の5ページにはこうあります。
レイヤ2 VPNプロトコルには、レイヤ3 VPNプロトコルにはないいくつかの利点がある。・・・中略・・・最後に、レイヤ2 VPNにおいては、マルチキャストおよびブロードキャストベースのプロトコルをそのまま利用することができる。例えば、Multicast DNS(mDNS)プロトコルを用いてマルチキャスト対応のサービスを検索したり、・・・中略・・・することができる。
また、論文の6ページにこのような表が掲載されています。
この表から分かることはiOSがネイティブに対応しているVPNはすべてレイヤー3 VPNでありレイヤー2 VPNに対応させるにはサードパーティのVPN製品が必要であるということです。
iOS単体でのレイヤー2 VPNは現状では不可能
結局、iOSでのレイヤー2 VPNが可能かどうかですが、検索してみるとやたらとCISCOという単語が含まれたページが出てきます。CISCOのルーターを使えばできるとしても到底買えませんので除外します。
更に検索するとOpenVPNのFAQにこのような記述がありました。
Q: Why doesn't the app support tap-style tunnels?
A: The iOS VPN API supports only tun-style tunnels at the moment. This is a limitation of the iOS platform. If you try to connect a profile that uses a tap-based tunnel, you will get an error that only layer 3 tunnels are currently supported.
tap-style tunnelsはレイヤー2 VPN、tun-style tunnelsはレイヤー3 VPNを意味するそうです。
要はiOSのVPN APIの制限でレイヤー2 VPNは実装できないということです。このFAQは2016/10/11に更新されていますのでiOS 10でもサポートされていないことになります。
PCのL2 VPNを経由させる方法
iOS機器単体では無理ならPC上で動作するSoftEther VPNのブリッジ接続(レイヤー2 VPN)を経由してならどうかと試してみました。
実家と自宅をSoftEther VPNのブリッジ接続で接続した仮想HUBに無線LANブリッジをローカルブリッジで接続し、その無線LANブリッジにiOS機器から接続します。
簡単に言えば実家のネットワークが目の前までケーブルが伸びており、そこに無線LANアクセスポイントを設置したのと同じことです。
iOS機器は実家のネットワークにレイヤー2接続されていることになり、実家のApple TVがAirPlayのリストに表示されました。
したがって、AtrPlayに関してはレイヤー2 VPNを構築さえできれば問題無く使えることが分かりました。
nasneの登録
nasneもL2TP接続では支障があるのですがAirPlayとは違うようです。
nasneはSSDPというプロトコルを使用しています。
239.255.255.250という固定アドレスの1900/udpにパケット送ることで機器の検索と提供可能な機能を知ることができます。
torne mobileを使うとL2TP接続のVPNでもnasneを見つけることはできるのですが機器登録ができません。
L2TP接続がレイヤー3 VPNのためだと思い、上記のSoftEther VPNのブリッジ接続を利用したレイヤー2 VPNで試したのですが、やはり登録ができませんでした。
調べてみるとこちらに原因と思われることが記載されていました。
- それでもDLNAをロケーションフリー化する方法 part2(セカンドベストはなんだ?)
DTCP-IPの規定でRTTが7msec以下という制限があるとのことです。
iOS機器からnasneにpingを飛ばすと速くても30msecでした。
自宅も実家も都内でフレッツNEXTなので7msec以内にすることは不可能と思われます。
まとめ
とりあえず、レイヤー3 VPNではAirPlayの機器検索はできないということは分かりました。
nasneのクライアント機器登録もRTTが7msc以下という制限からレイヤー2 VPNでも無理です。
SoftEther VPN Serverはレイヤー2 VPNを構築可能なのですがiOS用のクライアントアプリがリリースされていません。理由はiOSのVPN APIがレイヤー3 VPNにしか対応していないためL2TP/IPsecでの接続で十分と判断したためでしょう。
VPN APIがレイヤー2 VPNをサポートすればSoftEther VPN ClientのiOS版をリリースする可能性もあります。しかしVPN APIでレイヤー2 VPNをサポートするとCISCOの商売を邪魔することになるのでAppleはやらないでしょう。
なお、AirPlay機器検索はできませんがレイヤー3 VPNでもAirPlayの表示はできます。これについてはSoftEther VPNによる家族間ネットワーク接続の記事で説明します。
コメント
貴重な記事ありがとうございまず。
VPN経由でitunesのホームシェアリングを利用したくてこちらのページに辿り着きました。
そしてiOS単体では無理、、mDNSがL3-VPNを通過しない為に原理上実現できないことがよく分かりました。
ありがとうございます。
コメントを頂きありがとうございます。
お役に立ったようでよかったです。
L2-VPNはいろいろと便利なので使いたいのですが、現状はiOSの制限でどうにもなりません。
IPv6でのVPNが実現できれば別の道も開けそうなのですが、なかなか情報が見つからずこちらも実現できていません。