QUIC as a VPN (QBone)について
(落ちの無い話です)
[追記]
IETF107 (2020/03/25)において、Googleでの利用例が共有されました。それについて、記事最後に追記しました。
QUIC as a VPN (QBone)
公式な情報はまだないが、GoogleがQUICコネクションをVPNとして利用する「QUIC as a VPN (QBone)」なるものを作ってるのは窺い知ることができる。
2017年6月に、GoogleでQUICの開発に携わっているIan Swett氏より「QUIC Messages」という提案書が出ている。この提案書の、提案背景の章で「QUIC as a VPN (QBone)」は登場する。
Today, most production QUIC traffic is HTTP. However, developers are actively working on running WebRTC over QUIC (aka Quartc) and using QUIC as a VPN(aka QBone) and there is a large amount of external interest in DNS over QUIC.
しかし、その詳細について語られることはなく月日は過ぎ去るのである。
(「QUIC Messages」の解説は「QUICの信頼性のないデータグラム拡張(MESSAGEフレーム/Datagramフレーム)」参照)
The MASQUE Protocol
話は少々それるが、2019年2月にはGoogleのDavid Schinazi氏より「The MASQUE Protocol」という、提案仕様が出ている。
詳細は「HTTP/3で接続してVPNとして使うMASQUEプロトコルの提案仕様」こちらの通りであり、IETFで目下議論中である。
Google quiche
GoogleのサーバやChromiumで利用されているHTTP/2, QUIC実装ライブラリの「quiche」
この中に、2019年8月に qbone というディレクトリが登場した(コミット)。そう、「QUIC as a VPN (QBone)」である。
ALPN識別子として qbone
を使うため、MASQUEとは異なるプロトコルであることがわかる (ユースケースがそもそも違いそう)。
ソースコードを眺めると、VPN的に、来たデータ(ICMP, UDP, TCPパケット)をQUICコネクション上でトンネリングさせていそうなことがわかる。
void QboneClientSession::ProcessPacketFromNetwork(QuicStringPiece packet) {
SendPacketToPeer(packet);
}
void QboneClientSession::ProcessPacketFromPeer(QuicStringPiece packet) {
writer_->WritePacketToNetwork(packet.data(), packet.size());
}
void QboneServerSession::ProcessPacketFromNetwork(QuicStringPiece packet) {
string buffer = string(packet);
processor_.ProcessPacket(&buffer,
QbonePacketProcessor::Direction::FROM_NETWORK);
}
void QboneServerSession::ProcessPacketFromPeer(QuicStringPiece packet) {
string buffer = string(packet);
processor_.ProcessPacket(&buffer,
QbonePacketProcessor::Direction::FROM_CLIENT);
}
まだツールとしては提供されてはいないが、そのうち触れるようになるかもしれない。。。
[追記] Googleでの利用例
IETF107(2020/03/25)の、MASQUE BoFのセッション内において、GoogleでのQBone利用事例について共有がありました。
170国以上に設置されたGoogle Global CacheノードをQBoneでつないでおり、100Gbps以上のトラフィックを処理しているとのこと。