「DNS over HTTPS サーバー」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(テンプレート:Expansion を削除)
 
(2人の利用者による、間の7版が非表示)
1行目: 1行目:
[[Category:Domain Name System]]
+
[[Category:ドメインネームシステム]]
 
[[Category:ネットワーク設定]]
 
[[Category:ネットワーク設定]]
  +
[[en:DNS over HTTPS servers]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|DNS over HTTPS}}
 
{{Related|DNS over HTTPS}}
 
{{Related articles end}}
 
{{Related articles end}}
   
DNS は当初から、UDP/53、後に TCP/53 で暗号化されていないため、盗聴攻撃を受けやすくなっています。この脆弱性に対処するために使用できる利用可能なプロトコルに関する追加情報については、[[ドメイン名前解決#プライバシーとセキュリティ]] を参照してください。この記事では、DNS サーバーに必要なプロキシ設定を提供して、DNS over HTTPS(DoH)および DNS over TLS(DoT)の両方を提供する 3 つの利用可能なプロトコルのうち 2 つをカバーしています。AUR には、{{AUR|coredns}}、{{Pkg|dns-over-https}}、{{AUR|doh-proxy}}、および {{AUR|python-doh-proxy}} を含む複数の DoH ユーティリティが利用可能です。利用可能なソリューションの中から適切なものは、ネットワークのニーズによって異なります。
+
DNS は当初から、UDP/53、後に TCP/53 で暗号化されていないため、盗聴攻撃を受けやすくなっています。この脆弱性に対処するために使用できる利用可能なプロトコルに関する追加情報については、[[ドメイン名前解決#プライバシーとセキュリティ]] を参照してください。この記事では、DNS サーバーに必要なプロキシ設定を提供して、DNS over HTTPS(DoH)および DNS over TLS(DoT)の両方を提供する 3 つの利用可能なプロトコルのうち 2 つをカバーしています。AUR には、{{AUR|coredns}}、{{Pkg|dns-over-https}}、{{AUR|doh-proxy}}、および {{AUR|python-doh-proxy}} を含む複数の DoH ユーティリティが利用可能です。利用可能なソリューションの中から適切なものは、ネットワークのニーズによって異なります。
   
{{AUR|coredns}} は、キャッシング機能を持つ非権威 DNS サーバーと DoH サービスを提供します出典が必要
+
{{AUR|coredns}} は、キャッシング機能を持つ非権威 DNS サーバーと DoH サービスを提供します(出典が必要)
   
 
{{Pkg|dns-over-https}}、{{AUR|doh-proxy}}、および {{AUR|python-doh-proxy}} はすべて、既存の HTTPS サーバーの背後でプロキシを使用するための HTTP リスナーと、UDP/53 の通常のクエリをセキュア DNS サーバーに転送するスタブリゾルバを提供します。さらに、{{AUR|doh-proxy}} と {{AUR|python-doh-proxy}} の両方が、スタンドアロンの HTTPS/2 サーバーを提供します。
 
{{Pkg|dns-over-https}}、{{AUR|doh-proxy}}、および {{AUR|python-doh-proxy}} はすべて、既存の HTTPS サーバーの背後でプロキシを使用するための HTTP リスナーと、UDP/53 の通常のクエリをセキュア DNS サーバーに転送するスタブリゾルバを提供します。さらに、{{AUR|doh-proxy}} と {{AUR|python-doh-proxy}} の両方が、スタンドアロンの HTTPS/2 サーバーを提供します。
29行目: 30行目:
 
}}
 
}}
   
最初の文字列はリスナーで、次のプロトコルを使用できます{{ic|dns://}} はプレーンな DNS プロトコル、{{ic|http://}} は DNS over HTTPS、{{ic|tls://}} は DNS over TLS、{{ic|grpc://}} は gRPC 用です[https://grpc.io/] を参照。プロトコルを空にすると:example.com:53)、デフォルトで dns:// が選択されます。{{ic|domain}} は照会されるドメインにマッチし、特定のドメインを使用することもできます:dns: //example.com: 53)し、{{ic|.}}:dns: //.: 53)を使用してすべてのドメインにマッチさせることもできます。{{ic|:port}} でリスニングポートを設定できます。空にしておくと、ポート 53 が選択されます。
+
最初の文字列はリスナーで、次のプロトコルを使用できます:{{ic|dns://}} はプレーンな DNS プロトコル、{{ic|http://}} は DNS over HTTPS、{{ic|tls://}} は DNS over TLS、{{ic|grpc://}} は gRPC 用です([https://grpc.io/] を参照)。プロトコルを空にすると(:example.com:53)、デフォルトで dns:// が選択されます。{{ic|domain}} は照会されるドメインにマッチし、特定のドメインを使用することもできます(:dns: //example.com: 53)し、{{ic|.}}(:dns: //.: 53)を使用してすべてのドメインにマッチさせることもできます。{{ic|:port}} でリスニングポートを設定できます。空にしておくと、ポート 53 が選択されます。
   
 
{{ic|forward}} 文字列は、DNS クエリが転送される場所です。{{ic|domain}} に {{ic|.}} を使用して、すべてのドメインにマッチさせます。{{ic|forward_to}} にクエリを送信する上流 DNS サーバーを設定し、DoT サーバーの場合は {{ic|tls://}} プロトコルを指定できます。上流の DoT サーバーを使用している場合は、TLS ネゴシエーションのために {{ic|tls_servername}} を設定する必要があります。
 
{{ic|forward}} 文字列は、DNS クエリが転送される場所です。{{ic|domain}} に {{ic|.}} を使用して、すべてのドメインにマッチさせます。{{ic|forward_to}} にクエリを送信する上流 DNS サーバーを設定し、DoT サーバーの場合は {{ic|tls://}} プロトコルを指定できます。上流の DoT サーバーを使用している場合は、TLS ネゴシエーションのために {{ic|tls_servername}} を設定する必要があります。
35行目: 36行目:
 
DoH、DoT、または gRPC プロトコルを使用する場合、{{ic|tls}} 文字列は必須です。与えられた順序で証明書と秘密鍵のパスをここに入力してください。
 
DoH、DoT、または gRPC プロトコルを使用する場合、{{ic|tls}} 文字列は必須です。与えられた順序で証明書と秘密鍵のパスをここに入力してください。
   
Cloudflare の DoT サーバーを使用して、ポート 53 をリッスンする単純な DoT プロキシの設定例
+
Cloudflare の DoT サーバーを使用して、ポート 53 をリッスンする単純な DoT プロキシの設定例:
   
 
{{hc|/etc/coredns/Corefile|
 
{{hc|/etc/coredns/Corefile|
126行目: 127行目:
 
=== python-doh-proxy ===
 
=== python-doh-proxy ===
   
  +
{{AUR|python-doh-proxy}} をインストールして下さい。
{{Out of date|{{AUR|install-wheel-scripts}}{{Broken package link|package not found}} appears to have been [https://lists.archlinux.org/archives/list/aur-requests@lists.archlinux.org/message/KISCXEF5SK52W65WNXVU5DR4CBKCY5TQ/ superseded by python-installer].}}
 
   
  +
==== スタブリゾルバー ====
Install the following packages: {{AUR|python-requests_download}}; {{AUR|install-wheel-scripts}}{{Broken package link|package not found}}; {{Pkg|python-flit}}; and {{AUR|python-doh-proxy}}.
 
   
  +
レガシーアプリケーションのローカルネットワークに暗号化されたクエリを提供する場合は、スタブリゾルバーを設定します。
==== Stub resolver ====
 
 
If you intend to provide encrypted queries to your local network for legacy applications, configure the stub resolver:
 
   
 
{{hc|/etc/conf.d/doh-stub|<nowiki>
 
{{hc|/etc/conf.d/doh-stub|<nowiki>
141行目: 140行目:
 
PORT=443</nowiki>}}
 
PORT=443</nowiki>}}
   
  +
実際の DNS サーバーに安全な前方 DNS ルックアップを提供する方法がない場合は、上流プロバイダー (localhost の代わりに CloudFlare、OpenDNS など) の 1 つを使用するように DOMAIN と NS の両方を設定する必要があります。 localhost へのルックアップのみを提供する必要がある場合は、これで問題ありません。ネットワーク全体にそれらを提供する必要がある場合、ローカルキャッシュまたは権威 DNS サーバーがない場合は、53 で直接リッスンできます。この場合、ループバックアダプターの代わりに実際の IP アドレスを使用することもできます。
If you do not have a way to provide a secure forward DNS lookoup to your real DNS server, you should configure both DOMAIN and NS to use one of the upstream providers (CloudFlare, OpenDNS, etc., instead of localhost). If you only need to provide lookups to localhost, this is fine. If you need to provide them for the entire network, the you could listen on 53 directly if you do not have a local caching or authoritative DNS server - you would also want to use the real IP address instead of the loopback adapter in this case.
 
   
==== DoH proxy ====
+
==== DoH プロキシ ====
   
  +
既存の HTTP サーバーがあり、それを使用して DNS ルックアップをプロキシしたい場合は、ポート 8080 でリッスンするように HTTP プロキシをセットアップします。
If you have an existing HTTP server and wish to proxy DNS lookups with it, setup the HTTP proxy to listen on port 8080:
 
   
 
{{hc|/etc/conf.d/doh-httpproxy|<nowiki>
 
{{hc|/etc/conf.d/doh-httpproxy|<nowiki>
152行目: 151行目:
 
ADDR=127.0.0.1</nowiki>}}
 
ADDR=127.0.0.1</nowiki>}}
 
 
  +
オプションで、doh-proxy サービスまたはアップストリーム DoH プロバイダーを利用してクエリを転送できます。
Optionally, you can utilize either the doh-proxy service or an upstream DoH provider to forward queries.
 
   
==== DoH proxy ====
+
==== DoH プロキシ ====
   
  +
既存の http サーバーがない場合は、HTTPS/2 リスナーを設定できます:
If you do not have an existing http server, you can configure the HTTPS/2 lisener:
 
   
 
{{hc|/etc/conf.d/doh-proxy|<nowiki>
 
{{hc|/etc/conf.d/doh-proxy|<nowiki>
166行目: 165行目:
 
KEY=/etc/ssl/private/privkey.pem</nowiki>}}
 
KEY=/etc/ssl/private/privkey.pem</nowiki>}}
   
  +
繰り返しますが、必要に応じて調整しますが、上流サーバーに安全なクエリを実行する方法があることを確認してください。そうしないとループが作成されます。
Again, adjust as necessary, but be certain that the upstream server has a way to perform secure queries, or you will be creating a loop.
 
   
== Standalone DNS server configuration ==
+
== スタンドアロン DNS サーバーの設定 ==
   
 
=== BIND ===
 
=== BIND ===
   
  +
==== リゾルバーとして、TLS プロキシを使用 ====
{{Merge|BIND#Configuration|BIND has a dedicated article.}}
 
BIND 9.18 natively supports serving both DNS over HTTPS and DNS over TLS. See [[BIND#Configuration]] for details.
 
   
  +
典型的: 現在の DNS プロバイダーとして ISC バインドを使用し、レガシークライアントへの転送サービスと最新のクライアントへの DoH の両方の転送サービスを提供する場合は、すべての非ローカルクエリをスタブリゾルバーに転送するようにnamedを設定し、コメントアウトする必要があります。スタブリゾルバーへの転送行 (ルートにフォールバックする場合のみ forward を省略します):
==== As resolver, with TLS proxy ====
 
 
Typical: If using ISC bind as the current DNS provider, and you will be providing both forwarding services for legacy clients and DoH to modern clients, you will likely want to configure named to forward all non-local queries to your stub resolver, comment out any forwarding lines an forward to the stub resolver (omit forward only if you would like to fall back to roots):
 
   
 
{{hc|/etc/named.conf|<nowiki>
 
{{hc|/etc/named.conf|<nowiki>
189行目: 185行目:
 
...</nowiki>}}
 
...</nowiki>}}
   
  +
外部 TLS プロキシ ({{Pkg|stunnel}} 経由) に転送する場合は、同じことを行いますが、TCP/54 のみを使用します (以下の stunnel 構成を参照):
If you want to forward to an external TLS proxy (via {{Pkg|stunnel}}), do the same but use only TCP/54 (see stunnel configuration below):
 
   
 
{{hc|/etc/named.conf|<nowiki>
 
{{hc|/etc/named.conf|<nowiki>
205行目: 201行目:
 
...</nowiki>}}
 
...</nowiki>}}
   
  +
オプション: 現在の DNS プロバイダーとして ISC バインドを使用し、レガシークライアントへの転送サービスと最新のクライアントへの DoH の両方の転送サービスを提供する場合は、代替ポート (TCP|UDP/54 など) でリッスンするようにnamedを設定することをお勧めします。デフォルトの 53 ではなく、スタブリゾルバーが標準ポートでリッスンするようにします。既存の ''listen'' 行をコメントアウトし、次の行を追加します (必要ない場合は v6 行を省略します):
Optional: If using ISC bind as the the current DNS provider, and you will be providing both forwarding services for legacy clients and DoH to modern clients, you might want to configure named to listen on an alternate port, for example TCP|UDP/54, rather than the default of 53 so that your stub resolver will listen on the standard port. Comment out any existing 'listen' lines and add the following (omit the v6 line if not needed):
 
   
 
{{hc|/etc/named.conf|<nowiki>
 
{{hc|/etc/named.conf|<nowiki>
216行目: 212行目:
 
=== Unbound ===
 
=== Unbound ===
   
  +
設定ファイルにポート 853 を追加してリッスンし、証明書とキーのパスを指定することで、DoT サーバーを簡単にセットアップできます。
{{Merge|Unbound#Configuration|Unbound has a dedicated article.}}
 
 
You can easily set up DoT server by adding to your configuration file port 853 to listening and specify certificate and key paths:
 
   
 
{{hc|/etc/unbound/unbound.conf|
 
{{hc|/etc/unbound/unbound.conf|
229行目: 223行目:
 
}}
 
}}
   
  +
DoH サーバーのセットアップは DoT と同じですが、必要なポートは 443 です。
DoH server setup is same as DoT, but needed port is 443:
 
   
 
{{hc|/etc/unbound/unbound.conf|
 
{{hc|/etc/unbound/unbound.conf|
240行目: 234行目:
 
}}
 
}}
   
== Web server configuration ==
+
== Web サーバーの設定 ==
   
=== Apache httpd proxy configuration ===
+
=== Apache httpd プロキシ設定 ===
   
  +
プライマリ httpd.conf または 443 でリッスンする適切な仮想ホストでプロキシを設定します:
Configure a proxy in your primary httpd.conf or appropriate vhost listening on 443:
 
   
 
{{hc|/etc/httpd/conf/vhosts/'''yourhost'''.conf|<nowiki>
 
{{hc|/etc/httpd/conf/vhosts/'''yourhost'''.conf|<nowiki>
253行目: 247行目:
 
</nowiki>}}
 
</nowiki>}}
   
=== nginx proxy configuration ===
+
=== nginx プロキシ設定 ===
   
==== DoT Proxy ====
+
==== DoT プロキシ ====
   
  +
Nginx ストリームモジュールを使用すると、上流の DNS にプロキシを設定できます。ローカル DNS だけでなくサードパーティも使用できることに注意してください。
With Nginx stream module you can setup proxy to upstream DNS. Note that you can use local dns as well as third parties.
 
   
 
{{hc|/etc/nginx/nginx.conf|<nowiki>
 
{{hc|/etc/nginx/nginx.conf|<nowiki>
276行目: 270行目:
 
...</nowiki>}}
 
...</nowiki>}}
   
==== DoH Proxy ====
+
==== DoH プロキシ ====
   
For DoH implementation you need for use additional NJS scripts. You need to get it [https://github.com/TuxInvader/nginx-dns/tree/master/njs.d/ from this GitHub's page], put it to {{ic|/etc/nginx/njs.d/}} and be sure package {{Pkg|nginx-mod-njs}} is installed.
+
DoH を実装するには、追加の NJS スクリプトを使用する必要があります。[https://github.com/TuxInvader/nginx-dns/tree/master/njs.d/ この GitHub のページから] 取得し、{{ic|/etc/nginx/njs.d/}} に配置する必要があります。パッケージ {{Pkg|nginx-mod-njs}} がインストールされていることを確認してください。
   
  +
まず、ストリームサービスを設定する必要があります。ストリームサービスは、nginx の HTTP/2 サービスから DNS リクエストを取得し、それを {{ic|js_filter}} で処理して DNS パケットを見つけ、上流の DNS サーバーに渡します。
At first you need to setup stream service, which will be get DNS request from nginx's HTTP/2 service, process it with {{ic|js_filter}} to find DNS packets and pass it to upstream DNS server.
 
   
 
{{hc|/etc/nginx/nginx.conf|<nowiki>
 
{{hc|/etc/nginx/nginx.conf|<nowiki>
299行目: 293行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
次に、URI /dns-query で DNS リクエストをリッスンし、それらをストリームサービスに中継するように HTTP/2 サービスをセットアップします。必要に応じて証明書を有効なものに変更する必要があることに注意してください
Then, setup HTTP/2 service to listen DNS requests at URI /dns-query and relay them to stream service. Note that to a need change certificates to valid
 
   
 
{{hc|/etc/nginx/nginx.conf|<nowiki>
 
{{hc|/etc/nginx/nginx.conf|<nowiki>
320行目: 314行目:
 
...</nowiki>}}
 
...</nowiki>}}
   
You can use both DoT and DoH services at same time, caching and multiple upstream DNS. For more examples see [https://github.com/TuxInvader/nginx-dns/tree/master/examples these configuration files]
+
DoT サービスと DoH サービスの両方、キャッシュと複数のアップストリーム DNS を同時に使用できます。その他の例については、[https://github.com/TuxInvader/nginx-dns/tree/master/examples これらの設定ファイル] を参照してください。
 
== DNS over TLS configuration via stunnel ==
 
   
{{Merge|stunnel#DNS over TLS|Some info is provided on the main [[stunnel]] page.}}
+
== stunnel 経由の DNS over TLS 設定 ==
   
  +
TCP/853 で TLS 接続をリッスンし、ローカル DNS プロバイダーに転送するように stunnel を設定します。
Configure stunnel to listen on TCP/853 for TLS connections, and forward to your local DNS provider:
 
   
 
{{hc|/etc/stunnel/conf.d/DoT.conf|<nowiki>
 
{{hc|/etc/stunnel/conf.d/DoT.conf|<nowiki>
335行目: 327行目:
 
key = /etc/ssl/private/privkey.pem</nowiki>}}
 
key = /etc/ssl/private/privkey.pem</nowiki>}}
   
  +
TCP/54 でリッスンし、上流の安全なプロバイダーに転送するように stunnel を設定します。
Configure stunnel to listen on TCP/54 and forward to an upstream secure provider:
 
 
{{hc|/etc/stunnel/conf.d/DoT-Remote.conf|<nowiki>
 
{{hc|/etc/stunnel/conf.d/DoT-Remote.conf|<nowiki>
 
[dnsovertls]
 
[dnsovertls]
345行目: 337行目:
 
checkHost = <your_host_name></nowiki>}}
 
checkHost = <your_host_name></nowiki>}}
   
== DNS over HTTPS server Docker images ==
+
== DNS over HTTPS サーバーの Docker イメージ ==
   
See https://hub.docker.com/r/satishweb/doh-server.
+
https://hub.docker.com/r/satishweb/doh-server を参照してください。

2024年8月15日 (木) 13:37時点における最新版

関連記事

DNS は当初から、UDP/53、後に TCP/53 で暗号化されていないため、盗聴攻撃を受けやすくなっています。この脆弱性に対処するために使用できる利用可能なプロトコルに関する追加情報については、ドメイン名前解決#プライバシーとセキュリティ を参照してください。この記事では、DNS サーバーに必要なプロキシ設定を提供して、DNS over HTTPS(DoH)および DNS over TLS(DoT)の両方を提供する 3 つの利用可能なプロトコルのうち 2 つをカバーしています。AUR には、corednsAURdns-over-httpsdoh-proxyAUR、および python-doh-proxyAUR を含む複数の DoH ユーティリティが利用可能です。利用可能なソリューションの中から適切なものは、ネットワークのニーズによって異なります。

corednsAUR は、キャッシング機能を持つ非権威 DNS サーバーと DoH サービスを提供します(出典が必要)。

dns-over-httpsdoh-proxyAUR、および python-doh-proxyAUR はすべて、既存の HTTPS サーバーの背後でプロキシを使用するための HTTP リスナーと、UDP/53 の通常のクエリをセキュア DNS サーバーに転送するスタブリゾルバを提供します。さらに、doh-proxyAURpython-doh-proxyAUR の両方が、スタンドアロンの HTTPS/2 サーバーを提供します。

DoH サーバー/プロキシーソフトウェア設定

coreDNS

corednsAUR パッケージを[インストール]してください。

coreDNS を DoH/DoT/gRPC DNS サーバーおよび/または DoT プロキシとして使用できます。デフォルトの設定ファイルは /etc/coredns/Corefile にあります。

シンプルな設定ファイルの例は次のようになります。

/etc/coredns/Corefile
protocol://domain:port {
    forward domain forward_to
    tls_servername domain_of_dot_server
    tls cert_path key_path
}

最初の文字列はリスナーで、次のプロトコルを使用できます:dns:// はプレーンな DNS プロトコル、http:// は DNS over HTTPS、tls:// は DNS over TLS、grpc:// は gRPC 用です([1] を参照)。プロトコルを空にすると(例:example.com:53)、デフォルトで dns:// が選択されます。domain は照会されるドメインにマッチし、特定のドメインを使用することもできます(例:dns: //example.com: 53)し、.(例:dns: //.: 53)を使用してすべてのドメインにマッチさせることもできます。:port でリスニングポートを設定できます。空にしておくと、ポート 53 が選択されます。

forward 文字列は、DNS クエリが転送される場所です。domain. を使用して、すべてのドメインにマッチさせます。forward_to にクエリを送信する上流 DNS サーバーを設定し、DoT サーバーの場合は tls:// プロトコルを指定できます。上流の DoT サーバーを使用している場合は、TLS ネゴシエーションのために tls_servername を設定する必要があります。

DoH、DoT、または gRPC プロトコルを使用する場合、tls 文字列は必須です。与えられた順序で証明書と秘密鍵のパスをここに入力してください。

Cloudflare の DoT サーバーを使用して、ポート 53 をリッスンする単純な DoT プロキシの設定例:

/etc/coredns/Corefile
. {
    forward . tls://1.1.1.1 {
        tls_servername cloudflare-dns.com
    }
}

また、複数のインスタンスと転送プラグインを使用できます。

/etc/coredns/Corefile
https://.:443 {
    forward . 127.0.0.1 {
    forward example1.com 8.8.8.8
    tls cert.pem key.pem
}

tls://example2.com:853 {
    tls cert.pem key.pem
    forward . tls://9.9.9.9 {
        tls_servername dns.quad9.net
    }
}

coredns.service ユニットを起動/有効化 してください。

dns-over-https

まず、dns-over-https をインストールし、設定後、必要なサービスを有効化して開始することを忘れないでください。

スタブリゾルバ

デフォルト設定でインストール後すぐに使用を開始できます。デフォルトのリスニングポートは 53 および 5380 で、それらのうちのどちらかがすでにバインドされている場合は無視されます。doh-client.service起動/有効化します。

設定ファイルは /etc/dns-over-https/doh-client.conf にあります。listen セクションで望むポートを変更できます。設定ファイルには多くのサードパーティ DoH サーバーが含まれており、必要なものを選択してコメントアウトを外すか、未指定のものを記述するだけです。複数のリゾルバを使用することもできます。それらのうちの 1 つが各リクエストに対してランダムに選択されます。dns-over-https を使用してリゾルバを必要な順序で強制するには、upstream_selectorweighted_round_robin または lvs_weighted_round_robin に設定し、使用中のリゾルバで重み値を変更します。

DoH プロキシ

doh サーバーとして使用するための設定ファイルは、/etc/dns-over-https/doh-server.conf にあります。upstream セクションで、使用するための望むアップストリームリゾルバとそのプロトコルを設定できます。dns-over-https をスタンドアロンサービスとして使用するか、nginx や apache などの HTTPS サービスと一緒に使用することができます。

スタンドアロンで使用する場合は、ポートを 443 に設定し、適切な証明書と鍵を指定する必要があります。

/etc/dns-over-https/doh-server.conf
listen = [
    "127.0.0.1:443",
]
...
cert = ""
key = ""

HTTP サーバーをキャッシュ用または他の HTTPS サービスと併用する場合は、doh-server.conf の証明書と鍵の文字列を空にして、望む HTTP サーバーの設定例を次に示します。デフォルトの dns-over-https ポートを使用していることに注意してください。

nginx:

/etc/nginx/nginx/site-available/doh
server {
  listen       443 ssl http2 default_server;
  listen       [::]:443 ssl http2 default_server;
  server_name  MY_SERVER_NAME;

  ssl_certificate /path/to/your/server/certificates/fullchain.pem;
  ssl_certificate_key /path/to/your/server/certificates/privkey.pem;
  location /dns-query {
    proxy_pass       http://localhost:8053/dns-query; 
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

apache:

/etc/httpd/conf/vhosts/doh.conf
<VirtualHost *:443>
    ServerName MY_SERVER_NAME
    Protocols h2 http/1.1
    ProxyPass /dns-query http://[::1]:8053/dns-query
    ProxyPassReverse /dns-query http://[::1]:8053/dns-query
</VirtualHost>

設定後、doh-server.service起動/有効化します。

doh-proxy

python-doh-proxy

python-doh-proxyAUR をインストールして下さい。

スタブリゾルバー

レガシーアプリケーションのローカルネットワークに暗号化されたクエリを提供する場合は、スタブリゾルバーを設定します。

/etc/conf.d/doh-stub
LISTENPORT=5353
ADDR=127.0.0.1
DOMAIN=mydomain.tld
NS=127.0.0.1
PORT=443

実際の DNS サーバーに安全な前方 DNS ルックアップを提供する方法がない場合は、上流プロバイダー (localhost の代わりに CloudFlare、OpenDNS など) の 1 つを使用するように DOMAIN と NS の両方を設定する必要があります。 localhost へのルックアップのみを提供する必要がある場合は、これで問題ありません。ネットワーク全体にそれらを提供する必要がある場合、ローカルキャッシュまたは権威 DNS サーバーがない場合は、53 で直接リッスンできます。この場合、ループバックアダプターの代わりに実際の IP アドレスを使用することもできます。

DoH プロキシ

既存の HTTP サーバーがあり、それを使用して DNS ルックアップをプロキシしたい場合は、ポート 8080 でリッスンするように HTTP プロキシをセットアップします。

/etc/conf.d/doh-httpproxy
NS=127.0.0.1
PORT=8080
ADDR=127.0.0.1

オプションで、doh-proxy サービスまたはアップストリーム DoH プロバイダーを利用してクエリを転送できます。

DoH プロキシ

既存の http サーバーがない場合は、HTTPS/2 リスナーを設定できます:

/etc/conf.d/doh-proxy
NS=127.0.0.1
UPSTREAMPORT=5353
ADDR=127.0.0.1
LISTENPORT=443
CERT=/etc/ssl/private/fullchain.pem
KEY=/etc/ssl/private/privkey.pem

繰り返しますが、必要に応じて調整しますが、上流サーバーに安全なクエリを実行する方法があることを確認してください。そうしないとループが作成されます。

スタンドアロン DNS サーバーの設定

BIND

リゾルバーとして、TLS プロキシを使用

典型的: 現在の DNS プロバイダーとして ISC バインドを使用し、レガシークライアントへの転送サービスと最新のクライアントへの DoH の両方の転送サービスを提供する場合は、すべての非ローカルクエリをスタブリゾルバーに転送するようにnamedを設定し、コメントアウトする必要があります。スタブリゾルバーへの転送行 (ルートにフォールバックする場合のみ forward を省略します):

/etc/named.conf
options {
...
    //forwarders { 8.8.8.8; 8.8.4.4; };
    forwarders { 127.0.0.1 port 5353; };
    forward only;
...
};
...

外部 TLS プロキシ (stunnel 経由) に転送する場合は、同じことを行いますが、TCP/54 のみを使用します (以下の stunnel 構成を参照):

/etc/named.conf
options {
...
    //forwarders { 8.8.8.8; 8.8.4.4; };
    forwarders { 127.0.0.1 port 54; };
    forward only;
...
};
...
server 127.0.0.1 {
    tcp-only yes;
};
...

オプション: 現在の DNS プロバイダーとして ISC バインドを使用し、レガシークライアントへの転送サービスと最新のクライアントへの DoH の両方の転送サービスを提供する場合は、代替ポート (TCP|UDP/54 など) でリッスンするようにnamedを設定することをお勧めします。デフォルトの 53 ではなく、スタブリゾルバーが標準ポートでリッスンするようにします。既存の listen 行をコメントアウトし、次の行を追加します (必要ない場合は v6 行を省略します):

/etc/named.conf
...
    //listen-on { any; };
    listen-on port 54 { any; };
    listen-on-v6 port 54 { any; };
...

Unbound

設定ファイルにポート 853 を追加してリッスンし、証明書とキーのパスを指定することで、DoT サーバーを簡単にセットアップできます。

/etc/unbound/unbound.conf
server:
...
interface: 127.0.0.1@853
tls-service-pem: /etc/unbound/public.pem
tls-service-key: /etc/unbound/private.pem
...

DoH サーバーのセットアップは DoT と同じですが、必要なポートは 443 です。

/etc/unbound/unbound.conf
server:
...
interface: 127.0.0.1@443
tls-service-pem: /etc/unbound/public.pem
tls-service-key: /etc/unbound/private.pem
...

Web サーバーの設定

Apache httpd プロキシ設定

プライマリ httpd.conf または 443 でリッスンする適切な仮想ホストでプロキシを設定します:

/etc/httpd/conf/vhosts/yourhost.conf
...
    ProxyPass /dns-query http://[127.0.0.1]:8080/dns-query
    ProxyPassReverse /dns-query http://[127.0.0.1]:8080/dns-query
...

nginx プロキシ設定

DoT プロキシ

Nginx ストリームモジュールを使用すると、上流の DNS にプロキシを設定できます。ローカル DNS だけでなくサードパーティも使用できることに注意してください。

/etc/nginx/nginx.conf
...
stream {
    upstream dns {
        zone dns 64k;
        server 8.8.8.8:53;
    }
    
    server {
        listen 853 ssl;
        ssl_certificate /etc/nginx/ssl/certs/public.pem;
        ssl_certificate_key /etc/nginx/ssl/private/private.pem;
        proxy_pass dns;
    }
}
...

DoH プロキシ

DoH を実装するには、追加の NJS スクリプトを使用する必要があります。この GitHub のページから 取得し、/etc/nginx/njs.d/ に配置する必要があります。パッケージ nginx-mod-njs がインストールされていることを確認してください。

まず、ストリームサービスを設定する必要があります。ストリームサービスは、nginx の HTTP/2 サービスから DNS リクエストを取得し、それを js_filter で処理して DNS パケットを見つけ、上流の DNS サーバーに渡します。

/etc/nginx/nginx.conf
...
stream {
    upstream dns {
        zone dns 64k;
        server 1.1.1.1:53;
        
    server {
        listen 127.0.0.1:8053;
        js_filter doh_filter_request;
        proxy_ssl on;
        proxy_pass dns;
        }
}
...

次に、URI /dns-query で DNS リクエストをリッスンし、それらをストリームサービスに中継するように HTTP/2 サービスをセットアップします。必要に応じて証明書を有効なものに変更する必要があることに注意してください

/etc/nginx/nginx.conf
...
upstream dohloop {
   zone dohloop 64k;
   server 127.0.0.1:8053;
}

server {
    listen 443 ssl http2;
    ssl_certificate /etc/nginx/ssl/certs/public.pem;
    ssl_certificate_key /etc/nginx/ssl/private/private.pem;

    location /dns-query {
        proxy_http_version 1.0;
        proxy_pass http://dohloop;
   }
}
...

DoT サービスと DoH サービスの両方、キャッシュと複数のアップストリーム DNS を同時に使用できます。その他の例については、これらの設定ファイル を参照してください。

stunnel 経由の DNS over TLS 設定

TCP/853 で TLS 接続をリッスンし、ローカル DNS プロバイダーに転送するように stunnel を設定します。

/etc/stunnel/conf.d/DoT.conf
[dns]
accept = 853
connect = 127.0.0.1:53
cert = /etc/ssl/private/fullchain.pem
key = /etc/ssl/private/privkey.pem

TCP/54 でリッスンし、上流の安全なプロバイダーに転送するように stunnel を設定します。

/etc/stunnel/conf.d/DoT-Remote.conf
[dnsovertls]
client = yes
accept = 54
connect = 10.10.10.1:853
verifyChain = yes
CAPath = /etc/ssl/certs
checkHost = <your_host_name>

DNS over HTTPS サーバーの Docker イメージ

https://hub.docker.com/r/satishweb/doh-server を参照してください。