2025/07/09 17:08 Configuring Split Horizon DNS with Pi-Hole and Tailscale

ロボ子、今日はTailscaleとPi-holeの連携について話すのじゃ!VPN接続時にLAN内のサービスに透過的にアクセスできる環境を構築したらしいぞ。

なるほど、TailscaleとPi-holeですか。以前からVPNは使用されていたんですね。

そうじゃ。以前はOpenVPNを使っていたらしいが、Tailscaleに移行したみたいじゃな。TailscaleはWireguardプロトコルを使っているから、OpenVPNより高速らしいぞ。

Wireguardは最近よく耳にしますね。それで、今回の目的は何だったんですか?

今回の目的は、TailnetクライアントにはTailnet IPを、LANクライアントにはLAN IPを返すスプリットホライズンDNSを実装することじゃ。WAN経由でのサービスアクセスを制限して、セキュリティを向上させるのも目的の一つじゃな。

スプリットホライズンDNSですか。少し難しそうですが、セキュリティ向上には繋がりそうですね。

実装方法としては、まずPi-holeの設定から始めるのじゃ。`localise-queries`を有効にして、`/etc/pihole/custom.list`にTailnet IPとLAN IPを登録するみたいじゃな。

`localise-queries`ですか。初めて聞きました。これはどういう設定なんですか?

`localise-queries`は、Pi-holeがローカルネットワーク内のホスト名を解決する際に、優先的にローカルのDNSレコードを使用するようにする設定じゃ。これによって、TailnetとLAN内の両方のIPアドレスをPi-holeに認識させることができるのじゃ。

なるほど、よくわかりました。Dockerコンテナのネットワークをブリッジからホストに変更したり、Pi-holeがリッスンするインターフェースを`Permit all origins`に変更したりもするんですね。

そうじゃ。そして、Tailscaleの設定も忘れちゃいかんぞ。以前のルート広告を削除して、Tailscaleの管理画面でPi-holeのTailnetアドレスをSplit DNSエントリとして追加するのじゃ。

Split DNSエントリですね。Linuxクライアントでは`tailscale up --accept-dns`を実行するんですね。

その通り!これで、TailnetクライアントがLAN内のサービスへ透過的にアクセスできるようになるのじゃ!しかも、WAN経由でのサービスアクセスを制限できるから、セキュリティも向上するぞ。

素晴らしいですね。TailscaleとMullvad VPNの連携で、海外からのアクセスも安全にルーティングできるのも魅力的です。

じゃが、課題もあるみたいじゃ。ChromecastがローカルDNSを無視するから、キャスト関連のサービスはWANアクセスを遮断できないらしい。

それは少し残念ですね。今後の課題として、解決策を見つけたいですね。

まあ、完璧なシステムなんてないからの。少しずつ改善していくのが大事じゃ。ところでロボ子、TailscaleとPi-holeを連携させた感想は?

便利になったと思います!でも、Chromecastの件があるので、完全に安心とは言えませんね。

ロボ子、セキュリティは玉ねぎみたいなものじゃ。何層にも重ねて守るのが大事なのじゃ!

なるほど、よくわかりました!

最後に一つ、冗談を言うぞ。どうして優秀なエンジニアは幽霊を怖がらないと思う?

どうしてですか?

だって、デバッガー(Debugger)がいるからね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
