Ubuntu Server 24.04でPi-hole DNS-over-HTTPSを設定する方法

Ubuntu Server 24.04 上の Pi-hole の場合、アップストリーム要求を を経由してルーティングしdnscrypt-proxy、Pi-hole を のローカルリスナーに向けます127.0.0.1#5053。これにより、サーバーと選択したアップストリームリゾルバ間の DNS トラフィックが DNS-over-HTTPS (DoH) で暗号化され、Pi-hole は引き続き LAN クライアントに応答し、ブロックリストを適用します。Pi-hole 自体はデフォルトではアップストリームへの DoH トランスポートを提供しません。暗号化された接続はローカルプロキシによって提供されます。

まず、現在のバージョンに関する重要な点があります。Cloudflare は、cloudflared proxy-dns2026 年 2 月 2 日から始まる新しいリリースからこのコマンドを削除しました。このコマンドをインストールする古いチュートリアルは、現在のcloudflaredリリースでは動作しない可能性があります。以下の手順ではdnscrypt-proxy、Pi-hole の現在の DoH ガイドに従って を使用します。この設定は、Pi-hole とプロキシが同じ Ubuntu ホストで実行されている場合に適しています。Docker またはマルチホスト構成の場合は、リスナーのアドレス指定とファイアウォール ルールを別々にする必要があります。

この設定でできることとできないこと

通常のDNSでは、リゾルバから上位のDNSプロバイダへクエリが送信されますが、トランスポート層は暗号化されません。DoHではDNSリクエストがHTTPSで暗号化されるため、Pi-holeサーバーとリゾルバ間のネットワーク監視者がこれらのリクエストを読み取ったり変更したりすることが難しくなります。ローカルネットワーク上のデバイスに通知されるDNSサーバーはPi-holeのままで、上位のパスのみが変更されます。

DoHは、選択したリゾルバに対してDNSアクティビティを不可視にするものではありません。アップストリームプロバイダは引き続きサーバーからのクエリを受信し、Pi-holeはプライバシーおよびログ設定に応じてクライアントのクエリ履歴を保持する場合があります。また、HTTPSは無関係なWebトラフィックを暗号化しません。特定のリゾルバを使用する場合は、そのリゾルバのプライバシーポリシーを確認し、サポートされているリゾルバリストから該当するDoHエントリを選択してください。

始める前に

  • Ubuntu Server 24.04にPi-holeが既にインストールされ、正常に動作していることを確認してください。この手順では、Pi-holeを新規インストールするのではなく、既存のPi-holeの設定を行います。
  • サーバーに安定したLANアドレスが割り当てられていることを確認してください。アドレスが変更されると、ルーターのDHCPクライアントがDNSサーバーを見失う可能性があります。
  • DNSが一時的に機能しなくなった場合に備え、管理者権限とPi-holeホストに連絡できる手段を確保してください。名前解決に同じPi-holeを使用している接続を介して、リモートでこの変更を行うことは避けてください。
  • ロールバック時に復元できるように、現在のPi-holeのアップストリーム設定を記録しておいてください。

プロキシはポート5053のループバックにのみバインドし、ポート53はPi-hole用に確保します。これにより、Pi-holeのDNSサービスとUbuntuのローカルリゾルバとの競合を回避できます。systemd-resolvedこの設計を実現するためだけに無効化しないでください。プロキシの独立したループバックポートによって、その競合は回避されます。

1. Ubuntuのパッケージリポジトリからdnscrypt-proxyをインストールします。

dnscrypt-proxyプロジェクトでは、Ubuntuパッケージのインストール手順を説明しています。インストールする前に、設定済みのUbuntuリポジトリに該当するパッケージがあることを確認してください。

sudo apt update
apt-cache policy dnscrypt-proxy

出力に候補バージョンが表示された場合は、それをインストールしてください。

sudo apt install dnscrypt-proxy

候補が表示されない場合は、無関係なサードパーティのリポジトリを追加して先に進むことはしないでください。dnscrypt-proxy プロジェクトの公式 Linux ガイドにリンクされているインストール方法を使用し、リリースとアーキテクチャを確認して、そのインストールに合わせてサービス設定を調整してください。以下の systemd ソケットユニットと設定パスは、Pi-hole が文書化した Ubuntu パッケージ設定に適用されます。

2. プロキシリスナーをlocalhostのポート5053に移動します。

Pi-holeは既に標準のDNSポート53を使用しています。プロキシのソケットをTCPとUDPの両方でリッスンするように設定し127.0.0.1:5053、同じホストからのみアクセスできるようにします。systemdドロップインを作成します。

sudo systemctl edit dnscrypt-proxy.socket

エディタに以下の行を入力して保存してください。

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5053
ListenDatagram=127.0.0.1:5053

空の行ListenStream=とListenDatagram=行は、置換アドレスを設定する前にパッケージのデフォルト設定をクリアします。これらを省略しないでください。省略すると、systemd はカスタムリスナーに加えてデフォルトポートを保持してしまう可能性があります。

3. DoHリゾルバーを選択する

パッケージ設定ファイルを開きます。

sudoedit /etc/dnscrypt-proxy/dnscrypt-proxy.toml

systemdソケットを有効化するには、プロキシ設定でリスナーリストを空にします。現在署名されている公開リゾルバリストからリゾルバ名を選択します。たとえば、次の例では標準のCloudflareリゾルバを選択します。Pi-holeガイドでは、cloudflare-securityアップストリームリゾルバでマルウェアフィルタリングが必要な場合の例として、次の例も示されています。

listen_addresses = []
server_names = ['cloudflare']

パッケージのその他の設定はそのままにしておいてください。 に記載されている名前はserver_namesレジストリ識別子であり、任意のホスト名や URL パスではありません。別のプロバイダを使用する場合は、現在のリゾルバエントリが DoH をサポートしていることを確認し、その正確な名前をコピーしてください。マルウェアなどのカテゴリをフィルタリングするリゾルバは、フィルタリングしないリゾルバとは異なる結果を生成する可能性があります。

4. Pi-holeをローカルプロキシに向ける

Pi-holeのアップストリームDNSアドレスをローカルリスナーに設定します。

sudo pihole-FTL --config dns.upstreams '["127.0.0.1#5053"]'

サフィックス#5053は、Pi-hole が非標準 DNS ポートを表すために使用する表記です。Pi-hole 管理画面の[設定] > [DNS]でも確認できます。プリセットのパブリック アップストリームの選択を解除し、カスタム サーバーを127.0.0.1#5053アップストリームとして残してください。パブリック リゾルバを追加のアップストリームとしてチェックしたままにしておくと、クエリが暗号化されたプロキシをバイパスしてしまう可能性があるため、Pi-hole のすべてのアップストリーム クエリで DoH を使用する必要がある場合は、これらのエントリを削除してください。

5. サービスを再起動し、問題が解決したことを確認します。

新しい設定を読み込むために、ソケット、プロキシサービス、およびPi-hole FTLデーモンを再起動してください。

sudo systemctl restart dnscrypt-proxy.socket
sudo systemctl restart dnscrypt-proxy.service
sudo systemctl restart pihole-FTL.service

サービス状況を確認する:

sudo systemctl status dnscrypt-proxy.socket
sudo systemctl status dnscrypt-proxy.service
sudo systemctl status pihole-FTL.service

それぞれがバインドエラーやリゾルバの起動​​失敗なくアクティブになっている必要があります。プロキシをローカルDNSリスナー経由で直接テストしてください。

dig @127.0.0.1 -p 5053 example.com

DNS応答は、ローカルプロキシが応答していることを示します。次に、ポート53でPi-holeをテストしてください。

dig @127.0.0.1 example.com

Pi-holeクエリログまたはダッシュボードを確認して、リクエストがPi-holeに到達したことを確認し、テストが失敗した場合はプロキシのジャーナルを確認してください。

sudo journalctl -u dnscrypt-proxy.service -b --no-pager

追加の確認として、プロキシの起動ログまたはジャーナル出力で、選択されたリゾルバとDoHプロトコルのステータスを確認してください。成功すれdigばDNS解決が機能していることが証明されますが、それだけではリクエストがHTTPSを使用したことを証明するものではありません。

よくある問題と安全な回復

  • 「アドレスが既に使用されています」:別のプロセスが既にポート5053を使用しているか、ソケットオーバーライドがロードされていません。リスナーをで確認しsudo ss -lntup、ドロップインをで確認しsystemctl cat dnscrypt-proxy.socket、空のリセット行が5053エントリの前にあることを確認してください。
  • プロキシは有効ですが、名前解決がタイムアウトします。HTTPS送信アクセス、リゾルバ名、およびプロキシのログを確認してください。一部のネットワークでは、DNS over HTTPS 接続がブロックされたり、TCP ポート 443 が制限されたりする場合があります。
  • プロキシテストは成功しますが、Pi-hole からアップストリームへの応答がありません。Pi -hole が正確に に設定されていることを確認して127.0.0.1#5053から、再起動してくださいpihole-FTL。標準のアップストリームチェックボックスが、意図せず代替ルートを提供していないことを確認してください。
  • 変更後、Ubuntu 自体が名前解決できなくなります。この設定は Pi-hole のアップストリームを変更するものであり、ホストの. を変更するものではありません。トラブルシューティングのショートカットとして、/etc/resolv.confそのファイルを置き換えたり、 を無効にしたりすることは避けてください。systemd-resolved

ロールバックするには、Pi-holeに記録したアップストリームのDNS設定を復元して再起動してくださいpihole-FTL。Pi-holeがプロキシを参照しなくなったら、パッケージマネージャーを使用して無効化または削除できますdnscrypt-proxy。このサーバーがPi-hole経由で自身のDNSも解決している場合は、サービスを変更する前にローカルの復旧パスを用意しておいてください。

どちらのオプションがあなたのネットワークに適していますか?

Pi-hole で集中型 DNS フィルタリングを行い、Pi-hole から選択したリゾルバへのトラフィックを暗号化したい場合は、このシングルホストプロキシ構成を使用してください。プロキシにはローカル アドレスとポートが 1 つしかないため、検査は比較的容易です。Pi-hole を Docker 内、別のサーバー上、または複数のネットワークで実行する場合は、ループバック アドレスではなくコンテナ ネットワーク アドレスが必要になる場合があり、プロキシ リスナーがオープン リゾルバとして公開されないように制限する必要があります。ポリシー ベースのフィルタリング、デバイスごとの ID、または自宅外のローミング デバイス用の暗号化 DNS が必要な場合は、これらのクライアントまたは管理ゲートウェイを個別に構成してください。Pi-hole のアップストリーム DoH 接続では、各クライアントから Pi-hole へのパスは自動的に暗号化されません。

最後に、ルーターやクライアントが別のDNSサーバーをアドバタイズすると、Pi-holeをバイパスできることに注意してください。ネットワーク全体でフィルタリングを行うには、DHCP経由でクライアントにPi-holeのアドレスのみを割り当て、IPv4だけでなくIPv6のDNSアドバタイズも考慮してください。ルーターの設定を変更した後は、複数のデバイスで検証してください。サーバー上でプロキシ設定が正しくても、クライアントが別のリゾルバを直接使用することを防ぐことはできないためです。

公式資料

コメントを残す

Ubuntu Server 24.04でPi-hole DNS-over-HTTPSを設定する方法

Ubuntu Server 24.04でPi-hole DNS-over-HTTPSを設定する方法

Ubuntu Server 24.04 上で Pi-hole を設定し、dnscrypt-proxy を使用して DNS-over-HTTPS を利用するようにしてから、ローカルのアップストリームを確認し、一般的な DNS の競合を回避します。

SSH X11転送経由でYaST GUIが起動しない問題を解決する方法

SSH X11転送経由でYaST GUIが起動しない問題を解決する方法

SSH X11転送経由のYaST GUIの不具合をトラブルシューティングします。DISPLAYをテストし、既知のQt XIOエラーを修正し、SSH設定を確認し、必要に応じてncursesに切り替えます。

ローカルSUSE RMTサーバー(SMT代替)のセットアップ方法

ローカルSUSE RMTサーバー(SMT代替)のセットアップ方法

SLES 15 上に SUSE RMT をセットアップし、SCC メタデータを同期し、選択したリポジトリをミラーリングし、HTTPS 経由でクライアントを登録し、SMT からの移行における制限事項を理解する。

Pardus Linux 23でサウンドカードドライバが検出されない問題を修正する

Pardus Linux 23でサウンドカードドライバが検出されない問題を修正する

Pardus Linux 23でサウンドカードが認識されない場合のトラブルシューティングを行います。ALSA検出、カーネルモジュール、オーディオサービス、出力プロファイル、ファームウェア、およびアップデートを安全に確認します。

Pardus KVMゲストでディスプレイ解像度が1024x768に固定される問題を修正する

Pardus KVMゲストでディスプレイ解像度が1024x768に固定される問題を修正する

Pardus KVMゲストが1024x768でフリーズしてしまう問題を解決するには、仮想GPU、SPICEエージェント、X11またはWaylandセッションを確認し、より高いディスプレイモードが正しく動作していることを確認してください。

Debianで起動時にリモートSSHFSディレクトリを自動的にマウントする方法

Debianで起動時にリモートSSHFSディレクトリを自動的にマウントする方法

Debianにおいて、キーベースのSSH、/etc/fstab、systemdネットワークオプション、自動マウント、および検証手順を用いて、起動時にリモートSSHFSディレクトリを自動的にマウントします。

SLESシステムアップグレード中に「メモリを割り当てできません」というエラーを修正する

SLESシステムアップグレード中に「メモリを割り当てできません」というエラーを修正する

SLESアップグレード中に「メモリを割り当てできません」というエラーが発生した場合のトラブルシューティングを行います。RAM、スワップ、OOMログ、およびプロセス制限を確認し、パッケージトランザクションを中断することなく復旧します。

Harmonica OSタブレットのタッチスクリーンキャリブレーションの問題を解決する:適切なLinux修正方法を選択する

Harmonica OSタブレットのタッチスクリーンキャリブレーションの問題を解決する:適切なLinux修正方法を選択する

Harmonica OS (HamoniKR) タブレットにおけるタッチオフセット、回転、およびディスプレイマッピングのトラブルシューティングを行います。X.Org と libinput の修正を比較し、安全にテストを行い、キャリブレーションが役に立たない場合を把握します。

既存のDebian 12で暗号化されたSWAPパーティションを設定する方法

既存のDebian 12で暗号化されたSWAPパーティションを設定する方法

既存の Debian 12 スワップパーティションを、dm-crypt、起動ごとに生成される新しいランダムキー、/etc/crypttab、/etc/fstab、および安全な検証手順を使用して暗号化します。

UbuntuでSMARTドライブの状態をメールアラートで監視する方法

UbuntuでSMARTドライブの状態をメールアラートで監視する方法

Ubuntuにsmartmontoolsをセットアップして、ドライブの状態を監視し、SMARTメールアラートを送信します。デバイスのサポート状況を確認し、メール配信を設定し、通知をテストし、障害のトラブルシューティングを行います。