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 のために予約されたドメイン(.local
TLDは 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アップグレードの際は気をつけましょう。