自己ホスト型DoHサーバーのセットアップ
CoreDNS
CoreDNS は柔軟で強力なDNSサーバーであり、多数のプラグイン拡張をサポートしています。DoHサービスの構築に最適です。
初期設定
必要なコンポーネントのインストール
まず、システムを更新し、必要なパッケージ(Docker ComposeとCertbot(SSL証明書取得用))をインストールします。
sudo apt update && sudo apt upgrade -y && sudo apt install -y docker-compose certbotファイアウォールの設定
サーバーのセキュリティを確保するため、必要なポート(22、80、443)を許可するファイアウォールルールを設定します。
sudo ufw allow 22sudo ufw allow 80sudo ufw allow 443sudo ufw enableSSL証明書の取得
Certbotを使用してSSL証明書を取得します。<DOMAIN> を実際のドメインに置き換えてください。
sudo certbot certonly --standalone -d <DOMAIN>注意:ドメインがサーバーIPに正しく解決され、80番ポートが他のサービスで使用されていないことを確認してください。
CoreDNSの設定とデプロイ
CoreDNSはDockerを使用して実行します。
CoreDNS設定ディレクトリの作成
設定ファイルを格納するディレクトリを作成します。
sudo mkdir -p /etc/corednsCoreDNS設定ファイルの作成
/etc/coredns/Corefile を作成して編集します:
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サーバーに転送します。logとerrors:ログとエラーログを有効にし、デバッグを容易にします。cache 300:DNSキャッシュを有効にし、キャッシュ時間を300秒に設定してクエリ速度を向上させます。
CoreDNSコンテナの実行
Dockerを使用してCoreDNSコンテナを実行します。<DOMAIN> を実際のドメインに置き換えてください。
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コンテナが実行中で、正しいポートで待ち受けていることを確認します。
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コンテナの再起動を行うスケジュールタスクを設定することをお勧めします。
証明書を毎日チェックして更新するスケジュールタスクを作成します:
sudo crontab -e次の内容を追加します:
0 2 1 * * certbot renew --quiet && sudo docker restart corednsこのタスクは毎月1日の午前2時に実行され、証明書を自動更新してCoreDNSコンテナを再起動します。