自作DNSサービスにおけるネットワーク体験の向上方法
Categories:
ネットワーク品質とネットワーク体験
何もしないで、最高のネットワーク体験を享受できる
明確にする必要がありますが、ここでのネットワーク品質とネットワーク体験は異なる概念です。通信はプロセスであり、複数のデバイスが関与します。個々のデバイスの上下り性能をネットワーク品質と呼び、端対端の通信全体の表現をネットワーク体験と呼びます。
ネットワーク品質の測定方法
ネットワーク品質を測定するには、通常複数の指標と方法が関与します。以下は一般的なネットワーク品質測定の方法と指標です:
- 帯域幅(Bandwidth):帯域幅はネットワークのデータ転送能力を指し、通常は1秒あたりのデータ量(ビット/秒)で測定されます。より高い帯域幅は一般的により良いネットワーク品質を示します。
- 遅延(Latency):遅延はデータが送信元から受信先に到達するまでの時間を指します。低い遅延はデータ転送速度が速く、ネットワーク応答が早いことを意味します。
- パケット損失率(Packet Loss Rate):パケット損失率はデータ転送中に失われるデータパケットの割合を指します。低いパケット損失率は一般的により良いネットワーク品質を意味します。
- ジッタ(Jitter):ジッタはデータパケットの転送中の変動や揺らぎを指します。小さいジッタはネットワークの安定性が高いことを示します。
- スループット(Throughput):スループットはネットワークの実際のデータ転送量を指し、通常は単位時間あたりのデータ転送量で測定されます。より高いスループットはより良いネットワーク品質を示します。
- ネットワークトポロジ(Network Topology):ネットワークトポロジはネットワーク内のノード間の接続方法と構造を記述します。合理的なネットワークトポロジ設計はネットワーク性能と品質を向上させることができます。
- サービス品質(Quality of Service, QoS):QoSはネットワークデータ転送で許容できるサービス品質を実現するための技術とメカニズムのセットです。QoSは流量制御や優先度キューなど様々な方法で実装できます。
- ネットワークプロトコル分析(Protocol Analysis):ネットワークプロトコルとデータパケットを分析することで、ネットワークの性能指標と問題を把握できます。例えばWiresharkなどのネットワーク分析ツールを使用します。
これらの指標と方法を総合的に活用することで、ネットワーク品質を包括的に評価し、ネットワーク性能の強みと改善の余地を特定できます。しかし、これらは事業者が関心を持つ指標であり、一般ユーザーにとっては適切な価格のルーターを購入すれば十分です。現代のルーターにはネットワーク品質を自動調整する機能が備わっています。
ネットワーク体験の測定方法
まずアクセス可能性です。アクセスできることが最も重要な基盤です。したがって、ドメイン名解決サービスは基本的な能力を満たす必要があります:
- 包括的であること:上位DNSサービスは権威的で、より多くのドメインを解決できる必要があります
- 正確性:解決結果は正確でなければならず、解決エラーがあってはなりません。一部のDNSプロバイダーは特定のドメインを乗っ取ったり汚染したりして、広告ページにリダイレクトすることがあります
- 及時性:IPアドレスが変更された後、古いIPアドレスを返すのではなく、迅速に解決結果を更新する必要があります
次に、DNS解決結果のIPが提供できるサービスのネットワーク品質です。
インターネットサービスが提供できるネットワーク品質は通常地域に強く依存し、サーバーとクライアントが地理的に近いほどサービス品質は良くなります。
多くの有料DNS解決プロバイダーは地域ごとに異なるIPを解決する機能をサポートしています。例えば、以下はアリババクラウドが提供できる一部のサービスです:
(1)キャリア回線:中国联通、中国電信、中国移動、教育ネットワーク、鵬博士、広電ネットワークへのスマート解決をサポートし、省レベルまで細分化可能
(2)海外地域回線:サポート可能、大陸と国レベルまで細分化可能
(3)アリババクラウド回線:サポート可能、各地域まで細分化可能
(4)カスタム回線:カスタムIPアドレス範囲のスマート解決をサポート

地域ごとに異なるIPを解決するメカニズムにより、異なる地域のユーザーが同じドメイン名にアクセスしても異なる解決結果を得られ、自然とユーザーに近いサーバーに優先的に解決され、より良いネットワーク体験が得られます。
ユーザーのネットワーク体験を最適化することは、一般的にサービスプロバイダーがユーザーの実際のIPアドレスに基づいて行うものです。つまり、ほとんどのユーザーにとって何もしないで、最高のネットワーク体験を享受できるということです。
自作DNSサービスの上流DNSサービス選定方法
中国語インターネットで検索できるすべての資料は、アリババクラウド、騰訊雲、Cloudflare、Googleなどの大手企業のDNSサービスを推奨しています。これらのDNSはネットワークサービスのアクセス可能性を満たすことができます。なぜなら、それらは包括的で正確かつタイムリーだからです。しかし、必ずしも最も近いサーバーIPに解決してくれるとは限りません。
インターネット上の大量の資料が大手企業のDNSサービスを推奨するには歴史的背景があります。
かつて中国のISP事業者は、DNSハイジャックとHTTPの中間者攻撃だけでユーザーのトラフィックハイジャックを実現し、広告配信を実現していました。現在ではhttpsの普及により、このようなハイジャック方法はあまり見られませんが、一部の地域の集合住宅ブロードバンドではまだこの問題が存在する可能性があります。DNSハイジャックの問題に対処するには、DNS IPを変更しても効果がありません。なぜなら、53番ポートを対象としたハイジャックが可能で、ほとんどのDNS要求は暗号化されていないからです。
さらに、特殊なユーザーは特殊なウェブサイトにアクセスしたいと考えていますが、一部のDNSプロバイダーはIP汚染の問題があり、特殊なウェブサイトのドメイン名を間違ったIPアドレスに解決してアクセス不能にすることがあります。一方、権威的なDNSプロバイダーはこのような問題が少ないです。
したがって、ここでは3つの問題を考慮する必要があります:
- IP汚染
- DNSハイジャック
- 最適サービス体験
権威的なDNSプロバイダーは問題1を解決でき、暗号化プロトコル(DoT/DoH/QUIC)は問題2を解決できます。
問題3を解決したい場合は、ブロードバンド事業者のデフォルトDNSサービスを使用する必要があります。本文の冒頭で述べたように、何もしないで、最高のネットワーク体験を享受できるということです。
しかし、追求心のあるユーザーまたは特殊ユーザーの場合、以下の内容ではAdGuardHomeとClashの2つのツールの設定方法を紹介し、この3つの問題を同時に解決する方法を説明します。
権威的かつスマートなDNSサービス
AdGuardHome設定
AdGuardHome、以下ADGと略す。これはネットワーク広告ブロッカーとプライバシー保護ソフトウェアであり、DNSサービスでもあります。カスタム上流DNSサービスとカスタムDNSルールをサポートしています。
ADGのデフォルトの上流DNS要求方法はロードバランシングです。ユーザーは複数の上流を設定でき、ADGは過去のDNSクエリ履歴に基づいて重み付けし、最も速いDNS応答の上流を選択します。簡単に言えば、ADGはより速いDNS上流をより高い確率で選択し、最適でないDNS上流を低い確率で選択します。
3番目のオプション最も速いIPアドレスを選択できます。

このオプションの利点は、ADGが自ら上流DNSのIP解決結果をテストし、遅延が最も低いIPを下流クライアントに返すことです。以下はbilibiliの通常解決結果です。

IPが非常に多くあることがわかります。もしADGがIP解決結果をテストせず、すべてのIPを下流クライアントに返したら、クライアントはどうするでしょうか?
一部のクライアントは最初のIPを選択し、一部は最後のIPを選択し、一部はランダムにIPを選択します。いずれにしても、最適な選択とは限りません。
最も速いIPアドレスオプションを有効にすると、以下はbilibiliの最適化解決結果です。このステップによりネットワーク体験が向上します。

なぜ最も速いIPアドレスがデフォルト選択ではないのでしょうか?この機能はとても便利なのに、なぜデフォルトで有効化しないのでしょうか?
その理由はすべての上流DNSのIP解決結果を待つ必要があるためです。上流に複数のDNSプロバイダーがある場合、上流のクエリ時間はその中で最も遅いものに合わせられます。例えば、平均サービス時間50msのアリババと平均サービス時間500msのGoogleの上流がある場合、ADGの上流クエリ時間は500ms+になります。
したがって、ユーザーがこのオプションを設定する際には、上流DNSのサービス品質と数量を慎重に検討し、欲張ってはいけません。 ここでは2つの上流を設定することを推奨します。1つは権威的(https://dns.alidns.com/dns-query)、もう1つはキャリアDNSです。
キャリアのDNS IPは地域によって異なります。自分の地域のキャリアDNSを確認するにはこちらをクリックしてください。
または、ルーターの管理画面でキャリアが推奨するDNSを確認することもできます:

Clash設定
特殊ニーズのユーザーはDNSハイジャックとIP汚染の問題を重視しつつ、最適サービス体験を諦めたくない場合、Clashのdnsモジュールを使用できます。
nameserver-policyを使用すると、異なるドメイン名に異なるDNSプロバイダーを使用できます。以下は設定例です:
dns:
default-nameserver:
- tls://223.5.5.5:853
- tls://1.12.12.12:853
nameserver:
- https://dns.alidns.com/dns-query
- https://one.one.one.one/dns-query
- https://dns.google/dns-query
nameserver-policy:
"geosite:cn,private,apple":
- 202.103.24.68 # 自分の所在地のキャリアDNS
- https://dns.alidns.com/dns-query
"geosite:geolocation-!cn":
- https://one.one.one.one/dns-query
- https://dns.google/dns-query
その意味は:
- default-nameserver: 設定
nameserver内のDNSサービスのIPを解決するために使用 - nameserver: ネットワークリクエストのドメイン名を解決するために使用
- nameserver-policy: 戦略に基づき、異なるドメイン名に異なるDNSサービスを使用指定
閲覧ありがとうございました
この記事がお役に立てば、ぜひいいねをお願いします。コメントでの議論も大歓迎です。