1. 序章

このチュートリアルでは、VPNを使用するときにクエリされたDNSサーバーを確認および変更する方法を説明します。

2. 定義

ドメインネームシステム(DNS)は、人間が覚えやすいドメイン名を対応する数値のインターネットプロトコル(IP)アドレスに変換するシステムです。 DNSサーバーには、パブリックIPアドレスとそれに関連するホスト名のデータベースが含まれています。 DNSネームサーバーは、照会されたドメインのレコードを保持している場合、「信頼できる」ものです。 それ以外の場合、レコードを所有せずに一時キャッシュを使用する場合は「権限がありません」。

nslookup は、Windows、macOS、およびLinuxがインターネットドメインネームサーバーにクエリを実行するためのコマンドラインユーティリティです。 dig は、macOSおよびLinux用の別のコマンドラインツールであり、 nslookup よりも多くの情報を提供し、照会されたネームサーバーの回答を表示します。 AndroidとiPhoneには、ストアに同等のユーティリティがあります。 いずれの場合も、nslookup.io。などのオンラインツールを使用できます。

VPNは「仮想プライベートネットワーク」の略で、パブリックネットワークを使用する場合の保護されたネットワーク接続です。 VPNサービスは、インターネットトラフィックをリモートサーバーにトンネリングすることにより、実際のIPアドレスを隠します。 これは、パブリックWLAN内での安全なブラウジング、インターネットプロバイダーと政府の制御と制限の回避、またはビデオストリーミングやソーシャルネットワーキングの地域的な禁止に役立ちます。 ただし、VPNを使用しても、DNSトラフィックが常に不要なチェックをバイパスするわけではありません。

3. スプリットモードまたはフルトンネルVPN

一言で言えば、VPNサービスを2つのカテゴリに分けることができます。

「フルトンネル」VPNは、VPNを介してすべてのインターネットトラフィックをルーティングおよび暗号化します。 その結果、DNS要求も暗号化され、インターネットプロバイダーの制御外になります。 一方、ローカルネットワークリソースにはアクセスできません。

「スプリットモード」VPNは、VPNで利用可能なローカルリソースとリモートリソースの両方に同時にアクセスするために必要です。 これは、たとえば、企業のVPNトラフィックと他の個人的な非VPNトラフィックを分割するために作業環境で使用されます。 この場合、DNS要求がどのようにアドレス指定されるかを明確にすることはできませんでした。

ただし、この要約は、VPNサービスのさまざまな構成の複雑さを説明するのに十分ではありません。 VPNは高度に構成可能な性質を持っているため、VPNには無限の種類とスタイルがあります。 どのDNSサーバーが照会されるかは、サーバーとクライアントの両方がどのように構成されているかに完全に依存します。

そのため、考えられるすべてのシナリオを調査するためのツールが必要です。 次の例では、最新バージョンのオペレーティングシステムを使用していると想定しています。

4. DNSクライアント構成を取得するためのコマンドラインツール

マシンが使用しているDNSサーバーの確認に進みましょう。 後で説明するように、これは現実に対応していない可能性があること、または透過的なDNSプロキシがある場合は誤解を招く可能性があることに注意してください。

情報が不十分な場合があります。たとえば、DNSサーバーがルーターであり、実際に使用されるDNSはルーターの構成によって異なります。 仮想マシンの場合、仮想ネットワークアダプタと仮想LANの設計により、実際のDNSサーバーのアドレスを隠すことができます。

macOSおよびLinuxでは、 /etc/resolv.conf に、DNS名の検索に使用されるネームサーバーが一覧表示されます。 ただし、Linux NetworkManagerはresolv.conf、を更新せず、Webブラウザーを含むほとんどのmacOSプロセスはそれを使用しません。 実際には、このファイルを無視することをお勧めします。

4.1. ウィンドウズ

ipconfig / all は、現在のすべてのTCP/IPネットワーク構成を表示します。 出力はパラメータのリストであり、「DNSサーバー」で始まる行に関心があります。

4.2. マックOS

scutil –dns は現在のDNS構成を報告しますが、出力は非常に冗長です。 これをフィルタリングして、関心のある情報をすぐに入手できます。 scutil –dns | grep’nameserver \ [[0-9]*\]’。

4.3. Linux

nmcli は、NetworkManagerを制御してそのステータスを取得するためのコマンドラインツールです。 その出力には、「DNS構成」を含むさまざまなセクションが含まれています。

5. DNSリークと透過的なDNSプロキシ

DNSハイジャック(DNSポイズニングまたはDNSリダイレクションとも呼ばれます)およびDNSスプーフィングは、DNSクエリの解決を覆すための慣行です。 エンドユーザーが解決するのが難しいこれらの問題に加えて、DNSリークがあります。

VPNを使用している場合、DNS要求が保護されていないDNSサーバー(多くの場合、インターネットサービスプロバイダー(ISP)のDNSサーバー)に到達すると、DNSリークが発生します。 DNSリークに起因する個人を特定できるDNSパケットは、特に厳格な検閲と個人的な影響の可能性がある国では、セキュリティとプライバシーに深刻な脅威をもたらします。

さらに、一部のISPは、「透過DNSプロキシ」を使用して、すべてのDNSルックアップ要求をインターセプトし、結果をプロキシします。 言い換えれば、彼らは私たちが知らないうちにDNSサービスを使用することを私たちに強制します。

そのため、実際に使用しているDNSサーバーをテストするための信頼できる方法が必要です。

5.1. DNSリークテスターのしくみ

DNSリークテスターは通常、Webサイトまたはコマンドラインスクリプトです。 どちらも、ドメインの権限のあるDNSサーバーと内部データベースを使用するサーバーに接続して、訪問者が使用するDNSサーバーを検出します。

より詳細には、テスターは、ランダムに生成された一意のサブドメインの下にあるリソースを装うクエリを生成します。 そのサブドメインは、 779298b9-57ac-40a3-9359-a482b113203a などのUUID(普遍的に一意の識別子)である可能性があります。 どのコンピューターでも、識別子がすでに作成された、または作成される予定の識別子と重複しないというほぼ確実なUUIDを生成できます。

この一意のサブドメインからリソースを取得するには、ブラウザまたはスクリプトにサブドメインのIPアドレスが必要です。 テスターはこれまでそのサブドメインの名前を使用したことがないため、権限のあるサーバー以外のDNSサーバーはIPアドレスを知ることができません。 したがって、ユーザーが使用する権限のないDNSサーバーは、テスターの権限のあるDNSサーバーにIPを要求します。

権限のあるDNSサーバーは、ドメイン名のランダムに生成された一意の部分(UUID)を、内部データベースでクエリを実行している権限のないDNSサーバーのIPと照合します。 さらに、テスターはユーザーのパブリックIPをクエリされたUUIDとペアリングしました。 テスターは、同じUUIDを共有するこれら2つのデータベーステーブルを結合することにより、ユーザーが使用する権限のないDNSサーバーを取得します。 不要なDNSサーバー(ISPのサーバーなど)の場合、DNSリークが発生します。

補足として、 サイトの所有者が権限のあるDNSサーバーを制御している場合、どのWebサイトでも使用しているDNSを検出できることは明らかです。 「好奇心旺盛な」Webサイトは、DNSリークを使用して、VPNにもかかわらず実際のISPを識別し、その結果、地理的な位置を確認することができます。 これは、地理的にブロックされたコンテンツの場合の問題であり、最悪の場合、私たちのアイデンティティの隠蔽を妨げる可能性があります。

5.2. DNSリークをテストするためのオープンソーススクリプト

Github macvk / dnsleaktest リポジトリは、DNSリークをテストするためのスクリプトを提供します。 Linux用のBashとPython、Windows用のmacOSとPowershellで利用できます。 3つのオペレーティングシステムすべてに、事前に構築された実行可能バイナリもあります。 内部的には、このスクリプトは bash.ws/dnsleak。に接続します

D7EAD / Faucet も同様のGitHubリポジトリであり、C ++のソースコードと、Windows用にプリコンパイルされた実行可能ファイルがあります。 舞台裏では、bash.wsにも接続します。

5.3. DNSリークをテストするサードパーティサービス

アルファベット順のオンラインツールには、 bash.ws、browserleaks.com、dnscheck.tools、dnsleak.com、dnsleaktest.com、ipleak.net、perfect-privacy.com、などがあります。 このリストは、あらゆる検索エンジンで同様のサービスを幅広く見つけることができるため、決して網羅的なものではありません。それらはすべて、ワンクリックテストを提供するWebサイトです。

もう1つのオプションは、Android用のDNSリークテストアプリです。 macvk / vpn-leaks-test、のおかげでDNSリークテスターをWordPressに統合したり、 Space2Walker/plugin.program.dnsleaktestのおかげでKodiにDNSリークテスターを統合したりすることもできます。

5.4. DNSリークテスト用のサーバーを実装する方法

サードパーティのサービスを使用する必要がない場合は、独自のサーバーを作成する必要があります。 nhdms / dns-leak-server リポジトリには、DNSリークをチェックするためにLinuxサーバーとそのDNS管理をセットアップするための手順が含まれています。

6. VPNを使用するときにDNSを変更する

VPNクライアントは多種多様であるため、この説明では潜在的なクライアントの構成を絞り込む必要があります。 したがって、のデフォルトインストールを使用すると想定します。公式OpenVPNクライアント、OpenVPNプロトコル互換サービスをサポートします。 Windows、macOS、Linux、Android、iOSで利用できます。

実際には、このクライアントは、ファイルに .ovpn 拡大。 多くの商用VPNサービスは、独自のクライアントの代わりに.ovpnファイルのセットを提供しています。

CiscoOpenDNSプライマリサーバー208.67.222.222を使用するとします。 デフォルトでは、詳細設定では、VPNトンネルがVPN DNSサーバーを定義していない場合、OpenVPNクライアントはフォールバックとしてGoogleDNSサーバーを使用します。 ただし、カスタムDNSの使用を強制するオプションはありません。

DNSを変更するには、Windowsのメモ帳、macOSのAquamacs、Gedit、LinuxのXedなどのテキストのみのエディターを使用して.ovpnファイルを手動で編集する必要があります。 の前にタグ、オプションを追加しましょう register-dns block-outside-dns 不在の場合。 1つ目は、クライアントがDHCPから受信した可能性のある他のサーバーよりも構成済みのDNSサーバーを優先するように強制します。 2つ目は、構成されたサーバー以外のサーバーへのDNS漏洩を防ぎます。 次に、オプションdhcp-optionDNS208.67.222.222を追加しましょう。

例を見てみましょう( xxxxの代わりににはVPNサーバーのIPアドレスがあり、その後にポート番号が続きます)。 この場合、プロトコルTCPとポート443を使用してファイアウォールをだまし、VPNトラフィックがHTTPSトラフィックであるかのように見せかけます。

client
dev tun
proto tcp
remote x.x.x.x 443
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
ignore-unknown-option block-outside-dns
block-outside-dns
verb 0
log /dev/null
status /dev/null
register-dns
dhcp-option DNS 208.67.222.222
<ca>

これで、VPNを切断し、新しい .ovpn ファイルをクライアントにインポートできます(必要に応じて、現在のVPNプロファイルを削除します)。 新しいプロファイルに接続した後、使用済みのDNSサーバーをすばやく確認できます。 dnsleaktest.com。 それらはCiscoOpenDNSサーバーである必要があります。 DNSクエリはグローバルデータセンター間で分散されるため、IPは異なる場合があります。

さらに、人気のある最近のLinuxディストリビューションでは、OpenVPNクライアントは必要ありません。 経由のOpenVPN接続のサポート .ovpn ファイルは、DNSを変更する機能を備えており、NetworkManagerアプレットにすぐに統合されています。

7. 結論

このチュートリアルでは、予想とは異なる可能性のあるVPN接続中にDNSが実際にどのように使用されるかを確認しました。 それらを検出して変更する方法を見ました。

この詳細な調査は、プライバシーがすぐに制御できなくなる理由を理解するのに役立ちました。 ただし、重要な監視コンテキストでの匿名ブラウジングには技術的な側面だけでなく行動的な側面も含まれるため、DNSサーバーは覚えておくべき多くの側面の1つにすぎません。