В моем /etc/network/interfaces
у меня есть несколько серверов, перечисленных в dns-nameservers
, у одного набора серверов Ubuntu есть 3, у другого 4. У нас не было проблем, пока нас не заставили добавить еще 2 к каждому, но мы все еще не могли успешно решить с использованием новых DNS-серверов. После некоторых исследований мы обнаружили, что только 3 DNS-сервера были скопированы в /etc/resolv.conf
. Мы можем решить нашу непосредственную проблему, разместив там 3 основных сервера и опуская резервные DNS-серверы, но я бы хотел сохранить все необходимые DNS-серверы доступными.
А почему так много:
Можно использовать dnsmasq
добавить любое количество дополнительных серверов DNS. Вот то, как сделать это.
Первая установка dnsmasq:
sudo apt install dnsmasq
Конфигурационный файл редактирования и добавляет Ваши серверы DNS там (f.ex в конце файла):
sudo nano /etc/dnsmasq.conf
server=8.8.8.8
server=8.8.4.4
Сохраните файл и теперь отредактируйте файл (и добавьте 127.0.0.1 как сервер имен):
sudo nano /etc/resolv.conf
nameserver 127.0.0.1
Перезапустите dnsmasq (или еще лучшая перезагрузка ПК):
sudo service dnsmasq restart
Проверьте, отвечает ли dnsmasq на запросы DNS (ищите СЕРВЕР, должен быть 127.0.0.1):
dig google.pl
;; SERVER: 127.0.0.1#53(127.0.0.1)
Примечание: Иногда Администратор сети может переопределить /etc/resolv.conf
файл, таким образом, можно сделать это только для чтения:
sudo chmod -w /etc/resolv.conf
ПРИМЕЧАНИЕ 2: возможно, что необходимо будет отключить сборку - в DNS
sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved
Это будет казаться, что это - 'излишество' для того, в чем Вы нуждаетесь, но на самом деле это - вероятно, самое 'стабильное' решение до сих пор для обработки маршрутизации запросов DNS на основе того, что точно Вы запрашиваете.
Это может быть развернуто на независимом сервере или на самом локальном сервере (серверах).
Настроенный a bind9
Сервер DNS, настроенный как средства передачи к правильно запросам маршрута к надлежащим серверам DNS на основе требуемых доменов.
Это может походить на излишество, но это - на самом деле нормальное решение. Но, мы должны будем сделать некоторые изменения для создания этой работы надлежащей.
Шаг 0: Поскольку Вы находитесь на 16,04, мы должны связать bind9
сервер к отдельному localhost
адрес на 127.0.2.1 для локального слушателя.
ТОЛЬКО СДЕЛАЙТЕ ЭТОТ ШАГ при выполнении этого на самом сервере, и не как его собственный независимый сервер DNS, к которому запросит сервер. При выполнении этого на отдельном сервере так сервер, Вы направляли, что жалобы об отправят запросы на этот сервер, пропустить к шагу 1. ИНАЧЕ сделайте эти изменения на сервере, на который Вы жалуетесь.
Во-первых, должны добавить мы 127.0.2.1
к Вашей системе. Таким образом, можно связать с адресом правильно.
Отредактируйте Ваш /etc/network/interfaces
файл, и под iface lo inet loopback
строка добавляет это:
up ip -4 addr add 127.0.2.1/8 dev lo
down ip -4 addr del 127.0.2.1/8 dev lo
Можно или перезагрузить систему теперь для получения этого адреса, добавленного, или если Вы НЕ хотите перезагружать, можно добавить это вручную:
sudo ip -4 addr add 127.0.2.1/8 dev lo
После того как Вы проверяете, что этот адрес настраивается (ip -4 addr list
покажет 127.0.2.1 теперь), мы можем продолжить.
Шаг 1: установка bind9
Во-первых, установка bind9
.
sudo apt install bind9
Затем, после того как это установлено, мы должны настроить его. В целях этого ответа я собираюсь быть использованием следующих примеров:
*.db.example.com is served by DNS server 10.3.2.1
*.internal.example.com is served by DNS server 10.2.3.4
Internet nameservers are serviced by 8.8.8.8 and 8.8.4.4 (Google)
Шаг 2: настроить bind9
Отредактируйте /etc/bind/named.conf.options
файл, таким образом, это похоже на это:
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
forwarders {
8.8.8.8;
8.8.4.4;
};
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-enable yes;
dnssec-validation yes;
minimal-responses yes;
auth-nxdomain no; # conform to RFC1035
// If this bind9 instance is acting as a standalone server for
// multiple systems to query to, then omit 127.0.2.1 here and
// adjust 10.10.1.0 to be the server's actual IP address on network.
//
// If this bind9 instance is ONLY serving the local server you were
// trying to get 5 Nameservers onto, then only use 127.0.2.1 here.
listen-on { 127.0.2.1; 10.10.1.0; };
// If you don't have IPv6 set up, then leave this like this:
listen-on-v6 { none; };
allow-query { 127.0.0.0/8; 192.168.0.0/16;
10.0.0.0/8; 172.16.0.0/12; };
allow-transfer { 127.0.0.0/8; 192.168.0.0/16;
10.0.0.0/8; 172.16.0.0/12; };
allow-recursion { 127.0.0.0/8; 192.168.0.0/16;
10.0.0.0/8; 172.16.0.0/12; };
};
Это настроит bind9
так, чтобы все в других отношениях несопоставленные запросы были переданы к серверам имен Google на 8.8.8.8 и 8.8.4.4 в порядке.
Теперь, я упоминаю "несопоставленные запросы". Мы должны настроить другие две внутренних зоны средства передачи для вышеупомянутых диапазонов 'в качестве примера'.
Править /etc/bind/named.conf.local
. Мы должны будем добавить некоторые вещи теперь.
В конце файла добавьте это:
zone "db.example.com" {
type forward;
forwarders { 10.3.2.1; };
};
zone "internal.example.com" {
type forward;
forwarders { 10.2.3.4; };
};
Затем после того как это сделано, мы должны перезапустить bind9
сервис.
sudo systemctl restart bind9
После того как это перезапущено, мы должны видеть это слушание и на localhost его сервера и на IP-адресе системы в зависимости от конфигураций выше.
Шаг 3: Удостоверьтесь право твердости сервера.
Выполните некоторые запросы DNS против этого сервера (Вам, возможно, понадобится dnsutils
установленный для этого). Для "АДРЕСА" используйте IP-адрес выполнения сервера bind9
если это - автономный сервер, используйте IP-адрес 127.0.2.1
если Вы работаете bind9
на том же сервере как сервер Вы спрашивали о.
dig @ADDRESS +short server.db.example.com
dig @ADDRESS +short system.internal.example.com
dig @ADDRESS +short google.com
Все три из этих запросов должны решить правильно. Используйте надлежащие имена хостов для своих сред, все же.
Если все это работает, то продвиньтесь.
Шаг 4: Установите свой сервер для надлежащего использования этого сервера имен
Если этот сервер имен теперь настраивается на отдельном сервере с сервера, Вы первоначально говорили о, то вместо этих 5 серверов имен Вы использовали прежде, только используйте IP-адрес сервера, выполняющего это bind9
экземпляр вместо этого.
Если этот сервер имен настраивается локально на том же сервере как тот, Вы спрашивали о, то используете 127.0.2.1
вместо этих 5 IP-адресов.
Затем перезагрузка. У Вас должен затем быть DNS, работающий, как Вы ожидаете, но использование bind9
как механизм вместо того, чтобы пытаться заставить resolvconf работать правильно.
Это может казаться сложной установкой, но на самом деле работает довольно проклятое хорошо. Я использую подобную установку для 'нескольких среды' установки, где я должен использовать внутренние серверы DNS на VPNs для определенных диапазонов подсетей, но Интернет-адресах для всего остального при обходе других серверов DNS. Это может походить на решение для излишества, но работы.
Удача, и задает вопросы, если у Вас есть они как комментарии к моему ответу!
Для Версий Ubuntu после 16.04:
Просто отредактируйте файл /etc/systemd/resolved.conf
Не прокомментируйте DNS и домены, введите дюйм/с и searchdomains (разделенный пробел) и перезапустите systemd-resolv или перезагрузите Ваш хост.
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details
[Resolve]
DNS=<IP> <IP>
#FallbackDNS=
Domains=<domain> <domain>
#LLMNR=yes
#MulticastDNS=yes
#DNSSEC=no
#Cache=yes
#DNSStubListener=udp
Для версий Ubuntu с 16,04 или ранее
Использовать resolvconf
:
sudo apt-get install resolvconf
править /etc/resolvconf/resolv.conf.d/tail
включать Ваши серверы DNS и домены
nameserver 8.8.8.8
nameserver 4.4.4.4
nameserver 192.168.1.1
search mydomain.com myotherdomain.com corporatedomain.local
затем перезапустите сервис
/etc/init.d/resolvconf restart
и Ваш /etc/resolv.conf
должен быть похожим на это
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
nameserver 8.8.8.8
nameserver 4.4.4.4
nameserver 192.168.1.1
search mydomain.com myotherdomain.com corporatedomain.local
Для тех, кто следует шагам из ответа Михала Пшибиловича и испытывает проблемы с NetworkManager, переписывающим /etc/resolv.conf
с 127.0.0.53 - добавьте dns=dnsmasq
в раздел [main] в /etc/NetworkManager/NetworkManager.conf
. Затем выполните:
systemctl restart NetworkManager
systemctl restart dnsmasq