Czy istnieje sposób zapytania naszych wewnętrznych wpisów DNS w celu wykrycia wszystkich wpisów CNAME wskazujących na konkretny serwer?
Edycja: Jesteśmy środowiskiem Windows Server 2003.
Czy istnieje sposób zapytania naszych wewnętrznych wpisów DNS w celu wykrycia wszystkich wpisów CNAME wskazujących na konkretny serwer?
Edycja: Jesteśmy środowiskiem Windows Server 2003.
Odpowiedzi:
Nie określiłeś, jakie jest twoje środowisko, ale jeśli używasz Uniksa, myślę, że kombinacja dig i grep powinna działać. ns.example.com
powinna być nazwą hosta serwera nazw, example.com
jest domeną, której częścią jest twój host, a HOST to host, dla którego chcesz znaleźć wszystkie rekordy CNAME. W rzeczywistości jest to znak tabulacji w poleceniu grep, a nie dosłownie <TAB>
(może być konieczne dostosowanie ciągu grep).
Twój serwer nazw musi również zostać skonfigurowany, aby umożliwić transfery stref, których szczegóły będą zależały od implementacji.
dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'
Lub jeśli korzystasz z systemu Windows, możesz użyć nslookup :
C:\> nslookup
> name ns.example.com
> ls -a example.com FILE
Powinno to wygenerować wszystkie rekordy dla domeny, example.com
która ns.example.com
„wie o”, do PLIKU. Następnie możesz użyć dowolnego narzędzia, które chcesz posortować w pliku tekstowym, szukając odpowiednich CNAMES.
Lub z tym nieprzetestowanym (ale pozornie poprawnym) skryptem perla :
#!/usr/bin/perl
use Net::DNS;
($target, $zone) = @ARGV;
$res = new Net::DNS::Resolver;
foreach $rr ($res->axfr($zone)) {
print $rr->name."\n" if (($rr->type eq "CNAME") && ($rr->rdatastr eq $target."."));
}
Kilka punktów za kompletność:
Jeśli masz dostęp do konfiguracji DNS, odkrywanie tych danych jest dość proste. Jednak każdy może mieć CNAME wskazujący na twój serwer. Nie będziesz w stanie ich wyśledzić.
Jak zauważył @wombie, nie można przeprowadzić wstecznego wyszukiwania CNAMES. Nie ma odpowiednika PTR dla CNAMES, a nawet jeśli istnieje prawdopodobieństwo, że istnieją tylko niektóre rekordy. Szybkie sprawdzenie losowego wyboru domen wykazałoby, że rekordy PTR często nie wskazują na rekord A. Podobnie podczas wyszukiwania wstecznego rekordów PTR dla losowych adresów często nie można znaleźć odpowiedniego rekordu A.
EDYCJA: CNAME to nie jedyny sposób na alias systemu. DNS pozwala wielu rekordom A wskazywać ten sam adres. Funkcjonalnie jest to to samo, co dodanie CNAME, ale metoda jest inna. Te same problemy dotyczą poza domeną. Aby wyszukać różne rekordy A, należy wyszukać adresy IP danego systemu.
użyj PowerShell:
sprawdź nazwę podstawową na serwerze Microsoft DNS:
Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Class MicrosoftDNS_AType -Filter "IPAddress = 'xx.xx.xx.xx (IP)'" -ComputerName mydnsservername
pobierz wszystkie nazwy dla tego hosta z serwera Microsoft DNS:
Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Class MicrosoftDNS_CNAMEType -Filter "nazwa_podstawowa = 'nazwa_podstawowa od pierwszego zapytania zakończonego kropką.'” -ComputerName nazwa_serwera_dresora | wybierz nazwę użytkownika, nazwa_podstawowa
dnscmd
aby wyeksportować dane strefy:dnscmd a.ns.example.com / zoneexport zone.example.com some-filename-for-this-zone
CNAME
rekordy zasobów wskazujące nazwę docelowej domeny.