Mam sieć wewnętrzną z serwerem DNS z systemem BIND, połączonym z Internetem za pomocą pojedynczej bramy. Moja domena „example.com” jest zarządzana przez zewnętrznego dostawcę DNS. Niektóre wpisy w tej domenie, np. „Host1.przyklad.com” i „host2.przyklad.com”, a także wpis najwyższego poziomu „przyklad.com” wskazują na publiczny adres IP bramy.
Chciałbym, aby hosty znajdujące się w sieci wewnętrznej rozdzieliły „host1.przyklad.com”, „host2.przyklad.com” i „przyklad.com” na wewnętrzne adresy IP zamiast adresu bramy. Inne hosty, takie jak „otherhost.example.com”, powinny być nadal rozwiązywane przez zewnętrznego dostawcę DNS.
Udało mi się to zrobić dla wpisów host1 i host2, definiując dwie strefy pojedynczego wejścia w BIND dla „host1.przyklad.com” i „host2.przyklad.com”. Jeśli jednak dodam strefę dla „example.com”, wszystkie zapytania dotyczące tej domeny są rozwiązywane przez mój lokalny serwer DNS, a np. Zapytanie „otherhost.example.com” powoduje błąd.
Czy można skonfigurować BIND w taki sposób, aby przesłonił tylko niektóre wpisy domeny, a resztę rozwiązać rekurencyjnie?
źródło
Odpowiedzi:
Najlepszą metodą jest strefa polityki odpowiedzi w Powiązaniu 9.8.1 lub nowszym. Pozwala zastąpić pojedyncze rekordy w dowolnych strefach (i nie ma potrzeby tworzenia do tego całej subdomeny, tylko pojedynczy rekord, który chcesz zmienić), pozwala zastąpić CNAME itp. Inne rozwiązania, takie jak Bez ograniczeń, nie mogą zastąpić CNAME .
https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html
EDYCJA: Zróbmy to odpowiednio. Udokumentuję to, co zrobiłem na podstawie samouczka połączonego powyżej.
Mój system operacyjny to Raspbian 4.4 dla Raspberry Pi, ale technika ta powinna działać bez żadnych zmian w Debianie i Ubuntu lub z minimalnymi zmianami na innych platformach.
Przejdź do miejsca, w którym przechowywane są pliki konfiguracyjne Bind w systemie - tutaj
/etc/bind
. Utwórz tam plikdb.rpz
o następującej treści:Co to robi?
www.some-website.com
fałszywym adresem127.0.0.1
, skutecznie wysyłając cały ruch dla tej witryny na adres pętli zwrotnejwww.other-website.com
do innej witryny o nazwiefake-hostname.com
Wszystko, co może znaleźć się w pliku strefy Bind, możesz użyć tutaj.
Aby aktywować te zmiany, musisz wykonać jeszcze kilka czynności:
Edytuj
named.conf.local
i dodaj tę sekcję:Powyższy samouczek mówi o dodawaniu kolejnych elementów,
zone "rpz" { }
ale nie jest to konieczne w prostych konfiguracjach - to, co pokazałem tutaj, jest minimum, aby działało na lokalnym tłumaczu.Edytuj
named.conf.options
i gdzieś woptions { }
sekcji dodajresponse-policy
opcję:Teraz uruchom ponownie Powiązanie:
Otóż to. Serwer nazw powinien teraz zacząć zastępować te rekordy.
Jeśli chcesz wprowadzić zmiany, po prostu edytuj
db.rpz
, a następnie ponownie uruchom Powiązanie.Bonus: jeśli chcesz zalogować zapytania DNS do syslog, abyś mógł obserwować przebieg postępowania, edytować
named.conf.local
i upewnić się, że jestlogging
sekcja zawierająca te instrukcje:Uruchom ponownie Bind ponownie i to wszystko.
Przetestuj na maszynie z uruchomionym programem Bind:
Jeśli uruchomisz kopanie na innym komputerze, po prostu użyj @ the-ip-address-of-Bind-server zamiast @ 127.0.0.1
Z powodzeniem zastosowałem tę technikę, aby zastąpić CNAME dla witryny, nad którą pracowałem, wysyłając ją do nowego modułu równoważenia obciążenia AWS, który właśnie testowałem. Do uruchomienia Binda wykorzystano Raspberry Pi, a RPi skonfigurowano również do działania jako router Wi-Fi - więc podłączając urządzenia do SSID działającego na RPi, otrzymałem przesłonięcia DNS potrzebne do testowania.
źródło
Ograniczeń rekurencyjne serwer DNS ma możliwości pominięcia indywidualnych rekordów zasobów.
Sprawdź ustawienia
local-zone
ilocal-data
konfigurację w instrukcji , np .:transparent
Ustawienie nalocal-zone
powiada to zrobić normalne wyszukiwań rekurencyjnych żadnych nazw nie zasilanychlocal-data
.źródło
unbound
na własnym routerze, myślę, że rozwiązanie jest znacznie lepsze.Możesz zajrzeć do „dnsmasq”, który pozwala ci robić całkiem sprytne rzeczy z ulepszaniem rozdzielczości.
źródło
To, czego szukasz, to podzielony DNS, który jest zdefiniowany przez Webopedia jako:
Zasadniczo musisz wykonać kopię pliku strefy zewnętrznej i podprzeć go na wewnętrznym serwerze DNS, a następnie zmienić lub dodać rekordy potrzebne specjalnie dla sieci wewnętrznej. Jest to dość powszechna konfiguracja, chociaż synchronizacja „zewnętrznych” rekordów między dwoma serwerami DNS może być utrudniona. Jeśli utworzysz lub zmienisz rekord na serwerze publicznym, należy go również utworzyć lub zmienić na serwerze prywatnym.
Można to zaimplementować niezależnie od używanej implementacji serwera DNS. W większości konfiguracji będziesz mieć jeden serwer DNS, który obsługuje sieć zewnętrzną, i inny, który obsługuje sieć wewnętrzną. Dzięki BIND, podobnie jak innym implementacjom, możesz mieć obie wersje strefy na tym samym serwerze, korzystając z instrukcji „allow-query” w sekcji strefy pliku named.conf.
Inną możliwością na BIND (i nigdy tego nie próbowałem) byłoby ustawienie domeny example.com na wewnętrznym serwerze DNS przy użyciu tylko tych rekordów, których używasz wewnętrznie. Następnie ustaw instrukcję „forward” za pomocą argumentu „first” (w połączeniu z „forwarders”). Teoretycznie poprosiłoby to zewnętrzny serwer DNS (zgodnie z ustawieniami „forwarderów” o odpowiedź, która nie miałaby twoich wewnętrznych rekordów i nie zwróciłaby odpowiedzi na błąd. Następnie serwer wewnętrzny szukałby odpowiedzi. Nie pewnie, czy to zadziała, ale to myśl.
źródło
W BIND dochodzę do tych wyników, definiując strefę przy użyciu żądanej nazwy hosta. Podejście jest w porządku, jeśli chcesz zastąpić tylko kilka hostów.
Moja deklaracja strefy wygląda następująco:
Moja definicja strefy wygląda następująco:
Jeśli więc zapytam example.com w intranetowym DNS i ISP DNS, otrzymam ten sam adres IP, ale jeśli zapytam override.example.com, otrzymam różne wyniki, jeśli intranetowy DNS (podstawowy) jest dostępny.
źródło
Jesteś już na dobrej drodze.
Na wewnętrznych serwerach DNS musisz zdefiniować strefę dla każdego hosta wyjątku znajdującego się bezpośrednio pod „example.com”. Aby zminimalizować te wyjątki, powszechną praktyką jest nazywanie wszystkich komputerów wewnętrznych „hosta.internal.example.com”, przy czym serwer DNS wysyła większość zapytań do zewnętrznych serwerów DNS, ale autorytatywny dla strefy „internal.example.com”. (Po przejściu drobnych operacji zwykle jest kilka serwerów DNS, do których kierowani są klienci, i osobny autorytatywny DNS, do którego kierowane są te serwery dla „internal.example.com”).
Zwykle tworzone są wyjątki, które opisujesz, tylko wtedy, gdy host musi być osiągalny zarówno zewnętrznie, jak i wewnętrznie. Nawet wtedy możesz użyć „host1.example.com” z zewnątrz i „host1.internal.example.com” od wewnątrz. Hosty wewnętrzne są konfigurowane w taki sposób, aby wyszukiwały nazwy w „internal.example.com”. Są sytuacje, w których to, co już robisz, jest odpowiednie, na przykład jeśli certyfikat serwera identyfikuje serwer jako „host1.przyklad.com”, w którym to przypadku chcesz, aby była to nazwa, z którą łączą się klienci.
źródło
Korzystanie z dnsmasq sprawia, że jest to naprawdę łatwe. http://www.thekelleys.org.uk/dnsmasq/doc.html Działa jak serwer dns, ale otrzymuje odpowiedzi z lokalnego serwera dns. Fajną rzeczą jest to, że możesz zastąpić rekordy jednej domeny bez bałagania przy użyciu plików strefy
źródło
W rzeczywistości istnieje inny, choć może nieco inny sposób, aby to zrobić. Mam tę samą sytuację, mam domenę, która jest używana zewnętrznie i wewnętrznie, i mam zewnętrzne hosty statyczne i dynamiczne. Jedynymi naprawdę bolesnymi są zewnętrzne dynamiczne. Rozwiązanie może nie jest najbardziej eleganckie, ale możliwe do wdrożenia za pomocą małego skryptu. Przeważnie robię własny skrypt dynamicznego DNS z interfejsem API mojego dynamicznego dostawcy DNS, uruchamiam ten skrypt cron, co 5 minut:
1) Uzyskaj mój zewnętrzny adres IP. czy to się zmieniło? brak wyjścia.
2) zmieniono adres IP, wywołano interfejs API dostawcy dyndns, z nowym adresem IP,
3) sed db.mydomain.com z zewnętrznym adresem IP
4) uruchom ponownie wiązanie.
Działa bardzo niezawodnie w mojej sieci domowej
źródło
dyn.dev.shahed.biz
z całego świata! Czy mógłbyś pomóc nam rozwiązać ten problem?