[AWS Client VPN] カスタムDNSサーバを使用する
こんにちは、菊池です。
まだまだ続く、AWS Client VPNを掘り下げるシリーズです。今回は、Client VPNで設定可能なパラメータの1つである、カスタムDNSサーバを検証してみました。
AWS Client VPN のカスタムDNSサーバ
カスタムDNSは、VPNクライアントが利用するDNSサーバを指定する機能です。クライアントがVPN接続した際、指定したDNSサーバのIPがDHCPでVPNインタフェースに設定されます。任意のDNSサーバを指定することで、クライアント側のオンプレミスや、接続先VPC内のプライベートな名前解決を可能にすることができます。なお、カスタムDNSサーバは、Client VPN エンドポイント作成時に設定可能です。また、作成済みのClient VPNエンドポイントに対しても後から設定・変更が可能です。
今回の検証では、VPC内のプライベートIPを解決するために、DNSサーバを設定してみます。VPC内で利用できるDNSサーバとしては、以下のいずれかが挙げられます。
- EC2に起動したDNSサーバ
- AWS Directory Service
- Amazon DNS
- Amazon Route53 Resolver
参考:
上記のDNSサーバから、今回はAWS Directory ServiceとAmazon DNSを試してみました。
カスタムDNSサーバを設定する
まずはClient VPNの設定から。デフォルトでは、カスタムDNSサーバーは設定されません。そのため、コンソール上のDNSサーバは空欄になっています。変更の際は、[アクション] の [クライアントVPNエンドポイントの変更]から可能です。
この状態でVPNを接続しても、クライアント側ではDNSサーバのIPは自動で設定されません。
AWS Directory ServiceをカスタムDNSサーバに指定する
まずはAWS Directory ServiceをカスタムDNSサーバに設定してみます。ClientVPNのAD認証のために同一VPC内に起動した、SimpleADを利用します。SimpleADの画面から、DNSのIPアドレスが確認できます。
このIPアドレスを、ClientVPNエンドポイントに設定します。
カスタムDNSサーバーとして、SimpleADが設定されました。
この状態で、クライアントからVPNを接続します。接続した上で、VPNインタフェースを確認すると、指定したIPがDNSサーバに設定されていることが確認できました。
DNSに問い合わせ、名前解決ができるか確認します。VPN内のプライベートIPが解決できていることを確認するため、SQSのVPNエンドポイント(インタフェースエンドポイント参考)を作成し、sqs.ap-northeast-1.amazonaws.com
を名前解決してみます。
ちゃんとVPC内のCIDRで結果が取得できました!
Amazon DNSをカスタムDNSサーバに指定する
続いて、Amazon DNSを試してみます。Amazon DNSは、VPC内に存在するVPC専用のDNSで、VPC CIDRの2番目のIPアドレスが予約されています(例えば、CIDRが10.0.0.0/16のVPCでは、10.0.0.2)。
今回利用しているVPCのCIDRは172.31.0.0/16なので、172.31.0.2をClientVPNエンドポイントに設定します。
設定されました。
先ほどと同様、クライアントからVPNを接続します。接続した上で、VPNインタフェースを確認すると、指定したAmaozn DNSのIPがDNSサーバに設定されていることが確認できました。
同じくSQSのエンドポイントを名前解決してみると、プライベートIPが取得できました!
つまり、VPC内の名前解決には、特別な追加リソースを必要としないAmazon DNSが利用可能ということです。
まとめ
AWS Client VPNで利用可能なカスタムDNSサーバを試しました。
検証の結果わかった、Amazon DNSが利用できるというのが非常に大きいと思います。Amazon DNSは基本的にVPC内からの利用しかできませんでしたので、外部から利用するにはAmazon Route53 Resolverなどの追加リソースが必要でした。VPC内にENIを生成しNATするClient VPNでは、直接Amazon DNSが利用できますので、簡単にVPN内の名前解決や、Route53プライベートホステッドゾーンも利用できるということになります。