Estou usando um servidor AWS Elasticache example.foo.euw1.cache.amazonaws.com que eu quero que o nginx possa usar em uma diretiva de localização (este é apenas um exemplo simplista) :
location /cached {
set $memcached_key $uri;
memcached_pass example.foo.euw1.cache.amazonaws.com:11211;
try_files $uri =404;
}
Como os endereços IP do nó Elasticache podem mudar, não quero usar o endereço IP atual de example.foo.euw1.cache.amazonaws.com.
Qual resolver
IP devo usar para obter endereços IP internos da AWS (10.x) em vez das versões públicas (79.x)?
Na máquina em que o nginx está sendo executado, posso imitar isso com essas host
chamadas:
$ 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
Por exemplo, se eu usar o DNS público do Google com o resolvedor, receberei endereços 79.xe não os 10.x que eu quero:
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;
}
Não posso usar 127.0.0.1, pois não estou executando meu próprio servidor DNS.
dig +trace example.foo.euw1.cache.amazonaws.com
indica este traço;
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
Posso usar com segurança um dos servidores u1.amazonaws.com, u2.amazonaws.com, r1.amazonaws.com, r2.amazonaws.com?
Editar 1: não parece que eu possa, como tentar usar esses servidores (e na verdade qualquer um dos servidores awsdns) com uma chamada host
ou não retornar endereços ou devolve 5(REFUSED)
.
Editar 2 ah, se eu pesquisar nos dados atribuídos pelo DHCP, posso ver o endereço IP que preciso usar:
$ grep domain-name-servers /var/lib/dhcp3/dhclient.*
$ /var/lib/dhcp3/dhclient.eth0.leases: option domain-name-servers 172.16.0.23;
E, em seguida, o uso desse endereço 172.16.0.23 em uma chamada host
retorna corretamente o endereço 10.x interno.
Isso ainda parece um pouco frágil porque o servidor de nomes atribuído ao DHCP pode mudar ...