Как добавить DNS-сервер через resolv.conf?

Вы можете воспользоваться следующим регулярным выражением:

^(\S+)\s+(\S+)

Онлайн-демо

Подробности

^ - начало строки (\S+) - захватывающая подмаска №1: 1 и более выраженная личность: отличные от пробельных букв (f6) - 1 и более пробельных букв (f7) - захватывающая подмаска №2: 1 и более выраженная личность - отличные от пробельных символов.

Код на JavaScript:

var s = "xxxxx@mail.ru      id";
var res = s.match(/^(\S+)\s+(\S+)/);
console.log(res[1], "и", res[2]);

Если нужно получить подстроку до первого пробела, можно использовать /^\S+/:

var s = "xxxxx@mail.ru      id";
var res = s.match(/^(\S+)\s+(\S+)/);
console.log(res[1], "и", res[2]);

1
задан 9 June 2014 в 21:56

17 ответов

Здесь я нашел другой подход, который включает добавление строки, подобной приведенной ниже, к /etc/dhcp/dhclient.conf:

prepend domain-name-servers x.x.x.x, y.y.y.y;

Аналогичным образом, я нашел третий подход здесь , который включает добавление строки к /etc/network/interfaces:

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4

Обновление: вот официальная документация для третьего подхода.

127
ответ дан 25 May 2018 в 11:59
  • 1
    Я голосовал за это, потому что third approach - самый простой способ сделать это. – Billy Moon 17 July 2012 в 14:27
  • 2
    @billy Я не мог заставить третий метод работать вообще. Только первый, указанный здесь, редактируя dclient.conf, работал для меня. – Jeff Atwood 18 October 2012 в 02:49
  • 3
    Примечание. Редактирование dhclient.conf имеет какой-либо эффект, если используется dhclient (и используется как ifup, так и NetworkManager!) Редактирование / etc / network / interfaces имеет какой-либо эффект, если ifup используется. Настройка соединений NetworkManager с использованием редактора соединений NetworkManager оказывает влияние только на NetworkManager. – jdthood 29 October 2012 в 20:26
  • 4
    Если я не ошибаюсь, третий подход добавляет другой сервер имен ПОСЛЕ тех, которые возвращаются DHCP. Если вы хотите, чтобы он появился первым, один из других вариантов более уместен. Я использовал /etc/resolvconf/resolv.conf.d/head (после прервать вводящий в заблуждение комментарий «НЕ ИЗМЕНИЙ») :) – starfry 15 September 2014 в 15:46
  • 5
    @ Mr.Hyde, это не команды командной строки, это строки для добавления в / etc / network / interfaces. – Randall Cook 7 July 2015 в 08:49

Похоже, вы говорите о пакете resolvconf.

Установите пакет resolvconf.

Запустите

cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig  #backup copy, always do this
sudo nano head

Верх верхней части файла страшное предупреждение. Файл /etc/resolv.conf автогенерируется из содержимого этого файла; предупреждение есть, поэтому он будет вставлен в /etc/resolv.conf при создании /etc/resolv.conf. В конец файла добавьте

nameserver <ip_of_nameserver>

Нажмите Ctrl x и ответьте да, чтобы сохранить файл. Чтобы закончить, обновите файл /etc/resolv.conf, чтобы изменения были применены прямо сейчас:

sudo resolvconf -u

Затем проверьте содержимое файла /etc/resolv.conf, чтобы увидеть добавленную вами строку. Кроме того, он все равно будет в следующий раз, когда ваш компьютер загрузится или ваша сетевая услуга будет перезапущена, в зависимости от того, что наступит раньше.

82
ответ дан 25 May 2018 в 11:59
  • 1
    Информация о предупреждении файла - это то, что мне нужно. У меня создалось впечатление, что я не должен редактировать файл! Благодаря! – Xunnamius 22 October 2017 в 08:51

Ниже я покажу вам лучший способ, который я нашел с момента запуска версии Ubuntu Server и использую ifup, а не NetworkManager.

На самом деле для меня это упростило :), / etc / network / interfaces. Те же конфигурации, которые вы написали бы в resolv.conf, теперь могут быть в том же файле, что и конфигурации вашего сетевого адаптера, как в приведенном ниже примере:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 75.75.75.75 75.75.76.76
        dns-search local

Я надеюсь, что это поможет и упростит он делает для меня, теперь мы можем создавать статические IP-адреса и добавлять в серверы имен и домен dns все в одном файле:)

29
ответ дан 25 May 2018 в 11:59
  • 1
    Спасибо. Это стало моим любимым методом. Замечание, не относящееся к теме: нет необходимости указывать адреса «сети» и «трансляции», поскольку они автоматически вычисляются из «адреса» и «сетевой маски». Все, что вам действительно нужно, это «адрес», «сетевая маска» и «шлюз». – Martijn Heemels 21 February 2014 в 16:16
  • 2
    Это самый чистый ответ. Просто убедитесь, что правильно заданы слова dns- *. Средство с ошибками "dns-nameservers" была моя фактическая проблема. – John McGehee 14 April 2018 в 00:28

Mine запускает сервер Ubuntu 12.04. Я сделал следующие изменения и перезагрузил сервер (обычно это можно сделать, только снижая сетевой интерфейс, то есть ifdown eth0 или ifup eth0).

В файле /etc/resolvconf/resolv.conf.d/base я добавил следующие записи:

nameserver 8.8.8.8
nameserver 8.8.4.4

Надеюсь, что это поможет!

16
ответ дан 25 May 2018 в 11:59

Вы можете использовать NetworkManager, как указано в ответе Фрэнка, но если вы предпочитаете вручную редактировать /etc/resolv.conf, вы можете сделать это, удалив его (это фактически символическая ссылка), а затем создайте новый простой файл с нужным вами контентом. Утилита resolvconf записывает только файл /run/resolvconf/resolv.conf.

11
ответ дан 25 May 2018 в 11:59

Примечание. Этот ответ был для другой, предшествующей версии вопроса, с фокусом только на предварительном ожидании желаемого сервера имен.

Это работает до 12.04:

Измените /etc/dhcp3/dhclient.conf и добавьте: prepend domain-name-servers 127.0.0.1;

(На самом деле эта строка уже присутствует, все, что вам нужно сделать, это не комментировать ее.)

8
ответ дан 25 May 2018 в 11:59
  • 1
    Это работает, если у вас нет адресов, назначенных DHCP? – Azendale 1 July 2011 в 04:34
  • 2
    Если вы хотите узнать больше о конфигурации dhclient, вы можете сделать man dhclient.conf для доступа к странице руководства dhclient. (Это не ответ на вопрос Азендейла.) – Christian Skjødt 31 August 2011 в 21:01
  • 3
    Этот ответ совершенно неверен. Прежде всего, участник вопроса хочет добавить адрес внешнего namserver, а не адрес 127.0.0.1. Конфигурация интерфейса для внешнего интерфейса не является местом для добавления адреса для внутреннего сервера имен. Во-вторых, файл находится в / etc / dhcp, а не в / etc / dhcp3. В-третьих, поскольку Ubuntu 12.04 такие вещи настраиваются с помощью resolvconf. – jdthood 3 October 2013 в 13:29
  • 4
    Прежде всего - исходный вопрос был резко изменен путем слияния модераторов, поэтому мой ответ, конечно, выглядит странно. Файл dhcp3 был местом, где я ответил на это в 2011 , и даже если это не идеально, это сработало. Я использовал это решение на нескольких машинах. Очевидно, вы измените адрес loopback на тот, который хотите добавить. Я предполагаю, что большинство людей знают, что такое loopback, даже если они не читают RFC6890. – belacqua 4 October 2013 в 20:11
  • 5
    @jdthood Почему бы вам не добавить свой собственный ответ? Лично я не был знаком с способом bsd-ish resolvconf делать вещи. Я предпочел прямой подход /etc/resolv.conf, и я не уверен, в чем преимущество новой системы Rube Goldberg. (Аналогично с / etc / motd). – belacqua 4 October 2013 в 20:46

resolvconf бесполезен. Я на сервере Linux, и мой IP-адрес является статическим, а мои DNS-серверы являются статическими. Мне не нужно resolvconf или NetworkManager.

Сохранение простоты - это моя политика при работе на сервере.

Итак, я сделал aptitude purge resolvconf и вручную удостоверился, что /etc/resolv.conf не является IP-адресом ] и просто создал статический файл. На всякий случай, когда программа пытается изменить файл, я сделал chattr +i (неизменяемый) на /etc/resolv.conf в качестве меры предосторожности.

6
ответ дан 25 May 2018 в 11:59
  • 1
    Поскольку resolvconf является частью базовой системы, удаляя ее, вы просите о проблемах в будущем, во время обновления. – jdthood 29 October 2012 в 20:30
  • 2
    Я согласен с комментарием и ответом: рассмотрите, сколько проблем это вызвало, и сколько часов поддержки ушло на устранение этой «проблемы» и сколько ИТ-специалистов потратили время на поиск ответов. Простой лучший - мне не нужны мои серверы для изменения DNS для чего-то, чего я не хочу. – Mei 30 July 2014 в 21:40

Большинство из вышеперечисленных предполагает, что у вас нетронутая система, но реальность часто такова, что вы устанавливаете разные клиенты dhcp, отключили диспетчер сети в некоторой предыдущей версии Ubuntu и т. д. Возможно, было бы полезно знать следующее. Я некоторое время использую dnsmasq, но деинсталлировал его. В настоящее время моя система имеет следующее содержимое /etc/resolv.conf (которое является символической ссылкой на /run/resolvconf/resolv.conf в моей системе):

cat /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
nameserver 127.0.0.1

Неважно, как часто я запускаю sudo resolvconf -u или [ f8], он не обновил сервер имен тем, которые я установил в NetworkManager. Информация, которую resolvconf использует из NetworkManager:

cat /run/resolvconf/interface/NetworkManager  
nameserver 8.8.4.4
nameserver 8.8.8.8

Однако оказывается, что если в этой папке имеется несколько файлов, этот файл может вообще не использоваться. Недопустимый файл был удалён при деинсталляции dnsmasq:

cat /run/resolvconf/interface/lo.dnsmasq                        
nameserver 127.0.0.1

После удаления этого файла (и после этого sudo resolvconf -u) были решены проблемы с dns:

cat /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
nameserver 8.8.4.4
nameserver 8.8.8.8 

Надеюсь, это поможет другим с отладкой (сложным взаимодействием между всеми этими различными сетевыми инструментами). Если вы используете resolvconf, обязательно запустите ls /run/resolvconf/interfaces, чтобы увидеть, что там.

4
ответ дан 25 May 2018 в 11:59
  • 1
    Спасибо, это было очень полезно. Сначала я попробовал более высокие голосовые ответы, и никто, похоже, не сделал этого. У меня не было никаких дополнительных файлов в директории /run/resolvconf/interface/, но мой NetworkManager файл нуждался в некоторой любви. Ваш ответ помог решить эту проблему для меня. – mason81 2 July 2015 в 17:40

Вы можете отредактировать соединение «AUTO ETH0» или другое имя, которое вы используете для подключения в NM. Вы можете сделать это, щелкнув правой кнопкой мыши по NM и выбрав «Edit Connections ...». На вкладке IPv4 вы можете выбрать только «Автоматические (DHCP) адреса», так как «Метод» и NM позволят вам устанавливать адрес сервера имен вручную, даже адреса передаются по DHCP.

2
ответ дан 25 May 2018 в 11:59

Я просто удалил ссылку в /etc/resolv.conf и создал регулярный файл с адресами серверов имен. Он работает, и я не вижу причин использовать эту довольно странную конструкцию, которую создали разработчики Ubuntu.

2
ответ дан 25 May 2018 в 11:59
  • 1
    Да, я не поклонник такого изменения, которое влияет на серверы, добавляет сложности и непрозрачность. Это основное поведение, которое не должно меняться от выпуска к выпуску. – belacqua 4 October 2013 в 20:32

Я исправил это, изменив порядок источников. Я переместил источник dns до mdns в /etc/nsswitch.conf:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

Вы можете сохранить свои настройки и по-прежнему использовать локальный кеширующий сервер таким образом.

1
ответ дан 25 May 2018 в 11:59
  • 1
    вместо того, чтобы добавлять записи, исправьте систему, она сломана и даст вам информацию, которую вы действительно хотите. +1. – nelaaro 5 February 2013 в 18:30

Как насчет:

sudo dpkg-reconfigure resolvconf

До этого используйте Network Manager для изменения адреса DNS и изменения метода на

sudo dpkg-reconfigure resolvconf

Автоматический (DHPC) адрес только

1
ответ дан 25 May 2018 в 11:59

Добавление моего бита в уже длинный список, вот еще один способ (проверен 12.04):

Измените /run/resolvconf/interface/NetworkManager в соответствии с вашими потребностями. Вот пример:

search foobar.com example.com
nameserver 192.168.1.1

Затем, как указано для большинства других примеров, сделайте sudo resolvconf -u. Теперь вы найдете свой resolv.conf следующим образом:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

Мне все еще не нравится, как это реализовано сейчас (кажется, Ubuntu нуждается в службе для каждого foo, который он делает), и предпочел бы plain resolv.conf наверняка. Но этот подход, кажется, лучший компромисс для меня до сих пор. Добавленный «localhost-NS» не должен сильно задевать.

1
ответ дан 25 May 2018 в 11:59
[F1]
1
ответ дан 25 May 2018 в 11:59

Это очень популярный вопрос с набором стандартных возможных ответов, все из которых, IMO, довольно хаки. У меня всегда были проблемы с Ubuntu, чтобы уважать настройки DNS, которые я настроил в NetworkManager - в частности, статические статические DNS-серверы с «Автоматическими (DHCP) адресами» - и сегодня я наконец понял, что было НАСТОЯТЕЛЬНО НЕПРАВИЛЬНО. [ ! d0]

Проблема заключается в взаимодействии между resolvconf и NetworkManager. У файла resolvconf этот файл называется /etc/resolvconf/interface-order. По крайней мере, в моих системах NetworkManager вообще не находится в этом файле (за исключением того, что в конце он закрыт * wild card). Итак, что происходит, последний отчет dhclient для resolvconf имеет приоритет над тем, что должен сказать NetworkManager.

Таким образом, по крайней мере в моем случае, фактический ответ заключался в том, чтобы добавить

NetworkManager
[d4 ] на вершине /etc/resolvconf/interface-order или рядом с ним.

(Да, я знаю, что многие люди просто говорят «удалить resolvconf», что мне кажется самой плохой идеей. Но более того , по крайней мере, хитрый и xenial считают resvconf важной частью системы [т. е. ubuntu-minimum зависит от нее], поэтому было бы сложно поддерживать вашу систему в согласованном обновленном состоянии без resolvconf.)

[d6 ] По запросу я могу предоставить более подробную информацию о том, как я это понял. В двух словах я заменил исполняемый файл resolvconf оболочкой оболочки вокруг нее, которая сбрасывала свои аргументы, ввод, вывод и stderr в файлы; и добавил set -x в скрипты обновления resolvconf.

1
ответ дан 25 May 2018 в 11:59
  • 1
    Пожалуйста, дайте нам более подробно о том, как вы это поняли " – Pierre.Vriens 31 May 2016 в 22:49

Другой способ - определить dock-серверы docker для определенных серверов:

/etc/docker/daemon.json

Если у вас нет такого файла, просто создайте его:

{
    "dns": ["10.0.0.2", "8.8.8.8"]
}

Источник: https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/

Также см .: https://robinwinslow.uk/2016/06/23/ FIX-докер-сети-DNS /

0
ответ дан 25 May 2018 в 11:59

Чтобы изменить DNS, следуйте инструкциям в: https://developers.google.com/speed/public-dns/docs/using

Перейти в сеть Выберите соединение, для которого вы хотите настроить DNS. Чтобы изменить настройки для беспроводного соединения, выберите вкладку «Беспроводная связь», затем выберите соответствующую беспроводную сеть. Нажмите стрелку (справа), а в появившемся окне выберите вкладку Параметры IPv4 или вкладка IPv6. Если выбранный метод является автоматическим (DHCP), откройте раскрывающийся список и выберите вместо него только адреса (DHCP). Если метод установлен на что-то еще, не меняйте его. В поле DNS-серверов введите IP-адреса DNS, разделенные запятой
0
ответ дан 25 May 2018 в 11:59

Другие вопросы по тегам:

Похожие вопросы: