Skip to content

Port 53

DNSはインターネットの根幹だ。すべての通信はまず名前解決から始まる。

最初に触ったネームサーバーはBINDだった。named.confを書いてゾーンファイルを定義する。SOAレコード、NSレコード、Aレコード。シリアル番号を上げ忘れてゾーン転送が走らず、スレーブが古い情報を返し続ける。DNSの障害は症状が遅れて出るから厄介だ。壊したのは数分前なのに、影響が出るのはTTLが切れた後だ。

BINDは権威サーバーとキャッシュサーバーを兼ねていた。いまの感覚では考えられないが、当時は一台で両方やるのが普通だった。Unboundがキャッシュ専用として登場し、PowerDNSがバックエンドにRDBを使える権威サーバーとして出てきて、役割が分離された。

DNSはUDPの印象が強いが、TCPも使う。512バイトを超えるレスポンスやゾーン転送はTCPだ。ポート53でUDPとTCPの両方を開けておかないと、思わぬところで名前解決が失敗する。

ガラケー時代のDNS切り替えは地獄だった。キャリアのクローラーがDNSをキャッシュする間隔が公開されていない。TTLを短くしても、キャリア側のリゾルバがそれを無視することがあった。サーバー移行でIPが変わると、一部のキャリアだけ旧サーバーを見続ける。特にauだ。あの恨みはいまだに残っている。移行前にTTLを短縮しておくという基本を叩き込まれたのも、あの頃だ。

Route 53の名前の由来は、まんまポート番号だ。Route 53はDNS標準と互換がとれているように見えて、ALIASレコードがRFC標準ではないことはあまり知られていない。ALBのようなマネージドサービスはIPアドレスではなくCNAMEでエンドポイントを払い出す。ところがDNSの仕様上、Zone Apex(example.comのようなドメインそのもの)にはCNAMEを設定できない。この制約をAWS独自のALIASレコードで回避している。

ANAMEという標準化の動きもあったが、RFCにはなっていないはずだ。CloudflareもCNAME Flatteningという独自実装で同じ問題を解いている。DNSの根幹に近い部分を、各社が独自拡張で補っている。標準化が追いついていない。

いまではCloudflareがDNSの世界でも存在感を増している。1.1.1.1のパブリックリゾルバ、エッジでのDNSプロキシ。BINDのゾーンファイルを手で書いていた時代から、コンソールでポチポチの時代を経て、IaCでTerraformから管理する時代になった。道具は変わったが、TTLを短くし忘れて移行で冷や汗をかくのは変わらない。

ちなみにわたしは、レジストラに登録したクレジットカードの期限切れでドメインが失効し、DNS障害を起こしたことが何度もある。ハウジングでもやった。技術的な問題ですらない。