ドメインフロンティングについてのメモ。
ドメインフロンティングとは
TLSのSNI (Server Name Indication) ヘッダーで指定したドメイン (フロントドメイン)を介して別のドメインへ通信する仕組み。主にCDN (Contents Delivery Network)で利用される技術。
例えばTLSのSNIヘッダーにabc.hoge.com
というドメイン名を、HTTPのHostヘッダーにxyz.hoge.com
というドメイン名を指定して通信を行ったとする。もし2つのドメインが同一のCDNにホストされていた場合、abc.hoge.com
に送られたTLS通信を復号して、その中に含まれているHTTP Hostヘッダーからxyz.hoge.com
というドメインを読み出し、xyz.hoge.com
へ通信をリダイレクトすることが出来る。
xyz.hoge.com
のドメイン名はTLSによって暗号化されているので、ネットワーク・キャプチャ上はabc.hoge.com
とTLS通信しているようにしか見えない。
以下、簡単な検証。
curl -s -i https://www.google.com/ -H "Host: www.youtube.com" | grep -o '<title>.*</title>'
上記のcurlコマンドはwww.google.com
を介してwww.youtube.com
と通信する。(Wikiのコードをcurlに置き換えただけ)
以下はコマンドの実行結果。

www.youtube.com
と通信できたことがわかる。以下は通信のキャプチャ。

Client HelloパケットのSNIヘッダーはwww.google.com
となっている。

サーバーから送られたTLS証明書も
www.google.com
のもの。
YouTubeというキーワードでパケットを検索しても何もヒットしない。(YouTubeへの通信はTLSで暗号化されているため)

参考
https://youtu.be/5gwEMocFkc0 (35:22から)