Geecul

Geekに踊ってカルチャーと寝る

Coludflare Warpを使って1.1.1.1にtracertすると何故ワンホップなのか考えてみた

調べる経緯

WarpをONにした状態で8.8.8.8と1.1.1.1へtracertコマンドを打鍵すると、1.1.1.1に対するホップ数がワンホップとなる。

※ちなみにWarpを使わず1.1.1.1にtracertをするとワンホップにはならない。

 

以下の図がWarpをONにした状態で8.8.8.8と1.1.1.1に対してtracert打鍵した結果だ。

(tracertの途中経路とローカルのフォルダ名はグレーで網掛けしている。)

Warpを有効にして8.8.8.8と1.1.1.1にtracertを打鍵してみた図

Warpを使っているからワンホップというのはなんかおかしいということは分かる。

インターネットは色々なネットワークが接続して構成されているものであるため、同じネットワークに所属していない限りワンホップとはならないはずだからだ。

 

だが、何故このような違いが起きているのかということを(具体的には何故ワンホップなのか)を自分でちゃんと説明できないなと思った。

そのため、一つずつ要素を確認しながら理解・説明できるようになりたいというのがこのブログ記事の主旨である。

 

Warpとは

Warpは、CDNやDNSサービスを提供するCloudflare社により提供されるアプリで、VPNサービスの一部を提供する。

VPNサービスと言っても、従来のVPNサービスと異なり通信の匿名化というよりも、プライバシーやパフォーマンスに力点を置いたものとなっている。

また、内部の技術としてはWireGuardという、UDPを用いたモダンなVPN用プロトコルによってVPNトンネルを構築している。

 

tracertコマンドとは

コマンドの引数として指定した目的地での間に、どのルータを経由しているのかを知ることができるコマンドである。

以下の図ように、IPパケットのTTL値を設定してパケットを送信し、ルータにたどり着く度にカウントを1減らす。

TTLが0になると、パケットの破棄通知が行われる。

この破棄通知によってカウントが0になった先のルータの情報が手に入る。

これをコマンドの引数として指定した目的地に到達するまで、TTLに設定する初期値を増やしながら行う。

そうすることで、目的地までにどのようなルータがいるかを知ることができるというわけだ。

tracertの動きを説明した図

TTLとは

IPパケットに設定される値で、最大転送回数を表す。

ネットワーク上でパケットが永遠にループしないように設定されている。

ルータなどの機器を経由するごとに値が1減少する。

 

IPアドレス「8.8.8.8」「1.1.1.1」とは

どちらも誰でも使用できるパブリックDNSサーバと呼ばれるもので、

「8.8.8.8」はGoogleが提供しており、「1.1.1.1」はCloudflare社が提供している。

 

事象の整理

以上を踏まえて、今回何故1.1.1.1に接続した際にワンホップだったのかを整理したい。

以下の図を見てほしい。

Warp(WireGuard)を使用して1.1.1.1に接続した時にtracertのTTLを整理した図


まず、送信元にてtracertコマンドが打鍵される。

すると、WarpのWireGuardによってtracertコマンドのTTLを含むパケットがカプセル化される(このTTLを内部TTLと呼ぶことにする。)。

そしてカプセル化パケットが目的地のネットワークに運ばれ、カプセル化が解除される。

カプセル化が解除されると、出てくるのは内部TTLを含むパケットだ。

すなわち、内部TTLのカウントは目的地のネットワークから開始される。

Warpを使用している場合、VPNの終端は1.1.1.1と同じネットワークに属するCloudflareのVPNサーバとなる。

そのためtracertを1.1.1.1に向けて打鍵するとホップ数がワンホップになり、8.8.8.8 の場合はCloudflareのVPNサーバ以降も複数のネットワークを経由しなければならなかったため、ホップ数が複数になったと理解できる。

図の補足
  • カプセル化されたパケット自体もTTL値は持っている(外部TTL)ので、TTL値がカウントされる。
  • 図にはないが、帰りのパケットもWireGurdによってカプセル化され、外部TTLがカウントされつつも、内部のTTLは減らない

 

まとめ

各要素から、何故Warpを使用して1.1.1.1にtracertを打鍵するとワンホップになるのかを考えてみた。

結論として、tracertによって設定されたTTLを含むパケットが、Warpによってカプセル化されて、1.1.1.1のCloudflareのネットワークまで届くためである。

と考えることができた。

 

最後に

色々調べて整理したものの、実際にCluoudflareのネットワークがどうなっているのか、Warpのアプリどうなっているかは分からないので、各要素と外から見た感じから考えるとこうだよね、という整理をした。

そのため実は間違っているということもあるかもしれない。

その場合は是非、「ここはこうだよ」等指摘して頂けると助かる。

 

参考

1.1.1.1

blog.cloudflare.com

blog.cloudflare.com

blog.cloudflare.com

www.wireguard.com

www.infraexpert.com

tonetsutomu.com

www.nic.ad.jp

internet.watch.impress.co.jp

e-words.jp