Contents

DNS トラフィックがプライバシー漏洩となる理由と、それを完全に修正する方法

<本文>/images/the-dnscrypt-logo-with-a-key-and-a-lock-icon-beside-it-over-a-stylized-globe.png

自分のプライバシーについて心配していますか? ISP がデータを収集することを心配していますか? DNS クエリは、スヌーパーがユーザーのプロファイリングを行う方法の 1 つであり、暗号化された DNS がその答えです。ただし、すべてが平等であるわけではありませんが、あなたの匿名性を真に保護できるソリューションがあります。

問題と解決策

DNS クエリにより、Web リクエストがすべて漏洩します

DNS (ドメイン ネーム システム) は、ドメイン名 (example.com など) を IP アドレスにマッピングする手段です。 Web リクエストを行うと、システムは DNS パケットをインターネット上の DNS サーバー (再帰リゾルバーと呼ばれます) に送信します。その後、そのシステムはクエリを解決するために一連の後続のリクエストを作成します。プロセス全体はクリア テキスト プロトコル上で行われるため、ネットワーク上のあらゆる覗き見者 (ISP など) があなたの閲覧習慣の詳細なプロファイルを構築できることになります。これについては、私が書いた別の記事で詳しく説明しました。まずはそれを読むことをお勧めします。

では、それに対して何ができるのでしょうか?以前に到達した結論は、DNS クエリを暗号化することでした。完璧なソリューションではありませんが、最善の保護を提供し、プロファイリングを確実に困難にします。

DNSCrypt プロキシはそのようなオプションの 1 つです。これは、デスクトップやラップトップなど、あらゆるコンピュータ上で実行されるソフトウェア プログラム (サービス) です。次に、オペレーティング システムの DNS 構成を更新して、クエリをルーティングします。これについては後ほど説明します。

DNSCrypt プロキシをインストールする

DNS クエリを受け入れて暗号化するローカル サービス

これは、DNS クエリを受け入れて暗号化する、コンピュータ上で実行するソフトウェア プログラムです。設定ファイルでは、送信先を指定します。

このガイドの残りの部分は Linux に焦点を当てますが、Linux、Windows、macOS、またはその他のいくつかのプラットフォームの公式ガイドを参照することができます。次の設定セクションはすべての設定セクションに共通であり、説明も同様です。そのため、何を使用するかに関係なく、従うと役立ちます。

これらの方法のいずれも、サービスのインストールと設定に役立ちます。

DNSCrypt プロキシを構成する

すべてのプラットフォームにわたるユニバーサルな構成フォーマット

構成は難しい部分ですが、何が機能するかについて私の経験を共有します。

プラットフォームの設定ファイルを見つけるには、公式ガイドを参照してください。ただし、Linux の場合、場所は /etc/dnscrypt-proxy/dnscrypt-proxy.toml です。

DNS クエリがリレーを経由するように構成ファイル (TOML) を編集します。

まず、サービスが一般的な DNS ポート (53) を使用してローカル コンピューター上でリッスンするように、リッスン アドレスを設定します。


listen_addresses =  "127.0.0.1:53", "[::1:53" ]

これにより、プログラムは DNSCrypt プロキシを簡単に見つけて使用できるようになります。 「127.0.0.1」と「::1」は、それぞれ IPv4 と IPv6 のローカル コンピューター (別名 localhost) です。

次にサーバー名です。 DNSCrypt プロキシは、スタンプと呼ばれるリモート設定を含むリゾルバー リストをダウンロードします。これらのスタンプには次のような名前が付けられています。


server_names =  "server-name-1", "server-name-2" 

スタンプはエンコードされたパブリック構成文字列であり、パブリック アドレスと暗号化情報が含まれています。たとえば、これは「quad9-dnscrypt-ip4-filter-ecs-pri」という名前のサーバーに対する Quad9 のスタンプの 1 つです。

sdns://AQMAAAAAAAAADTkuOS45LjExOjg0NDMgZ8hHuMh1jNEgJFVDvnVnRt803x2EwAuMRwNo34Idhj4ZMi5kbnNjcnlwdC1jZXJ0LnF1YWQ5Lm5ldA

デコードすると次のようになります。

/images/a-terminal-window-displays-a-decoded-dnscrypt-stamp-revealing-an-ip-address-and-certificate-name.png

これはスタンプの目的と機能を示しているだけです。

余談ですが、このビデオの前半ではQuad9を紹介しています。 DNSCrypt とは別のものなので、混同しないでください。 DNSCrypt なしで Quad9 を使用することもできます。これについてはビデオの後半で説明します。ただし、その方法では暗号化されたクエリを取得できないため、注意してください。 Quad9 の DNSCrypt サービスを介してこれらを一緒に使用するのが最善です。

DNSCrypt に戻ります。サーバー名を設定すると、DNSCrypt プロキシにどのパブリック サーバー (スタンプ) を使用するかを指示することになります。上記のスタンプを使用するには、次のように設定します。


server_names =  "quad9-dnscrypt-ip4-filter-ecs-pri" 

DNSCrypt パブリック サーバー リストからサーバーを選択します。

適切なサーバーを選択するには、最初に「DNSCrypt」プロトコルに従ってリスト (「1」) を並べ替え (「2」)、次に左側の名前 (「3」) を使用します。 2 番目の画像は、スタンプを含む追加のサーバー情報を示しています。これは、サーバー名を指定したときに DNSCrypt プロキシがダウンロードするものです。

次にリレーについて説明します。リレーは、クエリを匿名化するプライバシーを尊重した中間サーバーです。これらを使用したい場合 (そうすべきです)、「anonymized_dns」セクションで「routes」オプションを設定する必要があります。最も簡単なアプローチは、ホップをランダムに選択しながら、DNSCrypt プロキシがすべてのリクエストを中継するようにすることです。


anonymized_dnsroutes = 

{ server_name = "*", via = ["*" }]

また、上記のアプローチは、動作しているリレーを見つける必要があるため、最初は動作するまでに時間がかかる場合があります。

ただし、次のように特定のリレーを選択することもできます。


anonymized_dnsroutes = 

{ server_name = "*", via = [ "relay-example-1", "relay-example-2"  },]

これにより、任意のサーバーに宛てられたすべてのクエリが、「relay-example-1」および「relay-example-2」というリレーを介して送信されます。リレーの完全なリストは、DNSCrypt パブリック サーバー リストから取得できます。

見出し (注釈「1」) をクリックすると、リストをリレー (「2」) ごとに並べ替えることができます。中継サーバーの名前は左側 (「3」) にあります。

これらのリレー サーバーの多くはコミュニティが所有しているため、選択には注意してください。ただし、クエリを読み取ることはできないことに注意してください。最後に、匿名性を保護するために、リレーとサーバーが同じ人物によって所有されていないことを確認してください。

特定のリレーを使用するようにサーバーをさらに構成できます。


anonymized_dnsroutes = 

{ server_name = "example-server-1", via = [ "relay-example-1", "relay-example-2"  },

{ server_name = "example-server-2", via =  "relay-example-1", "relay-example-2"  },]

次に、DNS 設定を変更する必要があります。 Windows 10、Windows 11、macOS でこれを行うためのガイドがあります。 Linux では、単一のファイルを更新するだけで済みます。


su

# Requires root first.echo "nameserver 127.0.0.1\nnameserver ::1" > /etc/resolv.confchattr +i /etc/resolv.conf # Make the file immutable.

ファイルを不変にすると、root でもファイルを変更できなくなります。ただし、sudo chattr-i/etc/resolv.conf を使用して再び変更可能にすることができます。現在のファイル属性ステータスを表示するには、lsattr/etc/resolv.conf を使用します。

一部のプログラム (NetworkManager など) はアクティブ化時にファイルをリセットすることを好むため、Linux 上で resolv.conf ファイルを不変にすることが必要になる場合があります。これを核の選択肢と考えるべきであり、他の方法で達成できるのであれば、それを優先すべきです。

純粋な匿名化された DNSCrypt プロトコル接続を有効にする追加の設定がいくつかあります。一部は、ダウンロードされたサーバー リストのフィルターとして機能します。


# Cache queries makes them faster.cache = truecache_size = 4_096# Use servers reachable over IPv4.ipv4_servers = true# Use servers reachable over IPv6.ipv6_servers = true# Use servers implementing the DNSCrypt protocol.dnscrypt_servers = true# We do not want to use DNS over HTTPS.doh_servers = false# We do not want to use servers implementing the Oblivious DNS over HTTPS protocol.odoh_servers = false# DNSSEC is optional here, but it limits your options.require_dnssec = false# Include only servers that do not log queries.require_nolog = true# Include servers that filter (for example, malware filters.)require_nofilter = false

さらに、「anonymized_dns」セクションで次のように設定します。


anonymized_dns# Skip resolvers incompatible with anonymization (relays).skip_incompatible = true

サーバーが接続を確立していない場合は、これらのフィルターのいずれかによって、最終的なフィルター選択リストからそのサーバーが除外されていることが考えられます。ターゲットサーバーと設定を再確認してください。

サービスを開始してテストする

プラットフォームごとに異なります

構成が完了したら、サービスを起動してテストする必要があります。 Linux 以外のプラットフォームについては、前にリンクした関連ガイドを参照してください。

Linux の場合、サービスは通常「dnscrypt-proxy」と呼ばれます。


sudo systemctl enable dnscrypt-proxysudo systemctl start dnscrypt-proxy

テストするには:


cd /etc/dnscrypt-proxydnscrypt-proxy -resolve example.com

あるいは、dig を使用する場合は、以下を実行できます。


dig example.com

ローカル サーバーを使用して解決されることが確認できるはずです。

/images/a-terminal-window-displays-the-output-of-a-dig-query-for-example-com-the-server-line-is-highlighted-showing-the-query-resolved-through-localhost.png /images/52638820954_b8557161ae_o.jpg

関連

これは、あなたが VPN を使用していることを知る方法です

透明マントじゃないよ。

完全に機能する構成ファイルをまとめました。これは、マルウェア ドメインをフィルタリングする Quad9 のフィルタリングされた DNSCrypt サービスを使用します。また、オーストリアとスウェーデンを経由する接続も中継します。必要に応じてリレーを追加または削除したり、カバーされている情報を使用してセットアップをカスタマイズしたりできます。

今日説明したオプションについては、「CUSTOM!」というラベルを付けました。その他のオプションについては、サンプル構成ファイルで見つけることができます。


####################################################################### GLOBAL SETTINGS (WITHOUT SECTIONS)







 ######################################################################## CUSTOM!listen_addresses =  "127.0.0.1:53", "[::1:53" ]# CUSTOM!server_names =  "quad9-dnscrypt-ip4-filter-pri" # CUSTOM! These options are either changed from their defaults or significant# for the proper functioning of a pure DNSCrypt connection.# I explained these previously.cache = truecache_size = 4_096dnscrypt_servers = truedoh_servers = falseipv4_servers = trueipv6_servers = trueodoh_servers = falserequire_dnssec = falserequire_nofilter = false

# quad9-dnscrypt-ip4-filter-pri filters malware domains.require_nolog = true####################################################################### SECTIONED SETTINGS











 #######################################################################anonymized_dnsskip_incompatible = true

# Only use servers that support relays.# CUSTOM!routes = 

{ server_name = "*", via = [ "anon-cs-austria", "anon-cs-swe"  },]sources.public-resolvers# This is where DNSCrypt resolves server names to stamps.# They're authenticated using cryptography.urls = 

"https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/public-resolvers.md",

"https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md"cache_file = "public-resolvers.md"minisign_key = "RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3"refresh_delay = 73prefix = ""sources.relays# A list of relays.urls = 

"https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/relays.md",

"https://download.dnscrypt.info/resolvers-list/v3/relays.md"cache_file = "relays.md"minisign_key = "RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3"refresh_delay = 73prefix = ""broken_implementations# These are lists of server names with problematic implementations.fragments_blocked = 

"cisco",

"cisco-ipv6",

"cisco-familyshield",

"cisco-familyshield-ipv6",

"cisco-sandbox",

"cleanbrowsing-adult",

"cleanbrowsing-adult-ipv6",

"cleanbrowsing-family",

"cleanbrowsing-family-ipv6",

"cleanbrowsing-security",

"cleanbrowsing-security-ipv6"

dnscrypt-proxy-check を (構成ファイルと同じディレクトリ内で) 実行すると、クエリがオーストリアまたはスウェーデンを経由してルーティングされることを確認できます。それが完了したら、サービスを開始して DNS クエリを実行します。

暗号化された DNS はプライバシーに多くの効果をもたらしますが、VPN はそれ以上の効果をもたらします。暗号化された DNS を使用すると、カーテンを閉めるようなものですが、VPN を使用すると、すべてのドアをロックするようなものになります。プライバシーを重視する場合は、私が個人的に愛用している ProtonVPN をお勧めします。

/images/vpn-logomark-bright.png

ProtonVPN

ロギングポリシー

ログなしポリシー

モバイルアプリ

アンドロイドとiOS

サーバーの数

13,000+

無料トライアル

機能が制限された無料版

/images/a-person-using-an-iphone-with-a-vpn-shield-icon-next-to-it.jpg

関連

VPN は実際に PC の安全性を高めますか?

VPN があなたの PC を無敵にすると思いますか?もう一度考えてみましょう。

*️⃣ 出典リンク:

ドメイン ネーム システム、私が書いた別の記事、 DNSCrypt プロキシLinuxWindows 、macOS ]( https://github.com/DNSCrypt/dnscrypt-proxy/wiki/installation-macOS) 、 他のいくつかのプラットフォームTOML 、IPv4 および IPv6、 スタンプQuad9 のDNSCrypt パブリック サーバー リスト 、リレー、Windows 10、Windows 11、macOS、dig、これにより、VPN を使用していることがわかります 、VPN は実際に PC の安全性を高めますか? 、