LINUX.ORG.RU

Разборки с DNS.

 , , ,


0

1

Здравствуйте, уважаемые камрады!

Есть Debian Testing, и есть пара вопросов.

  1. как восстановить оригинальный /etc/resolv.conf, если он случайно затёрт?

Насколько я понял, в Дебиане накакой ресолвер не стоит по умолчанию, и даже пакет resolvconf не установлен. Получается, NetworkManager должен восстановить /etc/resolv.conf после перезагрузки?

  1. вопрос сложнее.

Есть квн-клиент, который имеет свои dns, которые должны (обязаны) подменять провайдерские при работе этого клиента. Но!

Этот локальный resolv.conf от этого клиента лежит в хомяке и не подхватывается системой, в результате мы имеем провайдерские dns во время его работы (то есть матёрый dns leak).

Куда копать, уважаемые товарищи, ставить dns-ресолвер или достаточно симлинка?

У брата на винде всё искаропки работает, но винды не вариант)).

Спасибо заранее!

Ужас какой, я то думал DNS - это магазин и ты по гарантии технику вернуть собираешься.

А по поводу другого DNS - ставь резолвер от systemd и настраивай всё, что тебе надо через NetworkManager.

как восстановить оригинальный /etc/resolv.conf, если он случайно затёрт?

echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" > /etc/resolv.conf
kostik87 ★★★★★
()
Ответ на: комментарий от lagavulin16

А чего ИИ, хотя бы от Google вам не отвечает? Что вы ему такого сказали?

Посмотрите галочки в апплете network-manager, там всё есть.

По умолчанию network-manager будет устанавливать DNS только для DNS зоны, которая прилетает через настройки VPN, допустим company.local, это сделано для подключения к корпоративным сетям.

Если вы подключаетесь к корпоративной сети на работе - спросите системных администраторов вашей компании как настроить.

Если поднимаете VPN для чего-то другого, то ставьте соответствующие галки, что бы все DNS зоны заворачивались.

kostik87 ★★★★★
()
Ответ на: комментарий от lagavulin16

В Linux обращения к DNS серверу идёт через вызовы функций в libc.

libc понимает к какому DNS серверу обращаться из файла /etc/resolv.conf.

В общем случае функционал /etc/resolv.conf очень прост, он просто определяет на какие DNS серверу идут ВСЕ запросы.

Для того, чтобы некоторые запросы шли на один DNS сервер, а другие на другой разбирать это будет тот DNS сервер или некоторая прослойка, куда перенаправляются все запросы.

Для возможности такой настройки добавили systemd-resolved, в этом случае в /etc/resolv.conf указывается 127.0.0.1:53 и уже в конфигурационных файла systemd-resolved сервиса или иного определяется, что допустим запросы в *.company.local отправлять на 192.168.100.1, а все прочие на 8.8.8.8 или 8.8.4.4, если общих DNS серверов не определено, то этот сервис уже сам отправит запрос корневым DNS серверам, узнает у них адрес DNS серверов зоны ru, у DNS серверов зоны ru, допустим узнает адрес DNS серверов yandex.ru и у этих DNS серверов узнает IP адреса серверов для домена yandex.ru, закэширует ответ у себя на время TTL и далее будет отдавать при запросах программам на твоём ПК.

Отсюда вывод, что для изменения адреса DNS сервера куда слать запросы для определённых доменных зон или всех, в зависимости от включения wifi / vpn или чего-то другого - нужно:

  • либо переопределять их сразу в /etc/resolv.conf (для всех запросов)
  • определять в конфигурации чего-то (systemd-resolved или иного сервиса), что отсылаю сюда всё или сюда всё, а вот сюда только это.

И переопределением этих настроек как раз и занимается network-manager. если у тебя нет systemd-resolved или иного сервиса куда ты перенаправляешь DNS запросы в системе и которому network-manager может изменить настройки при включении wifi или VPN, то это работать не будет.

В этом случае вариант только навешивание твоих самописных скриптов, которые будут делать резервную копию /etc/resolv.conf и перезаписывать его при подключении к wifi / vpn и потом возвращать обратно - при отключении.

Другой вариант - поднять у себя полноценный DNS сервер и его прописывать в /etc/resolv.conf и в нём переопределять настройки пересылки DNS запросов для всех зон или конкретных при подключении к wifi / VPN.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Спасибо за развёрнутый ответ, куда копать я разобрался. Но мне не хватает мозгов понять как запретить квн-сервису пользоваться провайдерским днс.

lagavulin16
() автор топика

В /etc/resolv.conf должна быть строка вида

nameserver 1.2.3.4
вот туда и пропиши днс своего прова.

Если DNS приходит динамический про логине в сеть - то программы, ответственные за логин, сами его туда пропишут при подключении (например, pppd если ты подключаешься по протоколу PPP, или dhcp-клиент, если ты получаешь от провайдера настройки через dhcp).

Что касается второго вопроса, то твой клиент впн тоже должен прописывать туда свои днсы. Если не прописывает - обратись а системному администратору своей конторы, который тебе его выдал.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

С /etc/resolv.conf всё ясно. Все nameservers автоматически прописываются, и глобальные и от клиента квн. Непонятно что и куда писать чтобы ЗАПРЕТИТЬ клиенту квн использовать провайдерские днс.

lagavulin16
() автор топика
Ответ на: комментарий от lagavulin16

Каким образом клиент впн использует днс? Они ему не нужны.

Может, программы, запущеные после запуска клиента впн, используют старые днс?

Ну, они используют то что прописано в resolv.conf. Если клиент впн туда не прописал свои - то он виноват что он это не сделал. Или, может быть, у него есть про это настройка, которую ты выключил.

firkax ★★★★★
()
Ответ на: комментарий от lagavulin16

Скриптом во время поднятия увн соединения очищать resolv.conf и прописывать туда один (или сколько их у тебя) нужный адрес. Соответственно при отклюяении интерфейса возвращать провайдерские.

Более подробно не подскажу как именно сделать, но подобное видел. У меня при подключении к определенному проводному подключению автоматом засирается резолв.конф, как именно автоматом - вот что-то никак не разберусь)

frunobulax ★★★★
()
Ответ на: комментарий от firkax

А вот касательно этого

Этот локальный resolv.conf от этого клиента лежит в хомяке и не подхватывается системой

непонятно почему в хомяке. У впн-клиента не может не быть рут-прав, а системному демону лазить по пользовательским $HOME - плохая практика. Ну, если ты не хочешь с этим всем разбираться, то по поводу способа прописывания правильных днсов в /etc/resolv.conf можно не париться - бардак и так уже наступил, можешь хоть симлинк делать, хоть вручную копировать адреса из впнного resolv.conf в системный (только сам файл не копируй лучше).

Но лучше всё-таки организовать правильно всё - системный демон работает сам по себе, без участия /home.

firkax ★★★★★
()
Ответ на: комментарий от frunobulax

Скриптом во время поднятия увн соединения очищать resolv.conf и прописывать туда один (или сколько их у тебя) нужный адрес. Соответственно при отклюяении интерфейса возвращать провайдерские.

Это должен делать впн-клиент, сам. Но если у него он глючный можно и подкостылить.

У меня при подключении к определенному проводному подключению автоматом засирается резолв.конф, как именно автоматом - вот что-то никак не разберусь)

dhcp-клиентом.

firkax ★★★★★
()
Ответ на: комментарий от firkax

<Это должен делать впн-клиент, сам. Но если у него он глючный можно и подкостылить. Он прописывает при начале работы и очищает при отключении, здесь всё как положено. После установки systemd-resolved и симлинка всё стало подхватываться.

Проблема чтобы он не пользовался глобальными провайдерскими днс, вместе со своими. То есть надо как-то реализовать per-interface dns, а вот как это сделать, до меня пока не дошло.

anonymous
()
Ответ на: комментарий от anonymous

Я так и не понял, кто именно пользуется провайдерскими днс. Если в /etc/resolv.conf стоят днсы из приватной сети - все пользуются ими.

per-interface dns

Нет такого. Интерфейс выясняется уже после того как ты обратился в днс и узнал айпи-адрес нужного хоста, а затем посмотрел таблицу роутинга чтобы узнать куда слать пакет для этого айпи-адреса.

firkax ★★★★★
()

Всем большое спасибо за ответы и направления.

Проблема решилась куда как проще - тег «рукожопие» тут не зря).

Нужно было перед установкой пакета systemd-resolved сделать

apt purge openresolv resolveconf

а только потом начисто сделать

apt install systemd-resolved

После этого создались нужные симлинки и, самое главное, /etc/resolv.conf был автоматически сконвертирован в симлинк на resolve-stub.conf из пакета systemd-resolved. Перезагрузка и всё работает отлично без дальнейших вмешательств.

lagavulin16
() автор топика