Привет, Хабр! Наверняка, если вы знаете про этот чудесный сайт, вы хотя бы немножко представляете себе, как работает Интернет. Может быть, даже слышали про DNS и его основную задачу - преобразование легко запоминаемых для человека доменных имен в IP адреса. Но ведь на одних IP адресах DNS не заканчивается.
Обратный поиск DNS
Что это? Это механизм протокола DNS, позволяющий "провернуть фарш назад" и получить из IP адреса соответсвующее ему доменное имя.
DNS состоит из зон и ответственных за них серверов. Среди зон есть как и привычные всем com, net, org так и специальные, которые нельзя просто купить(арендовать). Они используются для внутренних потребностей dns протокола.
Два домена в такой зоне и используются для обратного поиска.
in-addr.arpa используется для адресов IPv4
ip6.arpa для IPv6
Все IP адреса находятся в этих зонах в таком виде (записывается в обратном порядке):
Для IPv4 адреса 8.8.4.4 это будет 4.4.8.8.in-addr.arpa
Для IPv6 адреса 2001:db8::567:89ab это будет b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa
И уже этих зонах создаются записи PTR, содержащие имя хоста соответствующее адресу.
Разрешение серверов, авторитетных для зоны, тут работает точно так-же, как и в обычном DNS, за исключением того, что корневая зона делегирует зону .arpa не реестру, а сразу 5ти региональным IP провайдерам ARIN, RIPE, LACNIC, APNIC, AFRINIC. А они уже делегируют зону местным провайдерам, которым принадлежит пул адресов или asn.
Где взять адрес для rDNS
Есть такой крупный IP провайдер как Hurricane Electric.
На своем сайте он дает любому желающему возможность получить по 2 IPv6 блока (/64 и /48) на каждый тунель бесплатно.
С помощью этих блоков он предоставляет бесплатную услугу 6in4 туннеля для доступа в IPv6 сеть тем устройствам, которые имеют доступ только в сеть IPv4.
И как раз он и предоставляет возможность делегировать обратную зону dns для этих 2-х блоков адресов на пользовательские DNS сервера.
Но ведь это скучно - просто забрать эти блоки на свой сервер и установить им PTR запись.
Еще не поняли? Сейчас я вам расскажу, как превратить домен в зоне .arpa в обычный и использовать его не как было задумано, а по-хакерски.
Как указать IP адрес для .arpa
Для начала можно было бы попробовать пойти путем "классических" решений используемых в dns. Например, использовать named (bind9). Но если вы далеки от написания конфигурационных файлов dns зон и администрирования виртуальных серверов. То, скорее всего, пользуетесь услугами облачных DNS провайдеров популярный пример таких сервисов - cloudflare. Но тут появляется проблема: облачные провайдеры DNS мыслят слишком узко и не понимают наших планов, и поэтому установить A запись не дадут.

У этого конкретного провайдера есть возможность создать CNAME запись, но задумывалась она конечно не для этого и создать запись для имени не являющегося действительным ipv6 адресом не получится.
Но на самом деле все просто. Зачем писать конфиг к DNS серверу, который выдаст ошибку, что такую зону создать нельзя, так как rfc стандарта позволяющего создание A записей для обратных зон нет, если можно написать свой DNS сервер. (ну почти)
print("Loading libraries, please wait...")
from scapy.all import *
from socket import socket
print("Initializing...")
s = socket(2, 2) # create udp socket
s.bind(('0.0.0.0', 533)) # bind to dns (53)
s.setblocking(0) # disable blocking
print('Starting...')
# A resource record
RR = DNSRR(rrname="a.3.5.0.0.d.2.f.1.0.7.4.0.1.0.0.2.ip6.arpa.", type="A", ttl=128, rdata="1.1.1.1")
# mainloop
while 7:
try:
try:
data, addr = s.recvfrom(4096)
except Exception:
continue
except KeyboardInterrupt:
print('Exiting...')
break
p = DNS(data) # parse dns query into scapy object
if p[DNSQR][0].qname != b'a.3.5.0.0.d.2.f.1.0.7.4.0.1.0.0.2.ip6.arpa.':
continue
r = DNS(id=p.id, ra=1, aa=1, qr=1, ns=RR, an=RR, rcode=0, qd=p[DNSQR][0])
s.sendto(bytes(r), addr) # send query response
Этот скрипт запускает сервер на 53udp порту и, если у него запрашивают нашу обратную зону, выдает в ответ A запись с адресом 1.0.0.1 который принадлежит Cloudflare.
Таким образом, если все сработает и браузер прочтет A запись, откроется страница ошибки от cloudflare сообщающая о том, что этот домен не был делегирован в их глобальную сеть.
Осталось в настройках туннеля на сайте Hurricane указать адрес сервера, на котором расположен этот скрипт, и проверить, как открывается сайт на домене в необычной зоне .ip6.arpa.

С ipv4 адресами в зоне in-addr.arpa это будет работать тоже. Только я не знаю мест, где бесплатно раздают бесценные ipv4 адреса, да еще и позволяют менять их reverse dns.
Проверить что все работает как описано можно тут:
http://a.3.5.0.0.d.2.f.1.0.7.4.0.1.0.0.2.ip6.arpa/