Logo Neurocoda

自己ホスト型DoHサーバーのセットアップ

Neurocoda
Neurocoda
2026-07-03 12:44:47 2026-07-03 13:42:37 1.1k Words 6 Mins ...

CoreDNS

CoreDNS は柔軟で強力なDNSサーバーであり、多数のプラグイン拡張をサポートしています。DoHサービスの構築に最適です。

初期設定

必要なコンポーネントのインストール

まず、システムを更新し、必要なパッケージ(Docker ComposeとCertbot(SSL証明書取得用))をインストールします。

Terminal window
sudo apt update && sudo apt upgrade -y && sudo apt install -y docker-compose certbot

ファイアウォールの設定

サーバーのセキュリティを確保するため、必要なポート(22、80、443)を許可するファイアウォールルールを設定します。

Terminal window
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

SSL証明書の取得

Certbotを使用してSSL証明書を取得します。<DOMAIN> を実際のドメインに置き換えてください。

Terminal window
sudo certbot certonly --standalone -d <DOMAIN>

注意:ドメインがサーバーIPに正しく解決され、80番ポートが他のサービスで使用されていないことを確認してください。

CoreDNSの設定とデプロイ

CoreDNSはDockerを使用して実行します。

CoreDNS設定ディレクトリの作成

設定ファイルを格納するディレクトリを作成します。

Terminal window
sudo mkdir -p /etc/coredns

CoreDNS設定ファイルの作成

/etc/coredns/Corefile を作成して編集します:

Terminal window
sudo vim /etc/coredns/Corefile

以下の内容を追加し、<DOMAIN> を実際のドメインに置き換えてください:

https://.:443 {
tls /etc/letsencrypt/live/<DOMAIN>/fullchain.pem /etc/letsencrypt/live/<DOMAIN>/privkey.pem
bind 0.0.0.0:443
forward . 1.1.1.1 8.8.8.8
log
errors
cache 300
}

設定の説明:

  • <DOMAIN>:443:指定されたドメインからのHTTPSリクエストを443番ポートで待ち受けます。
  • tls:SSL証明書と秘密鍵のパスを指定します。
  • bind 0.0.0.0:443:すべてのネットワークインターフェースの443番ポートにバインドし、外部からのアクセスを許可します。
  • forward . 1.1.1.1 8.8.8.8:DNSリクエストをCloudflare(1.1.1.1)とGoogle(8.8.8.8)のパブリックDNSサーバーに転送します。
  • logerrors:ログとエラーログを有効にし、デバッグを容易にします。
  • cache 300:DNSキャッシュを有効にし、キャッシュ時間を300秒に設定してクエリ速度を向上させます。

CoreDNSコンテナの実行

Dockerを使用してCoreDNSコンテナを実行します。<DOMAIN> を実際のドメインに置き換えてください。

Terminal window
sudo docker run -d \
--name coredns \
--restart unless-stopped \
--network host \
-v /etc/coredns:/etc/coredns \
-v /etc/letsencrypt/live/<DOMAIN>/fullchain.pem:/etc/letsencrypt/live/<DOMAIN>/fullchain.pem \
-v /etc/letsencrypt/live/<DOMAIN>/privkey.pem:/etc/letsencrypt/live/<DOMAIN>/privkey.pem \
coredns/coredns \
-conf /etc/coredns/Corefile

実行の説明:

  • -network host:ホストのネットワークスタックを使用し、CoreDNSがホストの443番ポートで待ち受けられるようにします。
  • -v /etc/coredns:/etc/coredns:ホストの設定ディレクトリをコンテナ内にマウントし、設定ファイルの管理を容易にします。
  • -v /etc/letsencrypt/live/<DOMAIN>/fullchain.pem および -v /etc/letsencrypt/live/<DOMAIN>/privkey.pem:SSL証明書と秘密鍵をコンテナ内にマウントし、CoreDNSがHTTPSを使用できるようにします。

CoreDNSの動作確認

CoreDNSコンテナが実行中で、正しいポートで待ち受けていることを確認します。

Terminal window
sudo docker ps | grep coredns

次のような出力が表示され、CoreDNSコンテナが実行中で443番ポートで待ち受けていることが確認できます:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> coredns/coredns "/coredns -conf /etc…" X seconds ago Up X seconds 0.0.0.0:443->443/tcp coredns

クライアントでのDoH設定

上記の手順が完了すると、DoHサーバーがセットアップされます。次に、クライアントデバイスのDNS設定で、DoHサーバーアドレスとして https://<DOMAIN>/dns-query を使用するように設定します。

SSL証明書の自動更新

Certbotで取得したSSL証明書の有効期限は90日です。定期的な自動更新とCoreDNSコンテナの再起動を行うスケジュールタスクを設定することをお勧めします。

証明書を毎日チェックして更新するスケジュールタスクを作成します:

Terminal window
sudo crontab -e

次の内容を追加します:

0 2 1 * * certbot renew --quiet && sudo docker restart coredns

このタスクは毎月1日の午前2時に実行され、証明書を自動更新してCoreDNSコンテナを再起動します。

参考資料

CoreDNS Manual
Certbot
Home
DNS over HTTPS

Title: 自己ホスト型DoHサーバーのセットアップ Author: Neurocoda Created at: 2026-07-03 12:44:47 Updated at: 2026-07-03 13:42:37 Link: https://neurocoda.com/ja/posts/self-hosted-doh-server-setup-ja/ License: This work is licensed under CC BY-ND 4.0.

Comments