Problem
内部リソースのドメイン名として、.localとするケースはよくあると思いますが、AWSで運用しているサーバをUbuntu18.04にアップグレードした途端、これまでアクセスできていた.localの内部リソースにアクセスできなくなるというトラブルに遭遇しました。
実は、Ubuntu18.04では TLDが.localのものは名前解決できません。これはOS(systemd-resolved)の仕様です。
原因
https://www.freedesktop.org/software/systemd/man/systemd-resolved.html
そもそも.local はマルチキャスト DNS のために予約されたドメイン(.localTLDは RFC6762 にて非推奨)であり、Ubuntu 18.04 における systemd-resolved の挙動は独自の実装ではなく RFC の規約に準拠したものとのこと。
.local ドメインの名前解決を DNS サーバに対してではなく LAN に対するマルチキャストによって行おうとするが、AWSではマルチキャストをサポートしていないため、名前解決に失敗するというわけです。
かつてはマイクロソフトもActiveDirectoryのドメイン名として.localを推奨していた時期もありましたが、今は非推奨としているようです。
https://social.technet.microsoft.com/wiki/contents/articles/34981.active-directory-best-practices-for-internal-domain-and-network-names.aspx
Solution
.localドメインへの名前解決要求を明示的にAWSの内部DNSへ送るために、VPC の DHCPオプションセットにて以下のように.local に対する DNS サーバーに AmazonProvidedDNS を明示的に指定します。
- ドメイン名:
local - ドメインネームサーバー:
AmazonProvidedDNS
OSアップグレードの際は気をつけましょう。
