Назад | Перейти на главную страницу

Эквивалент Dig -x для AWS Route 53

У меня есть 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 я установил следующее:

  1. cli53
  2. r53*
  3. bind9
  4. h2n

Установив программное обеспечение, я написал несколько пользовательских сценариев оболочки, чтобы выполнить подъем.

Сначала 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 и не могу отказаться от успешной репутации, когда они постоянно работают.