我應該使用什麼 DNS 伺服器來接收我的 nginx 解析器的 AWS 內部地址?
我正在使用 AWS Elasticache 伺服器example.foo.euw1.cache.amazonaws.com,我希望 nginx 能夠在 location 指令中使用它(這只是一個簡單的範例):
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 地址。
我應該使用什麼
resolver
IP 來獲取 AWS 內部 IP 地址 (10.x) 而不是面向公眾的版本 (79.x)?在執行 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 與解析器一起使用,我將獲得 79.x 地址,而不是我想要的 10.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; }
我不能使用 127.0.0.1,因為我沒有執行自己的 DNS 伺服器。
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:**看起來我做不到,因為嘗試使用這些伺服器(實際上是任何 awsdns 伺服器)進行
host
呼叫,要麼不返回地址,要麼返回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 分配的名稱伺服器可能會改變……
在 VPC 中,使用
169.254.169.253
.這與使用由 DHCP 分配的 CIDR base + 2 地址相同,但更便攜,因為它不依賴於恰好部署機器的 VPC 的 IP 編號。您可以在任何 AWS 區域的任何 VPC 中部署相同的配置,並且此地址將始終是一個有效的內部 DNS 解析器。
如果 [
enableDnsSupport
] 為真,則對 Amazon 提供的 DNS 伺服器的 169.254.169.253 IP 地址或 VPC IPv4 網路範圍基礎上的保留 IP 地址加兩個的查詢將成功。http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html#vpc-dns-support
對於 EC2-Classic 中的實例,即使 DNS 解析器由 DHCP 提供,它也不會改變。它始終是 172.16.0.23。
Amazon 提供了一個 DNS 伺服器,可將 Amazon 提供的 IPv4 DNS 主機名解析為 IPv4 地址。在 EC2-Classic 中,Amazon DNS 伺服器位於
172.16.0.23
.http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#amazon-dns-server