Googleが開発してるらしい QUIC as a VPN (QBone)について (2020年更新)


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コネクション上でトンネリングさせていそうなことがわかる。

qbone_client_session.cc
void QboneClientSession::ProcessPacketFromNetwork(QuicStringPiece packet) {
  SendPacketToPeer(packet);
}
void QboneClientSession::ProcessPacketFromPeer(QuicStringPiece packet) {
  writer_->WritePacketToNetwork(packet.data(), packet.size());
}
qbone_server_session.cc
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以上のトラフィックを処理しているとのこと。