VPSとAWSのハイブリッド環境で名前解決
内部DNSを置いていない某VPSのローカルネットワークで名前解決を要する案件が発生しました。
とりあえずはパブリックなDNSに登録して対応しましたが、やはりその対応では手法として美しくないので別の手法を取ることにします。
ファブリカはAWSも利用しているので、Route53のプライベートホストゾーンを使います。プライベートホストゾーンは『VPC内部のみ』の名前解決で利用されます。
「え、じゃあ某VPSで使えないじゃん」
となるかと思いますが、ここは一手間かけてやりましょう。
完成イメージ
こんな感じです。

ココでは仮に運用するプライベートホストゾーンを「fabrica-local.prv」、同ゾーンの名前解決をしたいサーバのIPアドレスを「111.111.111.111/32」と「222.222.222.222/32」の2台としておきます。
プライベートホストゾーンの登録
AWSのコンソールから、Route53のホストゾーンでプライベートホストゾーンを作成します。
VPC IDは適宜選択して下さい。

ホストゾーンを作成したら、名前解決に利用したいAレコードを登録しておきます。
DHCP
VPC内に設置するEC2にプライベートホストゾーンの名前解決ができるようにDHCPを設定します。
既存のDHCPオプションセットはオプションの変更ができないので、新規にオプションセットを作成します。
既存のオプションセットのdomain-nameとdomain-name-serversの値(おそらく「domain-name = ap-northeast-1.compute.internal; domain-name-servers = AmazonProvidedDNS;」になってると思います)をメモしておき、新規でオプションセットを作成します。
下記以外の指定は任意です。
★ドメイン名
メモしておいたdomain-nameの値と、運用するプライベートホストゾーン「fabrica-local.prv」をスペースでつないで指定
★ドメインネームサーバー
同じくメモしておいたdomain-name-serversの値

作成したら、VPCのDHCPオプションセットの編集で作成したDHCPオプションセットを選択します。
セキュリティグループ
「fabrica-local.prv」の名前解決を許可するネットワークを制限します。
任意の名前でセキュリティグループを作成し、インバウンドに下記のルールを追加します。
- タイプ:DNS(UDP)
ソース:111.111.111.111/32, 222.222.222.222/32 - タイプ:DNS(TCP)
ソース:111.111.111.111/32, 222.222.222.222/32
DNSプロキシ用EC2
AmazonLinux2のEC2を1台用意します。
下記以外は適宜自身の環境にあったものを設定していきます。
- ネットワーク:プライベートホストゾーンやDHCPを設定したVPC
- セキュリティグループ:先ほど作った名前解決許可用のもの
- ElasticIPの割当
以降の作業はSSHでログインして行います。
dnsmasq
今回はDNSのプロキシに軽量なdnsmasqを使いたいと思います。
dnsmasqは上位のDNSサーバとして/etc/resolv.confに書かれたものを利用するため、今回の用途であれば設定はほぼ不要です。
もちろんbindやunboundでも代用は可能です。
インストールして起動します。
$ sudo yum -y install dnsmasq $ sudo systemctl enable dnsmasq $ sudo systemctl start dnsmasq |
これだけです。
(必要に応じてログを出力させるとかは行って下さい)
クライアント設定
名前解決をさせたい某VPSのサーバで/etc/resolv.confのnameserverを先ほど作成したEC2のIPアドレスに変更します。
必要に応じてsearchやdomainも指定しておきましょう。
これで某VPSのローカルネットワークで名前解決ができるようになりました。
あとがき
今回はDNSプロキシ用EC2を1台だけにしましたが、別のアベイラビリティーゾーンにも同じものを作成して冗長構成にしておくのもいいかもしれませんね。
また、オンプレとAWSであれば「AWS Direct Connect」でプライベートなネットワークを構築するという方法もとれそうです。この辺りは、時間と予算に余裕があれば試してみようと思います。
ファブリカコミュニケーションズで働いてみませんか?
あったらいいな、をカタチに。人々を幸せにする革新的なサービスを、私たちと一緒に創っていくメンバーを募集しています。
ファブリカコミュニケーションズの社員は「全員がクリエイター」。アイデアの発信に社歴や部署の垣根はありません。
“自分から発信できる人に、どんどんチャンスが与えられる“そんな環境で活躍してみませんか?ご興味のある方は、以下の採用ページをご覧ください。