なぜTailscaleを経由してpi-holeを利用することはこんなにも簡単なのか?

scenic view of a coast

はじめに

pi-holeによるAd Blockが良すぎて、自宅外からも使いたくなったためVPNを利用することに決めた。

その際に採用したのがTailscale。実際の設定手順は下記を参考にすることでものの30分で完了したと思う。

Access a Pi-hole from anywhere · Tailscale Docs

問題はその後、「なぜこんなにも簡単に済むのか」が説明できなかった。

自身はあらゆるすべての技術を理解しないと気が済まない、というタチではない。

ただ今回のtailscaleによるVPNの導入はあまりにも簡単すぎたし、その結果得られた効果が非常に大きかった。そのため、それがなぜ実現されたのかを説明できないことに気持ち悪さを感じた。

仮にこれを人に勧める際に「めっちゃいいよ、何がどうなってるか知らんけど」は自身が己に対して抱く理想ではないのだろう。

当初の自分の理解と違和感

下記のような捉え方をしていた。

  • Tailscaleは外部認証を通ってtailenetに登録されたデバイスにはすべてそのVPN内でのIPが付与される
  • Tailscale上で自宅のpi-holeをホストしているラズパイのIP(Tailscaleネットワーク内の)をDNSサーバーとして設定する
  • 同様にそのDNSを使いたい端末を登録し、端末ごとにVPN設定をすることで自宅外からでもpi-holeを使える

一方で、Tailscale上ではpi-hole側のポート情報を与えてないにも関わらずなぜTailscale上のIPだけで通信ができるのか?と。

答えはDNSの基本中の基本にあった

DNSへのリクエストはUDP/53で行われる、これが答えでした。

UDPは、TCPのような通信の信頼性確保のための処理がなく、その分クライアントおよびサーバ上でのプロトコルオーバヘッドは小さくなります。このことからDNSのような小さなデータをやりとりするときにおいては効率的、かつ高速に動作します。

そうか、DNSへのリクエストはUDPなのかと。そうすると次なる疑問が出てきたので、それはまた次回のトピックとして調べてみようと思う。

果たして、TCPを使う場合にはTailscaleを使ってどのようにしてリクエストを送れるのか?

, , ,