昨日再挑戦してようやく合格できたソリューションアーキテクトのプロフェッショナル試験でもたくさん出てきたDirectConnect(DXと略すらしい)。オンプレミスとVPCを接続した場合に起こるDNS絡みの問題についてまとめておこうかと。

VPC内のデフォルトDNS

VPC内ではデフォルトで利用可能なDNSが存在し、内部的にはVPCを作成する際に指定したネットワークの先頭に+2をしたものが指定される。DHCP Options setで、「AmazonProvidedDNS」と指定されているものがそれ。Linux環境であれば、反映された内容を/etc/resolv.confからも確認できる。

これ以外に「169.254.169.253」も利用可能らしいが、名前引きだけできることを試してみただけで、どうやって使ったら良いのかは不明。DHCP Options setから指定したら良いのだろうか?

そもそも、このDNSを設定せずに独自DNSを構築または設定(例えばオンプレのDNSを参照させる等)をした場合に、どんな影響があるのかAWSサポートに問い合わせてみたが、ホスト名(例:ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com)での通信ができなくなることに注意して検討してください、とのこと。

EC2に割り当てられたPublicDNSをAmazonProvidedDNSから引くと、PrivateIPが返ってくるという仕様は何かで見て知っていたけど、そんなに利用機会があるかなあ。ドキュメントを読むと、EMRを使うときに問題が発生する可能性あり、とのこと。これは読み返していて気付いた。気をつけないと。

AmazonProvidedDNSは外から名前引きできない

DNSをデフォルトで用意してくれているのはとてもありがたいけど、オンプレミス側と連携する場合には、外部から名前引きがしたい。だけど、AmazonProvidedDNSは、外部から参照することができない。AWSサポートに聞いてみた。

  • オンプレミス環境からVPC内のデフォルトDNSサーバに対して名前解決することは不可
  • 必要な場合には、VPC内のEC2インスタンスにDNSサービスを構築し、forwarder先としてVPC内のデフォルトDNSサーバとすれば実現可能

forwarder指定をしたいのは山々なのだけど、オンプレからは名前引けないから、結局VPC内にDNSが追加で必要じゃんか。この仕様はどうやらVPC内でも利用可能となったRoute53も同様の模様でunbound等を使って皆さん対処されている模様。RDSとかELBとかエンドポイント名がDNSで提供されるサービスには注意が必要で、ミサワホームさんの事例にあるような問題が発生する可能性がある。

ELB、RDSのエンドポイント名はPrivateIPがグローバルDNSから引ける

でも、先のAWSサポートの回答を最後までよく読んだらこんなことが書いてある。

  • Internal ELBは、AWS外のパブリックDNSサーバに対してInternal ELBの名前解決した場合もローカルIPアドレスが解決される

Internal ELBなのにグローバルから名前が引けるの?この仕様にはびっくりした。Public Accesible=NoのRDSでも同様に外から名前を引けて、PrivateなIPが返って来たぞ。この実装はとても不思議だけど、このおかげでVPC内にDNSを構築せずに済んだのでした。
この諸々の仕様を知らなかったばかりにかなり振り回された。あとはVPC内の特定のサーバだけresolv.confを書き換えられないものかも調査中。何かと言うとOSSで何とかなってしまうのだけど、SPOFを作らない為にもなるべくAWSサービスを有効活用した構成を提案できるようにしたい。AWSさん今後もより良いサービスをお願いします。

TOP