Jak zmusić dnsmasq do używania serwera dns upstream tylko dla niektórych określonych nazw domen?

16

W tej chwili mam następujący wiersz w dnsmasq.conf, który dobrze obsługuje wszystkie żądania ( /#/pasuje do dowolnej domeny; jest to wymagane):

address=/#/127.0.0.1

Istnieją jednak domeny, które wymagają rozstrzygnięcia na adresy IP inne niż 127.0.0.1.

Jako rozwiązanie tymczasowe zostały dodane do /etc/hosts:

209.85.148.95   ajax.googleapis.com
207.97.227.245  underscorejs.org
72.21.194.31    s3.amazonaws.com

Niestety jest to bardzo tymczasowe rozwiązanie: przestanie działać, gdy tylko zmieni się adres IP domeny docelowej.

Moje pytanie brzmi: jak zmusić dnsmasq do korzystania z nadrzędnego serwera dns do rozwiązywania adresów IP niektórych (określonych) nazw domen?

nrph
źródło

Odpowiedzi:

29

Możesz to zrobić za pomocą server=dyrektywy np

server=/ajax.googleapis.com/8.8.8.8

podobnie zapytałby publiczny serwer DNS Google o domenę ajax.googleapis.com

server=/amazonaws.com/209.244.0.3

zapytałby publiczny serwer DNS poziomu 3 o domenę amazonaws.com.

Możesz pogrupować wiele domen razem

server=/co.uk/com/8.8.4.4

Wyśle domeny .co.uk i .com na serwer DNS w wersji 8.8.4.4

Możesz także mieć wiele server=dyrektyw

−S, --server = [/ [<domena>] / [domain /]] [<ipaddr> [# <port>] [@ <source> [# <port>]]]

Podaj bezpośrednio adres IP serwerów nadrzędnych. Ustawienie tej flagi nie tłumi odczytu pliku /etc/resolv.conf, w tym celu użyj -R. Jeśli podano jedną lub więcej domen opcjonalnych, serwer ten jest używany tylko dla tych domen i są one odpytywane tylko przy użyciu określonego serwera. Jest to przeznaczone dla prywatnych serwerów nazw: jeśli masz serwer nazw w swojej sieci, który zajmuje się nazwami postaci xxx.internal.thekelleys.org.uk pod adresem 192.168.1.1, to podając flagę -S /internal.thekelleys.org.uk/ 192.168.1.1 wyśle ​​wszystkie zapytania dotyczące wewnętrznych maszyn do tego serwera nazw, wszystko inne trafi na serwery w /etc/resolv.conf. Pusta specyfikacja domeny // ma specjalne znaczenie „tylko niekwalifikowane nazwy”, tj. Nazwy bez kropek. Niestandardowy port może zostać określony jako część adresu IP za pomocą znaku #.

Dozwolona jest również flaga -S, która podaje domenę, ale nie ma adresu IP; informuje to dnsmasq, że domena jest lokalna i może odpowiadać na zapytania z / etc / hosts lub DHCP, ale nigdy nie powinna przekazywać zapytań w tej domenie do jakichkolwiek serwerów nadrzędnych. local jest synonimem serwera, aby w tym przypadku pliki konfiguracyjne były wyraźniejsze.

Opcjonalny drugi adres IP po znaku @ informuje dnsmasq, jak ustawić adres źródłowy zapytań dla tego serwera nazw. Powinien to być adres należący do komputera, na którym działa dnsmasq, w przeciwnym razie ta linia serwera zostanie zarejestrowana, a następnie zignorowana. Flaga zapytania-port jest ignorowana dla wszystkich serwerów, które mają określony adres źródłowy, ale port może być określony bezpośrednio jako część adresu źródłowego.

użytkownik9517
źródło
Nie sądzę, że potrzebuje wielu serverlinii: bez względu na adresy, których nie może rozwiązać (127.0.0.1), może dodać je za pomocą addresslinii; cokolwiek innego, DNSMasq wyśle ​​zapytanie server. Jestem całkiem pewien, że taki jest mój.
gravyface
1
@gravyace: Czytam pytanie, jako że chcę, aby wszystko rozwiązało się do 127.0.0.1 z pewnymi wyjątkami, które chce użyć DNS do rozwiązania w przypadku zmiany adresu. Jak widzę, sposobem na to jest użycie dyrektyw serwera.
user9517,
Och, może Kto wie. Tak czy inaczej, to powinno go uruchomić.
gravyface
Działa jak marzenie!
nrph