web-dev-qa-db-ja.com

nginxリゾルバーのAWS内部アドレスを受信するには、どのDNSサーバーを使用すればよいですか?

私はAWS Elasticacheサーバーを使用していますexample.foo.euw1.cache.amazonaws.comこれは、nginxがロケーションディレクティブで使用できるようにする必要があります(これは単純な例です)。

_location /cached {
  set $memcached_key $uri;
  memcached_pass  example.foo.euw1.cache.amazonaws.com:11211;
  try_files $uri =404;
}
_

ElasticacheノードのIPアドレスは変更される可能性があるため、example.foo.euw1.cache.amazonaws.comの現在のIPアドレスを使用したくありません。

一般向けバージョン(79.x)ではなく、AWS内部IPアドレス(10.x)を取得するには、どのresolver IPを使用すればよいですか?

Nginxが実行されているマシンでは、これらのHost呼び出しでこれを模倣できます。

_$ Host example.foo.euw1.cache.amazonaws.com
$ 10.120.40.80
$ # ^^^ that's the correct internal address I want to use
$
$ Host example.foo.euw1.cache.amazonaws.com 8.8.4.4
$ 79.125.100.150
$ # ^^^ that's the public IP that I don't want to use
_

たとえば、リゾルバーでGoogleパブリックDNSを使用すると、必要な10.xアドレスではなく79.xアドレスが取得されます。

_location /cached {
  resolver 8.8.4.4 ipv6=off valid=5m;
  set $memcached_key $uri;
  memcached_pass  example.foo.euw1.cache.amazonaws.com:11211;
  try_files $uri =404;
}
_

自分のDNSサーバーを実行していないため、127.0.0.1を使用できません。

_Dig +trace example.foo.euw1.cache.amazonaws.com_

この痕跡を与える;

_Dig +trace example.foo.euw1.cache.amazonaws.co

; <<>> Dig 9.3.4 <<>> +trace example.foo.euw1.cache.amazonaws.co
;; global options:  printcmd
.                       518400  IN      NS      L.ROOT-SERVERS.NET.
.                       518400  IN      NS      M.ROOT-SERVERS.NET.
.                       518400  IN      NS      A.ROOT-SERVERS.NET.
.                       518400  IN      NS      B.ROOT-SERVERS.NET.
.                       518400  IN      NS      C.ROOT-SERVERS.NET.
.                       518400  IN      NS      D.ROOT-SERVERS.NET.
.                       518400  IN      NS      E.ROOT-SERVERS.NET.
.                       518400  IN      NS      F.ROOT-SERVERS.NET.
.                       518400  IN      NS      G.ROOT-SERVERS.NET.
.                       518400  IN      NS      H.ROOT-SERVERS.NET.
.                       518400  IN      NS      I.ROOT-SERVERS.NET.
.                       518400  IN      NS      J.ROOT-SERVERS.NET.
.                       518400  IN      NS      K.ROOT-SERVERS.NET.
;; Received 228 bytes from 172.16.0.23#53(172.16.0.23) in 0 ms

com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
;; Received 503 bytes from 199.7.83.42#53(L.ROOT-SERVERS.NET) in 30 ms

amazonaws.com.          172800  IN      NS      u1.amazonaws.com.
amazonaws.com.          172800  IN      NS      u2.amazonaws.com.
amazonaws.com.          172800  IN      NS      r1.amazonaws.com.
amazonaws.com.          172800  IN      NS      r2.amazonaws.com.
;; Received 191 bytes from 192.5.6.30#53(a.gtld-servers.net) in 20 ms

euw1.cache.amazonaws.com. 300   IN      NS      ns-1439.awsdns-51.org.
euw1.cache.amazonaws.com. 300   IN      NS      ns-108.awsdns-13.com.
euw1.cache.amazonaws.com. 300   IN      NS      ns-738.awsdns-28.net.
euw1.cache.amazonaws.com. 300   IN      NS      ns-1905.awsdns-46.co.uk.
;; Received 196 bytes from 156.154.64.10#53(u1.amazonaws.com) in 12 ms

example.foo.euw1.cache.amazonaws.co. 15 IN CNAME ec2-79-125-28-100.eu-west-1.compute.amazonaws.com.
euw1.cache.amazonaws.com. 172800 IN     NS      ns-108.awsdns-13.com.
euw1.cache.amazonaws.com. 172800 IN     NS      ns-1439.awsdns-51.org.
euw1.cache.amazonaws.com. 172800 IN     NS      ns-1905.awsdns-46.co.uk.
euw1.cache.amazonaws.com. 172800 IN     NS      ns-738.awsdns-28.net.
;; Received 246 bytes from 205.251.197.159#53(ns-1439.awsdns-51.org) in 10 ms
_

U1.amazonaws.com、u2.amazonaws.com、r1.amazonaws.com、r2.amazonaws.comサーバーのいずれかを安全に使用できますか?

編集1:Host呼び出しでこれらのサーバー(および実際にはすべてのawsdnsサーバー)を使用しようとすると、アドレスが返されないか、 5(REFUSED)を返します。

編集2ああ、DHCPで割り当てられたデータを調べれば、使用する必要のあるIPアドレスを確認できます。

_$ grep domain-name-servers /var/lib/dhcp3/dhclient.*
$ /var/lib/dhcp3/dhclient.eth0.leases:  option domain-name-servers 172.16.0.23;
_

そして、その172.16.0.23アドレスをHost呼び出しで使用すると、内部10.xアドレスが正しく返されます。

DHCPが割り当てたネームサーバーが変更される可能性があるため、これはまだ少しもろく感じられます...

5
jaygooby

VPCでは、169.254.169.253を使用します。

これは、DHCPによって割り当てられるCIDRベース+ 2アドレスを使用するのと同じですが、マシンがたまたまデプロイされるVPCのIP番号付けに依存しないため、移植性が高くなります。 AWSリージョンのどのVPCにも同じ設定をデプロイできます。このアドレスは常に機能する内部DNSリゾルバーになります。

[enableDnsSupport]がtrueの場合、169.254.169.253のIPアドレスでAmazonが提供するDNSサーバー、またはVPC IPv4ネットワーク範囲プラス2のベースで予約されたIPアドレスへのクエリは成功します。

http://docs.aws.Amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html#vpc-dns-support

EC2-Classicのインスタンスの場合、DNSリゾルバーはDHCPによって提供されますが、変更されることはありません。常に172.16.0.23です。

Amazonは、Amazonが提供するIPv4 DNSホスト名をIPv4アドレスに解決するDNSサーバーを提供しています。 EC2-Classicでは、Amazon DNSサーバーは172.16.0.23にあります。

http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#Amazon-dns-server

14