Jak mogę zarządzać wszystkimi moimi domenami przy minimalnej konfiguracji?

10

To jest pytanie kanoniczne dotyczące administracji serwerem DNS.

Mam około stu domen. Wszystkie te domeny muszą być skonfigurowane identycznie, ale wydaje się, że ogromną stratą czasu jest konieczność skonfigurowania nowej strefy i / lub pliku strefy dla każdej z tych domen. Musi istnieć lepszy sposób na zautomatyzowanie tego!

Myślę, że coś mi się podoba ... jeśli utworzę strefę o nazwie .lub użyję innej funkcji w moim oprogramowaniu DNS, aby zawsze zwracać określony adres IP, gdy Ażądany jest rekord, wydaje mi się, że zbliża się to do mojego pożądanego końca wynik. Mój serwer odpowiada autorytatywnie na żądania i jest o wiele łatwiejszy w zarządzaniu!

Działało to świetnie, dopóki oprogramowanie do sprawdzania nazw serwerów nie zaczęło sprawdzać tych domen. Doszedłem do wniosku, że mogę usunąć większość błędów, dodając NSrekordy, ale moje oprogramowanie nie pozwala mi umieścić więcej niż jednego SOArekordu w tym samym pliku strefy.

Jak obejść ten SOAproblem z wieloma rekordami?

Andrew B.
źródło

Odpowiedzi:

12

O ile nie rozumiem pytania, robię to regularnie z BIND i wydaje się być w porządku, o ile każda strefa jest absolutnie identyczna.

Na moim podstawowym named.confserwerze nazw mam wpisy, które wskazują ogólny plik strefy, np

zone "example.com" {
        type master;
        file "primary/example.GENERIC";
};

zone "example.co.uk" {
        type master;
        file "primary/example.GENERIC";
};

a następnie plik strefy, primary/example.GENERICktóry mówi np

;; Start of Authority
@       IN      SOA     ns.teaparty.net. dns.gatekeeper.ltd.uk. (
                        2004091201      ; serial number YYYYMMDDNN
                        28800           ; refresh  8 hours
                        7200            ; retry    2 hours
                        864000          ; expire  10 days
                        3600 )          ; min ttl  1 day
;;
;;      Name Servers
                IN      NS      ns.teaparty.net.
                IN      NS      ns2.teaparty.net.

I nie mam żadnych problemów z tymi strefami. Jestem otwarty na informację, że źle zrozumiałem pytanie lub że moje domeny faktycznie nie działają, ale do tego czasu myślę, że to działa dla mnie.

Zauważ, że nie możesz wyciągnąć tej samej sztuczki na pomocniczej ; każda strefa będzie wymagała przechowywania innego pliku. Ale ponieważ zawartość tego pliku zostanie wypełniona i będzie aktualizowana według stref różniących się od podstawowej, nie jest to wielka sprawa.

Szalony Kapelusznik
źródło
4

Istnieje wiele skrótów, które mogą ułatwić życie:

Jeśli korzystasz z Bind lub podobnego oprogramowania, które używa plików do przechowywania danych strefy: skieruj strefy do tego samego pliku, na przykład:

zone "example.net" {
    type master;
    file "/etc/bind/zone/default.zone";
};

zone "example.org" {
    type master;
    file "/etc/bind/zone/default.zone";
};

Ponieważ możesz korzystać z niektórych skrótów DNS, możesz utworzyć plik strefy uniwersalnej:

$TTL 1h      ; default expiration time of all resource records without their own TTL value
@  IN  SOA   ns1.example.com. username.example.com. ( 
                               20140218131405 ; Serial number YYYYMMDDHHMMSS
                                        28800 ; Refresh     8 hours
                                         7200 ; Retry       2 hours
                                       604800 ; Expire      7 days
                                        86400 ; Minimum TTL 1 day )
@             IN  NS    ns1.example.com.      ; ns1.example.com is a primary nameserver
@             IN  NS    ns2.example.com.      ; ns2.example.com is a backup nameserver
@             IN  MX    10 mail.example.com.  ; mail.example.com is the mailserver
@             IN  MX    20 mail2.example.com. ; the secondary mailserver
@             IN  A     192.0.2.1             ; IPv4 address for the bare domain
              IN  AAAA  2001:db8:10::1        ; IPv6 address for the bare domain
www           IN  A     192.0.2.1             ; www.domain
              IN  AAAA  2001:db8:10::1        ; IPv6 address for www.domain - note by starting the line with a blank it becomes the continuation of the previous record and this IPv6 record applies to www
wwwtest       IN  CNAME www                   ; wwwtest is an alias for www

Wykorzystuje to fakt, że nazwy hostów w plikach strefy, które nie kończą się kropką, .są zawsze rozszerzane o to, $ORIGINco z kolei jest domyślnie ustawione na nazwę strefy. I @jest skrótem od $ ORIGIN.


Zamiast ręcznie zarządzać poszczególnymi plikami stref, włącz metodę interakcji programowo z serwerami nazw.

Użyłem PowerDNS, który pozwala na RDMS jako back-end, który bardzo dobrze pasuje do stosu LAMP, którego wtedy używaliśmy. Usługi w chmurze, takie jak Amazon Route 53, również ujawniają interfejsy API sieci.

Ale nawet czcigodny Bind obsługuje również dynamiczną aktualizację, która jest metodą dodawania, zastępowania lub usuwania rekordów na serwerze głównym, wysyłając mu specjalną formę wiadomości DNS. Format i znaczenie tych komunikatów określono w RFC 2136 .

Aktualizacja dynamiczna jest włączana przez włączenie klauzuli allow-updatelub update-policyw instrukcji strefy. Aby uzyskać więcej informacji, zapoznaj się z Instrukcją obsługi administratora Bind .

HBruijn
źródło
2
Pierwsza połowa twojej odpowiedzi jest martwa, ale nie jestem pewien, czy DDNS ma tutaj zastosowanie ... nie można jej użyć do dodawania lub usuwania stref, co pokonuje to, co większość ludzi w tym scenariuszu próbuje osiągnąć. (bez konieczności dotykania nazwanego.conf przy każdym dodawaniu strefy) Najbliższą rzeczą, o której wiem w BIND land, jest nowa rndc addzoneopcja, ale nadal jest to trochę brzydkie, ponieważ kończy się generowaniem pliku konfiguracyjnego o zaszyfrowanej nazwie w katalogu roboczym dla każda dodana strefa.
Andrew B,
Rozumiem, co próbujesz powiedzieć, ale inną interpretacją jest to, że trudność w wielu domenach polega na utrzymywaniu i powielaniu pracy. Automatyzacja / skryptowanie DNS to coś, co nie jest dobrze udokumentowane.
HBruijn
4

Krótka odpowiedź

Jeśli szukasz konfiguracji „zerowej konfiguracji” w BIND, nie istnieje. Utworzenie strefy głównej ( .) wydaje się dobrym pomysłem, ale tak nie jest i musisz znaleźć rozwiązanie, które nie wymaga zepsucia DNS, aby spełnić twoje potrzeby.

Długa odpowiedź

W ciągu ostatniego roku otrzymywaliśmy kilka wariantów tego pytania.

Odpowiedź jest tutaj dość prosta: nie można skonfigurować definicji pojedynczej strefy. Każde oprogramowanie, które pozwala zdefiniować lub w inny sposób zsyntetyzować wiele SOArekordów w tym kontekście, jest uszkodzonym oprogramowaniem, a robienie uszkodzonych rzeczy nie jest tematem ServerFault. Musisz albo wybrać oprogramowanie DNS, które upraszcza to zarządzanie, albo wymyślić inną strategię, która nie obejmuje tego konkretnego skrótu.

Zdecydowanie istnieje kilka sztuczek, które mogą ułatwić życie ... na przykład BIND, dość często definiuje się wiele stref, które odnoszą się do tego samego pliku strefy szablonu. Jest to całkowicie legalne, a oprogramowanie sprawdzające nie znajdzie w tym nic złego: patrz odpowiedź MadHattera. Większość osób omija to rozwiązanie, ponieważ dodawanie deklaracji strefy za każdym razem, gdy nabywana jest nowa domena, jest „zbyt dużym nakładem pracy”, ale dla tego rodzaju hostingu nie ma opcji „skonfiguruj raz i odejdź”.

Nowsze wersje BIND obsługują wywoływaną opcję allow-new-zones, która umożliwia dynamiczne tworzenie definicji stref w locie dzięki nowej rndc addzonefunkcjonalności. Możesz rzucić okiem na to i sprawdzić, czy pasuje do twoich potrzeb.

Poza sugerowanymi rozwiązaniami, twoje opcje są nieco ograniczone. Czasami po prostu utkniesz w pracy, jeśli oprogramowanie nie działa tak, jak chcesz.

Andrew B.
źródło
-2

Kiedy mówisz „domeny muszą być skonfigurowane identycznie”, czy masz na myśli, że muszą one przechowywać te same rekordy zasobów? W takim razie czy DNAMERR dla wszystkich domen oprócz jednej nie byłby czystszym rozwiązaniem?

Nie mogę pokonać sztuczki @MadHatter zaimportowania tego samego pliku szablonu, pozostając ściśle w zakresie pytania. Mogę zaoferować tylko podobne podejście dla LDAPbackendu (w moim przypadku używanego z powerDNS): dodaj associatedDomainatrybuty dla odpowiednich rekordów SOA i NS, na przykład:

dn: dc=vanitydomains,ou=DNS,dc=myDIT
objectClass: dNSDomain2
objectClass: domainRelatedObject
dc: vanitydomains
associatedDomain: vanitydomain.ORG
associatedDomain: vanitydomain.NET
associatedDomain: vanitydomain.COM
associatedDomain: vanitydomain.INFO
sOARecord: NS1.example.com  sysadmin.example.com 2011100701 28800 1800 2592000 10800
dNameRecord: example.com
nSRecord: NS1.example.com
nSRecord: NS2.example.com
sema
źródło
Niestety technika DNAME nie dotyka wierzchołka strefy z powodu ograniczeń RFC. Synteza CNAME wynikająca z rekordów DNAME nadal podlega tym samym ograniczeniom co niesyntetyczne rekordy CNAME. W przeciwieństwie do rozwiązania MadHatter wynik jest bardzo daleki od 100% identycznych zestawów RR.
Andrew B