jay*_*oby 5 domain-name-system nginx resolve amazon-web-services
我正在使用 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;
}
Run Code Online (Sandbox Code Playgroud)
因为 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
Run Code Online (Sandbox Code Playgroud)
例如,如果我将 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;
}
Run Code Online (Sandbox Code Playgroud)
我不能使用 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
Run Code Online (Sandbox Code Playgroud)
我可以安全地使用 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;
Run Code Online (Sandbox Code Playgroud)
然后在host调用中使用 172.16.0.23 地址正确返回内部 10.x 地址。
这仍然感觉有点脆弱,因为 DHCP 分配的名称服务器可能会改变......
Mic*_*bot 18
在 VPC 中,使用169.254.169.253.
这与使用由 DHCP 分配的 CIDR base + 2 地址相同,但更具可移植性,因为它不依赖于恰好部署机器的 VPC 的 IP 编号。您可以在任何 AWS 区域的任何 VPC 中部署相同的配置,并且该地址将始终是一个有效的内部 DNS 解析器。
如果 [
enableDnsSupport] 为 true,则对位于 169.254.169.253 IP 地址或 VPC IPv4 网络范围基础上的保留 IP 地址加上 2 的 Amazon 提供的 DNS 服务器的查询将成功。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
| 归档时间: |
|
| 查看次数: |
11219 次 |
| 最近记录: |