У меня есть IP-адрес, связанный с AWS Elastic IP (EIP). Я хотел бы знать, какие записи DNS в моем домене Route 53 связаны с IP-адресом этой записи.
В традиционной службе DNS я бы запустил dig -x $ EIP, получил бы запись PTR и все.
Amazon разрешает только фактические записи PTR, заполнив какая-то форма.
В противном случае записи PTR указывают на amazonaws.com.
API для Route 53, похоже, не поддерживает подход dig -x тоже. Более того, данные выглядят как XML, что усложняет работу из командной строки.
Итак, как я могу получить эти данные?
Поскольку вы говорите, что хотите использовать данные для запуска сканирования портов работающих в данный момент узлов AWS, почему бы просто не собрать IP-информацию, перечислив текущие запущенные экземпляры AWS?
У вас могут быть записи в DNS, у которых нет текущего хоста, и у вас могут быть запущенные хосты, которых на самом деле нет в DNS, поэтому я думаю, что список экземпляров будет лучшим «источником истины».
Вот пример скрипта Boto для получения списка экземпляров. экземпляры списка boto Некоторые из параметров экземпляра - это текущий внешний и внутренний IP-адреса экземпляра.
Если вы действительно хотите придерживаться методов route53, вы можете использовать boto для просмотра всех записей в вашей зоне хостинга. Документы Boto для API Route53
$ 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
Удачи.
Решил, что вместо аналога очень хочу dig -x
работает для всех моих Amazon EIP. Вот как я это сделал.
Сначала я создал для этой цели новый экземпляр AWS под названием ns1. На ns1 я установил следующее:
Установив программное обеспечение, я написал несколько пользовательских сценариев оболочки, чтобы выполнить подъем.
Сначала cli53-to-hosts генерирует динамически сгенерированную версию файла / etc / hosts. Работа выполняется через cli53 export myzone.com с последующей сортировкой по организации.
Аналогичным образом cli53-to-networks составляет списки сетей, для которых мне нужно создать зоны in-addr.arpa. Потому что это не настоящий зоны в глобальном пространстве имен я обманул и создал их на уровне сетевой маски / 16, например, 50.18, 107.23 и т. д.
Имея файл hosts и список сетей, для которых запускается DNS, сценарий h2n (из книги О'Рейли по DNS и BIND) завершает работу. Он записывает файл named.conf и серию файлов зон для обратного DNS.
Все это вызывается из cron каждую ночь с помощью финального скрипта configure-dns:
#!/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 demetri@mydomain.com -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 и не могу отказаться от успешной репутации, когда они постоянно работают.