特集

「家庭用ルーター」って何をする機器? 中ではどんな処理が行われている?

ネットワーク層でのルーター本来のお仕事と、利便性のためのDNS機能についての雑学

家庭用ルーターのイメージ(「いらすとや」より)

 TCPを使用したDNSの問い合わせ(クエリ)により、一部の家庭用ルーター(ホームルーター)で問題が起きている可能性があるという記事[*1]を8月に掲載したところ、予想外の大きな反響があった。ホームルーターという装置は、利用者にとってインターネット接続を実現するための重要な機器である。ただ、どんな“お仕事”をしているのかあまり知られていないのが実情のようだ。

 そこで今回は、インターネット機器/サービスの関係者への取材などをもとに、歴史的な話も織り交ぜながら、ホームルーターを理解するうえでポイントになりそうな話題をいくつか取り上げていこうと思う。具体的には、一番重要なIPパケット(以降、単にパケットと表記する)の送受信と、IPv4では必須のNAT機能について(本稿では、NATという言葉を概念として使用する)述べたのちに、先の記事の補足として、今どきのDNSではTCPとEDNS0のサポートは必須である根拠を述べる。

[目次]

  1. ネットワーク層での動作こそがルーターの基本
    - ルーターとしての仕事はネットワーク層で行われる
    - NATにおいて管理テーブルが持つエントリー数はとても重要
  2. DNSの機能もホームルーターへ標準的に搭載
    - 利用者の利便性実現とフォワーダーとしての機能で構成されるDNS機能
    - 今どきのDNSはTCPとEDNS0のサポートが必須
  3. 求められる“変化していくDNS”への対応

[*1]…… 2023年8月1日付記事『WindowsのChromeやEdgeでネットにつながりにくくなる現象、一部の家庭用ルーターが原因かも? DNSの“TCPクエリ”うまく扱えない機種も存在。ChromeのTCPクエリ送信が引き金に』
https://internet.watch.impress.co.jp/docs/event/1520427.html

ネットワーク層での動作こそがルーターの基本である

 日本において商用インターネット接続サービスが始まったのは1992年11月。AT&T Jens(当時)が、UUCP[*2]接続による「SPIN」[*3]を提供したのが最初である。その翌月(1992年12月)にはインターネットイニシアティブ(IIJ)が設立され、1993年11月にIPによるインターネット接続サービスを開始する。この際にIIJは、DOS/VパソコンにBSD/OSというOSを組み合わせ、PPP[*4]を組み込んだものを「ルーター」として貸し出していた[*5]

 ホームルーターは、インターネットサービスプロバイダー(ISP)にとってサービスを提供するために必要なものである。当初は必要最低限の機能で提供されていたであろうルーターは、その後のインターネットの普及に伴い、便利と思われる機能を追加しながら「ホームルーター」として進化していくことになる。

[*2]…… UUCP(Unix to Unix Copy)は、その名の通りUNIXマシン同士でデータ転送を行うためのプログラムである。プロトコルとしての説明も多く、その際にはUnix to Unix Copy Protocolとして紹介される。

[*3]…… 翌年、IP接続サービスとして「InterSPIN」が開始される。

[*4]…… PPP(Point-to-Point Protocol)とはコンピューター同士が1対1の通信をするためのプロトコルであり、電話網あるいはインターネット上で通信をする際に使用される。
RFC 1661「The Point-to-Point Protocol(PPP)」(JULY 1994)
https://datatracker.ietf.org/doc/html/rfc1661

[*5]…… 実体としては、DOS/Vパソコンを使用し、フロッピーでブートしてシリアルポートで専用線モデムに繋がっているものであった。
https://www.iij.ad.jp/30th/history/

ルーターとしての仕事はネットワーク層で行われる

 現在のホームルーターに求められるものは、一にも二にも、高いパケットの転送性能である。実際の通信速度はISP側の設備やインターネット回線の混雑状況など外部要因の影響を受けてしまうが、有線、無線(Wi-Fi)ともにホームルーター単体で十分な速度が出せることが重要である。

 以下の図を見ていただきたい。これらの図はホームルーター内部におけるパケットの流れを理解してもらうためのもので、図1は、インターネットのTCP/IP 4階層モデルを示したものである[*6]。もう1つの図2は、ホームルーターにおいてパケットの転送制御がどこで行われているかをTCP/IP 4階層モデルを使い概念的に示したものである。図では単に「物理層」と書いたが、そこは「イーサネット」「無線LAN」「PPP」のいずれかが該当すると考えていただきたい。

図1 インターネットのTCP/IP 4階層モデル
図2 ホームルーターにおける基本的なパケットの流れ

 ただ、この図2の説明では具体性が見えないので、図3を描いてみた。この図は筆者がイメージを説明するために描いたものなので正確ではないが、だいたいの雰囲気はつかんでいただけると思う。説明上、LAN側にある端末から送信されたパケットが、ホームルーター内でどう処理されるかの部分だけに限定している点はご了解いただきたい。

図3 ホームルーターにおけるパケットの処理イメージ

 ここで特に見ていただきたいのは、図3にある「送信先となるIPアドレスを参照して判定」しているという部分である。

 インターネットでは、エンドツーエンド(end-to-end)で通信を行う。この仕組みでは、ネットワークは余計なことをせずに純粋にデータを目的の相手まで運ぶだけで、通信制御やエラー検知など高度な処理は「end(終端)」となるシステムで行う。このことを念頭に置いていただいたうえで説明すると、パケットの送信先となるIPアドレスを参照することで、ホームルーターは単なるネットワーク上の通過点であるのか、ホームルーター自体が終端となるのかが判定できる。つまり、自分自身が通信上の終端でなければ、入ってきたパケットの転送処理を淡々と行なえば良いのである。

 一般的に、インターネット利用者が発生させる通信のほとんどはWebアクセスによるものである。その際に入ってくるパケットの宛先は通信したい相手先のサーバーになるであろうから、ほとんどがネットワーク層の中だけで処理される(図2の薄い青の部分)。

 また、概念的には、LAN内でIPv6のグローバルIPアドレスを使用している場合、IPoE回線での通信であればプロトコル変換不要で直接転送できる。一方、プライベートIPアドレスを使用したIPv4のパケットの場合は、NATの処理や、必要に応じてカプセル化[*7]の処理が途中で加わるなど、複雑なものとなる(NATは、ネットワーク層の処理である)。

 読者の中には「それだけ?」と感じる方もいらっしゃると思うが、そもそもとしてIPというプロトコルは(特にルーターが行う)転送にかかる処理を単純化して高速化することを目的の1つとして設計されている[*8]。それがゆえに処理のハードウェア化が可能であり、実際に多くのホームルーターで専用チップが使われている。

 ちなみに、よく聞く誤解として、LAN内にある端末とホームルーター間にはセッションが張られていて、その張れるセッション数がルーターとしての性能を決めるというものがある。このような誤解が起こる理由は不明だが、通常、Webアクセスをする際に端末とホームルーターとの間にセッションが張られることはない[*9]

 端末(のアプリケーション)がセッションを張る相手は、通信相手となるサーバーである[*10]。ホームルーターは、ただひたすら入ってきたパケットにNATやプロトコル変換など必要な処理を加えて転送するだけである。

[*6]…… 興味がある方は検索するとさまざまな解説が見つかると思うので、そちらを参照してほしい。

[*7]…… ここでいうカプセル化とは、IPv4のパケットをIPv6のパケットの中に包み込むように収める処理のことである。IPoEのようなIPv6ネットワーク内ではIPv6のパケットだけを流したいので、そのネットワークに入る直前でカプセル化し、ネットワークを出るところでそのカプセルからIPv4のパケットを取り出すということを行う。

[*8]…… IPv4のヘッダにはさまざまなオプションや機能拡張のための領域が用意されていたが、長年の運用の結果ほとんど使われることのない機能や性能向上の制約になっている部分が明確になってきた。そこで、IPv6ではヘッダの内容を整理し、ルーティング処理の負荷軽減を目的としたヘッダの簡素化を行っている。また、IPv4では中継ノードでのパケットのフラグメント(分割)が可能であった(仕事の一部であった)が、IPv6ではパケットのフラグメントが禁止された。最小MTUについて、IPv4では576バイトであったが、IPv6では1280バイトとなった。このように、IPv6ではIPv4よりもルーター上での高速化がさらに行いやすくなっている。

[*9]…… 例外はHTTP Proxyを使用している場合であるが、ホームルーターにHTTP Proxyを搭載している事例を聞いたことはない。また、HTTPというプロトコルにセッションという概念はそもそも存在しない。

[*10]…… ネットワークにおけるセッションとは、通信の接続を確立してから切断するまでを指す。

NATにおいて管理テーブルが持つエントリー数はとても重要

 次に、NATについて簡単に説明する。多くの方がご存知のように、NATは1つのグローバルIPアドレスを複数の機器で共有するための仕組み(IPアドレス変換技術)である。初期のNATはIPアドレスのみを対象としていたが、その発展形としてポート番号もその対象とするNAPT(Network Address Port Translation)が誕生した。今では、このNAPTがNAT技術の主流である。

 NAT(NAPT)は、LAN内で使われるプライベートIPアドレスとインターネットで使われるグローバルIPアドレスをポート番号まで含めてアドレス変換する。図4はその際に使われる管理テーブルのイメージで、通信開始時に登録(エントリー)してその通信の管理を開始し、通信終了時にそのエントリーを削除して管理を終了する。

図4 NATテーブルのイメージ

 ここで考えなくてはいけないのは、NATテーブルのエントリー数には上限があるということである。例えば、その数が1024だとすると、1024という上限を超えると新規の通信ができなくなる。現代のアプリケーションは多数のポートを使用して同時に複数のセッションを張るため、想像以上にNATテーブルは消費されてしまうのである。したがって、このNATテーブルのエントリー数は多ければ多いほど良い。

 では、NATテーブルのエントリーは、いつ削除されるのであろうか。TCPの場合はプロトコル上、FINでコネクションの終了を検知することができるため、そのタイミングでエントリーを削除すれば良い。しかし、UDPの場合は通信の終了を検知することができないため、無通信時間をもとにタイマーを使用するかたちでエントリーを削除するしかない[*11]。NATにとって、UDPは扱いが難しいプロトコルなのである(DNSは、基本的にUDPを使用する)。

 余談めくが、ホームルーターにおいてNATテーブルのエントリー数は搭載するメモリの量に依存するため、ハードウェア的に決まってしまうことが多い。また、最近ではセキュリティ対策としてSPI(Stateful Packet Inspection)という機能を使用するものも出てきている。SPIとはセキュリティ機能の1つで、外部からの攻撃対策として、例えば内側から通信を開始した場合の戻りパケットのみを受け取るようにする(それ以外は弾く)ものである。SPIもNATテーブルのような管理テーブルを持つことから、そのエントリー数で通信可能な数が制限されてしまうということが起こる。

 SPIは主としてIPv6で使われるが、IPv4でもSPIは使えることから、ホームルーター側の構成によっては、IPv4使用時にはNATだけでなくSPIのテーブルエントリー数にも気を配らなければいけないとことにもなる。ホームルーターが搭載するメモリの量がますます問われることになりそうである。

 NATを使用する場合には別の視点として、例えばCGN(Carrier-Grade NAT)やIPv4アドレスの共有サービス(MAP-EやDS-Lite)などを使用する際の問題も考えなければいけない。それらサービスを使用している場合は使えるポート番号が(256とか512、1024というように)著しく少ないことから、送信元ポート番号の枯渇という問題が発生しやすい。この場合は、NATテーブルのエントリー数に余裕があってもポート番号の不足によって通信に制約が出てしまう場合もあるという点にも注意が必要であろう。NATは便利な機能であるが、デメリットも多いのである。

[*11]…… RFC 4787「Network Address Translation (NAT) Behavioral Requirements for Unicast UDP」によれば、UDPのタイムアウトを2分未満にしてはならず、デフォルト値としては5分以上が推奨されている。
BCP 127, RFC 4787「Network Address Translation (NAT) Behavioral Requirements for Unicast UDP」(JANUARY 2007)
https://datatracker.ietf.org/doc/html/rfc4787

DNSの機能もホームルーターへ標準的に搭載

 現在のホームルーターには、ほぼ全てにDNSの機能が搭載されている。DNS機能が標準的に搭載されるようになったのは、主として利用者の利便性を高めるためである。

 図5は、NECプラットフォームズ株式会社の川島正伸氏が「Internet Week 2010」で使用したスライドにある「DNS Proxy機能の必要性」というページである[*12]。ここでは細かなことを言わず、Home Gatewayとは現在のホームルーターのこと、DNS ProxyとはDNSの機能を提供するものであると考えていただいてかまわない。

 このスライドには、ホームルーターにDNS機能があることのメリットが示されており、設定画面の呼び出しやすさや、DNSサーバー選択問題を利用者から切り離すことなどが目的であることが書かれている。加えて、現在ではセキュリティ関連の機能と連動する目的でも使われているそうだが、それらの情報からは確かにホームルーターにDNS機能を搭載することの動機も、そこから得られるメリットも十分にあるのだと感じる。

図5 DNS Proxy機能の必要性

 とはいえ、先の記事で書いたような「ホームルーターに搭載されたDNS機能がTCPによるクエリを正しく処理できなかったことが発端となり、名前解決が正常に行われないという問題が起きた」ことを考えると、本当にこのかたちが良いのか悩ましくなる。加えて、確認したわけではないが、UDPでも512バイトを超えるサイズを扱えない(EDNS0というDNSの拡張プロトコルをサポートしない)実装があるという話も聞いてしまうと、なおさらである。

 具体的にその話に入る前に、まずはホームルーターに搭載されているDNS機能とはどのようなものかを見ていきたいと思う。

[*12]…… この当時、川島氏の所属は「NECアクセステクニカ株式会社」である(のちにNECプラットフォームズ株式会社に統合)。川島氏の許可を得て掲載した。
「HomeGatewayにまつわるDNS話あれこれ」(Internet Week 2010)
https://www.nic.ad.jp/ja/materials/iw/2010/proceedings/d2/iw2010-d2-06.pdf

利用者の利便性実現とフォワーダーとしての機能で構成されるDNS機能

 DNSに詳しい方はご存知だと思うが、DNSによる名前解決は、「スタブリゾルバー」「フルサービスリゾルバー」「権威DNSサーバー」という異なる3種類の機能[*13]が連携することで実現される(図6)[*14]

図6 DNSによる名前解決

 動作としては、利用者が使用する端末からアプリケーションがスタブリゾルバーを呼び出し、フルサービスリゾルバーに向けてクエリを送信する。この例では「www.example.jpのIPアドレスを教えてほしい」という問い合わせ内容にしてあるが、フルサービスリゾルバーはそれを受けてドメイン名をなぞるように権威DNSサーバーに問い合わせを行う。最終的には「example」のゾーンを管理している権威DNSサーバーに当該データがあるので、その結果が最初に問い合わせをしたスタブリゾルバーに戻されるという流れになる。

 では、こうした仕組みの中でホームルーターはどの位置に存在し、何をするのであろうか。それを示したのが図7である。図ではクエリの流れしか記述していないが、DNSの応答(レスポンス)では逆のことをするだけである(説明では、IPv4のネットワークであることを前提とする)。

図7 DNSの仕組みの中でのホームルーターの位置と役割

 ホームルーターはLAN内の端末に自分自身をDNSサーバーとして見せているため、端末から送信されたクエリは一度ホームルーターで終端する。その後、受け取ったクエリのヘッダを書き換えて(送信元をホームルーターのグローバルIPアドレスに書き換え、送信先をホームルーターに登録されているフルサービスリゾルバーのグローバルIPアドレスに書き換えて)フルサービスリゾルバーに送信する。フルサービスリゾルバーが得た結果は送信元であるホームルーターに送信され、ホームルーターは大元のクエリを送信した端末のスタブリゾルバーにその結果を応答する。

 分かりやすく言うならば、ホームルーターは、DNSパケットのヘッダを書き換えてクエリを転送(forwarding)[*15]しているだけなのである。そして、この機能のことを「フォワーダー(forwarder)」と呼ぶ[*16]

 以上は、インターネット全体での名前解決の話であるが、ホームルーターのDNS機能にはインターネット上での名前解決をしない部分もある。例えば、ホームルーターの設定画面をドメイン名のようなかたちで呼び出せるようになっている(前述の図5のスライドでは「web.setup」)けれども、それを実現するためにHOSTS.TXT[*17]を使っていたりする。また、セキュリティ関連など利用者に提供するサービスとリンクするための情報も、ホームルーターのDNS機能に含まれるはずである。イメージ的には図8のような感じになるであろうか。

図8 ホームルーターが持つDNS機能のイメージ

 そういえば、先の記事では、不具合の回避策として報告にあった通り「通信に問題が出たユーザーはホームルーターのDNS機能を使わずにISPのキャッシュDNSサーバーやパブリックDNSを使うようにする」と書いたのだが、この方法をそのまま使うと、設定時は良いが、元に戻そうとするときに設定画面が従来の方法(名前で呼び出す)でできないということが起こる可能性が出てきてしまう。これは、ホームルーターのDNS機能を使うことができなくなるからである。ネットワークの仕組みが理解できていてIPアドレス直打ちでアクセスできる人もいると思うが、そうでない人は困ってしまうかもしれない。

 ホームルーターの内部や仕様に関する情報はなかなか表に出ないため、推測が多く、まとまりがないが、ホームルーターが持つDNS機能は利用者の利便性のためにあるのであって、インターネットにおけるDNSという面から見ると多くの場合でフォワーダーとしての機能しか持ち合わせていない。

 ちなみに、図3では図が複雑にならないようにそう描いたのだが、本来はトランスポート層の部分はプロトコルごとに用意されるものである(図9)。例えば、古いホームルーターでDNS機能としてのフォワーダーがTCPによるクエリを処理できなかった場合、トランスポート層でTCPがサポートされていない可能性がある[*18]。また、新しいプロトコルとしてのQUIC[*19]は、ルーターから見ると他のUDPの通信と同じように扱われる。

図9 トランスポート層の部分はプロトコルごとに用意される

[*13]…… この種の説明で読者の理解を難しくしているのは、実体としては同じものなのに使われる用語が異なるという点がある。しかも、それが何通りもある場合が見られるのでなおさらであろう。図では、「スタブリゾルバー」の別称として「DNSクライアント」を、「フルサービスリゾルバー」の別称として「キャッシュDNSサーバー」を紹介している。余談だが、筆者はフルリゾルバーという表記が好きではない。言葉として短くなるが、「フル」は「サービス」にかかる(フルサービス)なのに、その肝心のサービスという言葉が消えてしまうからである。

[*14]…… 本稿では、DNS自体の解説は行わない。本格的に勉強したいという方には、「DNSがよくわかる教科書」(SBクリエイティブ株式会社、340ページ)をお勧めしたい。
https://www.sbcr.jp/product/4797394481/

[*15]…… forwardingは、名前解決のためにそのクエリのRD(Recursion Desired)ビットを“1”に設定(=再帰問い合わせを指定)して別のDNSサーバーに送信する処理のことである。forwardingはDNSリゾルバーの機能であり、単なる中継とは異なる点に注意していただきたい。

[*16]…… フォワーダーは、RFC 2308において「問い合わせの名前解決にあたり、権威ネームサーバーの連鎖を直接たどる代わりに使用されるネームサーバー」と記述されるが、微妙な表現で明確化されていない。一方、DNS Proxyについては、実装のガイドラインがRFC 5625として出ていたりする。どちらの言葉も現在の用法と一致しているように感じられないため、そう呼ばれているという認識で良いような気がしている。RFC 5625については、株式会社日本レジストリサービス(JPRS)から日本語の参考訳が公開されているので、そちらを紹介する。
RFC 2308「Negative Caching of DNS Queries (DNS NCACHE)」(MARCH 1998)
https://datatracker.ietf.org/doc/html/rfc2308
RFC 5625「DNSプロキシーの実装ガイドライン」(2009年8月)
https://jprs.jp/tech/material/rfc/RFC5625-ja.txt

[*17]…… ホスト名とIPアドレスの対応付けを1行単位で記載したテキストファイル。インターネットの初期に主流であった管理方式である。

[*18]…… 後述するが、TCPを用いたクエリに対応することが必須とは考えられていなかった時代があったことは事実なので、古いホームルーターがTCPをサポートしていなくてもおかしくはない。

[*19]…… UDPによる高速化とTCPのような通信の信頼性を提供する新しいトランスポートプロトコル。2021年に標準化され、今後急速に普及する可能性がある。例えば、HTTP/3はQUICをトランスポートとして標準化が進められている。
RFC 8999「Version-Independent Properties of QUIC」(MAY 2021)
https://datatracker.ietf.org/doc/html/rfc8999
RFC 9000「QUIC: A UDP-Based Multiplexed and Secure Transport」(MAY 2021)
https://datatracker.ietf.org/doc/html/rfc9000
RFC 9001「Using TLS to Secure QUIC」(MAY 2021)
https://datatracker.ietf.org/doc/html/rfc9001
RFC 9002「QUIC Loss Detection and Congestion Control」(MAY 2021)
https://datatracker.ietf.org/doc/html/rfc9002

DNS機能にはTCPとEDNS0のサポートが必須

 市中にあるホームルーターの中には、512バイトを超える大きさのDNSメッセージを扱えないものが存在すると言われる。おそらく、古い時代のものであったり、価格のために必要な仕様を切り落とした製品であったりするのだろうが、そのようなホームルーターを使用しているとDNSの名前解決がうまくいかず接続に問題が生じる可能性が高い。

 時期を失念してしまっている[*20]ので恐縮だが、かつてAppleのiOSの配布においてAリソースレコードのレスポンスが512バイトを超えてしまい、それを正しく処理できない環境下で接続障害が起こったことがあるはずである[*21]。また、2011年にはJPCERTコーディネーションセンター(JPCERT/CC)から、「大きなサイズのDNS応答の取り扱いの問題」という注意喚起も出ている[*22]。このように、サイズの大きなDNSメッセージ問題は古くから存在する。

 インターネット技術の標準化を推進するIETF(The Internet Engineering Task Force)では、この問題の解決策として2013年に、DNSのプロトコルを拡張する「EDNS(Extension Mechanisms for DNS)」という仕様を策定した[*23]。EDNSでは、バージョンを示すために「EDNS0」もしくは「EDNS(0)」と記述する。

 EDNS0はその名の通り、DNSのプロトコルを拡張するものである。TCPにフォールバックせずに、通信にかかる負荷が小さいUDPのまま512バイトよりも大きなDNSメッセージを扱えるようにするものだ。そして、DNSをIPv6やDNSSECに対応させる際にはこのプロトコルが必須であるとしている。

 ちなみに、DNSメッセージサイズの大きさが512バイトとなったのは、IPにおいてパケットがネットワークの経路上で分割されずに届く大きさとして決められている576バイト[*24]に、UDPヘッダとDNSのメッセージが収まるようにしたためである。

 TCPについては先の記事に書いた通り、2016年3月に発行されたRFC 7766[*25]により、UDPを使用せず最初からTCPで問い合わせしてもよいことになっている。つまり、最初からTCPを用いたクエリを出すことは何ら問題が無いのである。

 このところDNSのメッセージサイズは増加する傾向にあり、512バイトでは足りないということがまま起きるようになっている。そう考えると、TCPやEDNS0のサポートは、ホームルーターにとってすでに必須のものであろう。サポートされていないホームルーターは選ぶべきではないとさえ言える[*26]

[*20]…… 2012年ごろか、それより前であったような記憶がある。

[*21]…… digコマンドが使えるのであれば、「dig appldnld.apple.com」を実行してみていただきたい。純粋にWindows環境しかないのであれば、コマンドプロンプトから「nslookup -debug appldnld.apple.com」と入力して実行すると良いだろう。512バイトを超えるか否かということよりも、返ってくるレスポンスの大きさを体験してほしい(環境が古いと“NOEDNS”オプション(EDNS0を使わない指定)を付ける必要があるかもしれない)。

[*22]…… 「大きなサイズのDNS応答の取り扱いの問題」(JPCERT/CC)
https://www.jpcert.or.jp/tips/2011/wr111301.html

[*23]…… RFC 6891「DNSの拡張方式(EDNS(0))」(2013年4月)
JPRSから日本語の参考訳が公開されているので、そちらを紹介する。
https://jprs.jp/tech/material/rfc/RFC6891-ja.txt

[*24]…… RFC 760「DOD STANDARD INTERNET PROTOCOL」の「3.1. Internet Header Format」には、全てのホストは576オクテット(=バイト)のデータグラムを受け入れなければいけないと書かれている。また、576オクテットは「reasonable sized」であり、512オクテットのデータブロックと64オクテットのヘッダを足したものであると書かれている。
RFC 760「DOD STANDARD INTERNET PROTOCOL」(January 1980)
https://datatracker.ietf.org/doc/html

[*25]…… DNSではUDPを使うのが一般的である(RFC 1123には「MUST send a UDP query first」と書かれていた)が、RFC 5966を経て2016年3月に発行されたRFC 7766により「TCP MAY be used before sending any UDP queries.」と再定義され、UDPを使用せず最初からTCPで問い合わせしてもよいことになった。
RFC1123「Requirements for Internet Hosts -- Application and Support」(October 1989)
https://datatracker.ietf.org/doc/html/rfc1123
RFC 5966「DNS Transport over TCP - Implementation Requirements」(August 2010)
https://datatracker.ietf.org/doc/html/rfc5966
RFC 7766「DNS Transport over TCP - Implementation Requirements」(March 2016)
https://datatracker.ietf.org/doc/html/rfc7766

[*26]…… UDPを使用せず最初からTCPで問い合わせしてもよいとしたRFC 7766は、2016年3月の発行である。RFCが発行されてから、その規格が製品に反映されるまでにはそれ相応の期間(半年から1年以上)がかかると思われる。判断は人によるが、その点を含んでも2018年以降の製品で未対応があるとすると、やや問題があると判断されても仕方がないであろう。

求められる“変化していくDNS”への対応

 今現在も、DNSはさまざまなかたちで変化している。その主な動機と目的は、主としてセキュリティ対策である。インターネットが社会に浸透してきたことで経済活動とも密接に関わるようになり、より安全な仕組みを社会が要求するようになったこと、また、2013年のスノーデン事件[*27]以降、個人のプライバシーを守ることに関心が集まっているということもある。

 通信の暗号化はDNSにも及んでいるし、DoH(DNS over HTTPS)のようにDNSのやり取りをWebアクセスのトラフィックの中に混ぜてしまい、監視者から見えにくくなるようにしようという仕組みも普及しそうだ。また、HTTP/2にあった欠点を解消するために策定されているHTTP/3では、QUICをトランスポートプロトコルとしている。そして、このQUICはDNSでも使われる。DNSSECという課題も忘れてはいけない。気になることはたくさんあるのだ。

 いずれにしても確実に言えることは、ホームルーターについては、メーカーの技術力、開発力、そして製品企画における判断力がより強く求められるようになったということである。各メーカーの皆さまの頑張りに期待したい。

[*27]…… 米国家安全保障局(NSA)が極秘で行っていた大規模な監視と個人情報の収集を行っていたことをエドワード・スノーデン氏が暴露した事件。