我有一个与 AWS 弹性 IP (EIP) 关联的 IP 号码。我想知道我的 Route 53 域中的哪些 DNS 记录与该 A 记录的 IP 关联。
在传统的 DNS 服务中,我会运行 dig -x $EIP 并返回 PTR 记录并完成。
亚马逊仅允许通过填写实际的 PTR 记录某种形式。
否则,PTR 记录指向 amazonaws.com。
API 为Route 53 似乎不支持dig -x 方法也是如此。此外,数据看起来像 XML,这将使从命令行进行操作有点困难。
那么,我如何获取这些数据?
答案1
既然您说您想使用数据来对当前正在运行的 AWS 节点进行端口扫描,那么为什么不通过列出当前正在运行的 AWS 实例来收集 IP 信息呢?
您可能在 DNS 中拥有没有当前主机运行的记录,并且您可能拥有实际上不在 DNS 中运行的主机,因此我认为实例列表会是更好的“真相来源”。
以下是用于获取实例列表的 boto 脚本示例。 boto 列出实例 一些实例参数是实例的当前外部和内部 IP 地址。
如果您确实想坚持使用 route53 方法,则可以使用 boto 遍历托管区域中的所有记录。 route53 api 的 boto 文档
$ cat list-r53.py
#!/usr/bin/python
"""
Simple script to lsit route 53 entries
WARNING: (boto requires credential to be stored in a dotfile for the user)
eg.
Contents of ~/.boto are below:
[Credentials]
aws_access_key_id = ABC123DEF456
aws_secret_access_key = NOC4KE4U
"""
from boto.route53.connection import Route53Connection
route53 = Route53Connection()
results = route53.get_all_hosted_zones()
for zone in results['ListHostedZonesResponse']['HostedZones']:
print "========================================"
print "Zone:",zone['Name']
zone_id = zone['Id'].replace('/hostedzone/', '')
for rset in route53.get_all_rrsets(zone_id):
print "\t%s: %s %s @ %s" % (rset.name, rset.type, rset.resource_records, rset.ttl)
$ ./list-r53.py
========================================
Zone: serverfault.com.
serverfault.com.: NS [u'ns-1638.awsdns-12.co.uk.', u'ns-699.awsdns-23.net.', u'ns-301.awsdns-37.com.', u'ns-1459.awsdns-54.org.'] @ 172800
serverfault.com.: SOA [u'ns-1638.awsdns-12.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400'] @ 900
192.168.1.1.serverfault.com.: PTR [u'sample.serverfault.com.'] @ 300
sample.serverfault.com.: A [u'192.168.1.1'] @ 300
祝你好运。
答案2
我决定,我真正想要的是为我的所有亚马逊 EIP 工作,而不是等价的dig -x
工作。以下是我这样做的方式。
首先,我为此创建了一个名为 ns1 的新 AWS 实例。在 ns1 上,我安装了以下内容:
安装软件后,我编写了一些自定义 shell 脚本来完成提升工作。
首先,cli53-to-hosts 生成 /etc/hosts 文件的动态生成版本。该工作通过 cli53 export myzone.com 完成,然后进行一些排序以进行组织。
类似地,cli53-to-networks 列出了我需要为其生成 in-addr.arpa 区域的网络。因为这些不是真实的全局命名空间中的区域,我作弊并在 /16 网络掩码级别创建了它们,例如 50.18、107.23 等。
有了 hosts 文件和要运行 DNS 的网络列表,h2n 脚本(来自 O'Reilly 的 DNS 和 BIND 书)就完成了工作。它为反向 DNS 写出一个 named.conf 文件和一系列区域文件。
所有这些都是通过名为 configure-dns 的最终脚本在每晚的 cron 中调用的:
#!/bin/bash
. ~/.profile
cli53-to-hosts > /usr/local/etc/hosts
cli53-to-networks > /usr/local/etc/h2n/h2n.conf
cd /etc/bind
h2n -N 255.255.0.0 -f /usr/local/etc/h2n/h2n.conf -H /usr/local/etc/hosts -d mydomain.com -u [email protected] -h ns1.mydomain.com -p mydomain.com
最终结果:
mv-m-dmouratis:~ dmourati$ dig -x 50.18.205.42 @ns1.mydomain.com
; <<>> DiG 9.8.3-P1 <<>> -x 50.18.205.42 @ns1.mydomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55551
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;42.205.18.50.in-addr.arpa. IN PTR
;; ANSWER SECTION:
42.205.18.50.in-addr.arpa. 86400 IN PTR bounce.mydomain.com.
;; AUTHORITY SECTION:
18.50.in-addr.arpa. 86400 IN NS ns1.mydomain.com.
;; Query time: 32 msec
;; SERVER: 54.218.3.75#53(54.218.3.75)
;; WHEN: Tue Jun 11 19:21:46 2013
;; MSG SIZE rcvd: 93
这确实是一项艰巨的工作,但却令人感到很满足。我想我是 PTR 唱片的狂热爱好者,无法忍受放弃一直让它们工作的成功记录。