这是应该发生的事情:
foo$host bar bar.tld is an alias for ec2-88-88-88-88.compute-1.amazonaws.com. ec2-88-88-88-88.compute-1.amazonaws.com has address 192.168.50.17
以下是一段时间后实际发生的事情:
foo$host bar bar.tld is an alias for ec2-88-88-88-88.compute-1.amazonaws.com. ec2-88-88-88-88.compute-1.amazonaws.com has address 88.88.88.88
确认!如果我重新启动BIND,它会回到正确地将名称解析为私有IP一段时间,然后最终服务于公共IP.除非我重新启动BIND,否则它似乎永远不会再次恢复为私有IP提供服务.
顺便说一句,这似乎总是有效:
foo$host ec2-88-88-88-88.compute-1.amazonaws.com 172.16.0.23 ec2-23-21-222-199.compute-1.amazonaws.com has address 192.168.50.17
如果看起来我不知道我在做什么,因为我在其中一个配置文件中犯了一个简单的错误,那是因为我不知道我在做什么.
我建立了自己的顶级域名:“.tld”(混淆 – 希望为顶级域名选择的真实字符无关紧要).
我试着做what Eric Hammond recommends.这是我的/etc/bind/named.conf.options:
options { directory "/var/cache/bind"; forwarders { 172.16.0.23; }; auth-nxdomain no; listen-on-v6 { any; }; allow-query { 127.0.0.1; 192.168.50.0/24; }; };
172.16.0.23是亚马逊DNS服务器的IP,只能从EC2内部访问.它是唯一知道我的机器的正确内部/私有IP的人.这几乎就好像我的服务器有时无法解析foo.tld,然后转到其他[公共]名称服务器,然后查找被borked(此后解析为公共IP).我似乎没有完成的技巧是我的名称服务器必须永远不会超过172.16.0.23来解析这些x.compute-1.amazonaws.com名称.另一种可能性是,有时亚马逊的名称服务器搞砸了,并给了我一个公共IP,但那么为什么我的名称服务器最终不会纠正错误并有时再次解析私有IP?
无论如何,继续……这里是/etc/bind/named.conf.local:
zone "tld" { type master; file "/etc/bind/db.tld"; notify no; };
为了完整起见,这是/etc/bind/named.conf:
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones";
这是我的区域/etc/bind/db.tld的模糊绑定数据库:
$TTL 1h @ IN SOA tld. ns.tld. ( 2012021425 ; Serial 1m ; Refresh 2m ; Retry 1w ; Expire 1h ) ; Negative Cache TTL ; @ IN NS ns.tld. @ IN A 192.168.50.5 ns A 192.168.50.5 foo CNAME ec2-99-99-99-99.compute-1.amazonaws.com. bar CNAME ec2-88-88-88-88.compute-1.amazonaws.com.
呼.好的,这里有一些可能需要整个图片的文件.这是名称服务器上的/etc/resolv.conf,ns:
domain tld search tld nameserver 127.0.0.1
这是foo.tld和bar.tld上的/etc/resolv.conf:
domain tld search tld compute-1.internal nameserver 192.168.50.5 nameserver 172.16.0.23
我不知道这是否正确.也许我应该只有名称服务器192.168.50.5?
此设置在Ubuntu Server 11.10上使用BIND 9.7.3.
(仅供参考:http://alestic.com/2009/06/ec2-elastic-ip-internal交叉发布)
options { forward only; ...
来自BIND ARM97:
forward此选项仅在转发器列表不为空时才有意义.价值第一,
默认情况下,导致服务器首先查询转发器 – 如果这不能回答问题,
然后服务器将自己查找答案.如果仅指定,则服务器将仅查询转发器.
在您的情况下,由于您实际上只需要.amazonaws.com的亚马逊DNS服务器,您也可以这样做:
options { forwarders { }; ... } zone "amazonaws.com" { type forward; forwarders { 172.16.0.23; }; forward only; };