「DNS over HTTPS サーバー」の版間の差分
234行目: | 234行目: | ||
}} |
}} |
||
− | == Web |
+ | == Web サーバーの設定 == |
− | === Apache httpd |
+ | === 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> |
||
247行目: | 247行目: | ||
</nowiki>}} |
</nowiki>}} |
||
− | === nginx |
+ | === nginx プロキシ設定 === |
− | ==== DoT |
+ | ==== 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> |
||
270行目: | 270行目: | ||
...</nowiki>}} |
...</nowiki>}} |
||
− | ==== DoH |
+ | ==== DoH プロキシ ==== |
− | + | 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> |
||
293行目: | 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> |
||
314行目: | 314行目: | ||
...</nowiki>}} |
...</nowiki>}} |
||
− | + | DoT サービスと DoH サービスの両方、キャッシュと複数のアップストリーム DNS を同時に使用できます。その他の例については、[https://github.com/TuxInvader/nginx-dns/tree/master/examples これらの設定ファイル] を参照してください。 |
|
== stunnel 経由の DNS over TLS 設定 == |
== stunnel 経由の DNS over TLS 設定 == |
2024年1月29日 (月) 19:23時点における版
関連記事
DNS は当初から、UDP/53、後に TCP/53 で暗号化されていないため、盗聴攻撃を受けやすくなっています。この脆弱性に対処するために使用できる利用可能なプロトコルに関する追加情報については、ドメイン名前解決#プライバシーとセキュリティ を参照してください。この記事では、DNS サーバーに必要なプロキシ設定を提供して、DNS over HTTPS(DoH)および DNS over TLS(DoT)の両方を提供する 3 つの利用可能なプロトコルのうち 2 つをカバーしています。AUR には、corednsAUR、dns-over-https、doh-proxyAUR、および python-doh-proxyAUR を含む複数の DoH ユーティリティが利用可能です。利用可能なソリューションの中から適切なものは、ネットワークのニーズによって異なります。
corednsAUR は、キャッシング機能を持つ非権威 DNS サーバーと DoH サービスを提供します(出典が必要)。
dns-over-https、doh-proxyAUR、および python-doh-proxyAUR はすべて、既存の HTTPS サーバーの背後でプロキシを使用するための HTTP リスナーと、UDP/53 の通常のクエリをセキュア DNS サーバーに転送するスタブリゾルバを提供します。さらに、doh-proxyAUR と python-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_selector
を weighted_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>