AWSではVPCとDHCP設定が紐づいている。(VPCで1つのDHCPセットオプションをリンクさせることができる)
また、DHCPの設定にてDNSサーバやNTPサーバが指定されている。
デフォルトでは、以下の「DHCPオプションセット」が用意されている。
※GUIの場合には、「VPC」>「DHCPオプションセット」を選択する。
DHCPオプションセットの内容を基に、RHEL7系では/etc/resolv.conf が自動的に生成される。
つまり、DHCPオプションを変更し、VPCに紐づけることで任意のDNSサーバを名前解決に使用することができる。
■デフォルトのDHCPオプションセット内容
# aws ec2 describe-dhcp-options
{
"DhcpOptions": [
{
"DhcpConfigurations": [
{
"Values": [
{
"Value": "ap-northeast-1.compute.internal" ※ドメイン名
}
],
"Key": "domain-name"
},
{
"Values": [
{
"Value": "AmazonProvidedDNS" ※DNSサーバ(VPC内から名前解決を行うときに使用される。
}
],
"Key": "domain-name-servers"
}
],
"DhcpOptionsId": "dopt-f56fbd92"
}
]
}
■{Region}.compute.internal
デフォルトで用意されているドメイン名。このドメイン名は「プライベートDNS」として使用される。
■AmazonProvidedDNS
VPCで用いることのできるDNSサーバ。
デフォルトではVPC内から名前解決を行う時はこのサーバを用いるよう設定されている。
VPCのネットワークアドレス(VPC作成時のアドレス範囲)に2を加えたアドレスがこのサーバのアドレス。
例) VPCアドレス範囲:172.17.0.0/16 ならば、AmazonProvidedDNSは172.17.0.2 となる。
つまり、VPCごとに1台のDNSサーバが割り当てられていることになる。
■間違いやすいところ1
dhcpサーバは各サブネットに存在する。
このDHCPサーバからEC2のIPアドレスやDNSサーバ情報、NTPサーバ情報が伝達される。
※dhcpオプションがVPCに紐づいているため、間違えやすい。
■間違いやすいところ2
VPC内には一つのルータが存在する。
VPCのCIDRアドレスの先頭+2が、DNSサーバとなる。
さらに間違いやすいのが、サブネット単位で予約アドレスが指定されているところ。
サブネットのDNSサーバのアドレスについては仮想的なものと思ったほうが良い。
■予約アドレスの整理
予約アドレスは、各サブネットで
サブネットの先頭+1 → サブネット(=セグメント)のゲートウェイとして使用される(=VPCのルータの一つのPort的な扱い)。
また、DHCPサーバとしても動作している(と思われる)
サブネットの先頭+2 → DNSサーバへのマッピング用
サブネットの先頭+3 → AWSとしての未来用に予約