Edited at

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


QUIC as a VPN (QBone)について

(落ちの無い話です)


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);
}

まだツールとしては提供されてはいないが、そのうち触れるようになるかもしれない。。。