Как настроить разрешение домена с подстановочными знаками (127.0.0.1) на 18.04?

18

В Ubuntu 14.04 я использую dnsmasq для разрешения доменов wildcard example.com на локальный компьютер (домашний компьютер).

После долгого прочтения я не могу на всю жизнь разобраться в том же на чистой установке 18.04.

Все, чего я хочу достичь на данный момент, это:

  • для ping example.com пинга 127.0.0.1, а не 93.184.216.34;
  • для ping anysubdomain.example.com также пинг 127.0.0.1;
  • а за ping google.com пинговать реальный google.com через роутер / IP DNS.

Конечно, это должно быть просто, даже тривиально?

Но я в тупике. Я могу получить разрешение example.com, но только за счет взлома всего остального.

Как я могу это сделать?

Ник Райс
источник
1
Почему бы просто не установить dnsmasq, как вы сделали 14.04?
Видарло,
1
@vidarlo Ну, конечно, это было первое, что я сделал, как я указал в своем вопросе. Но в отличие от 14.04 это приводит к ошибке «не удалось создать прослушивающий сокет для порта 53: адрес уже используется». Ответ, который я принял, работает нормально, без явной установки dnsmasq.
Ник Райс

Ответы:

30

Вот шаги для Ubuntu 18.04. Это немного долго, так systemd-resolvedкак не очень хорошо с NetworkManagerнастройкой dnsmasq.

Тем не менее, я все же рекомендую начинать dnsmasqс того NetworkManager, что изменения в подключении к сети (WIFI, проводная связь, ...) будут обрабатываться прозрачно.

Включить dnsmasq в NetworkManager

Отредактируйте файл /etc/NetworkManager/NetworkManager.confи добавьте строку dns=dnsmasqв [main]раздел, это будет выглядеть так:

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

Позвольте NetworkManager управлять /etc/resolv.conf

sudo rm /etc/resolv.conf ; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

Настройка example.com

echo 'address=/.example.com/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/example.com-wildcard.conf

Перезагрузка NetworkManagerи тестирование

NetworkManager должен быть перезагружен, чтобы изменения вступили в силу.

sudo systemctl reload NetworkManager

Затем мы можем убедиться, что можем попасть на какой-то обычный сайт:

dig askubuntu.com +short
151.101.129.69
151.101.65.69
151.101.1.69
151.101.193.69

И, наконец, убедитесь, что example.comи субдомены разрешены как 127.0.0.1:

dig example.com askubuntu.example.com a.b.c.d.example.com +short
127.0.0.1
127.0.0.1
127.0.0.1
ПИМ
источник
что вы имеете в виду под "systemd-resolved не очень хорошо работает с NetworkManager"?
Себастьян Старк
1
Когда NetworkManager использует dns = dnsmasq, он должен указать systemd-resolved использовать dnsmasq, может быть автоматическим.
Пим
1
Спасибо, это сработало отлично! Похоже, я не могу дать вам награду еще час, и, поскольку она уйдет однажды утром, я сейчас ложусь спать и сделаю это, когда завтра снова переключусь.
Ник Райс
2
Потрясающие. Я прочитал много разных техник. Это тот, который наконец-то сработал.
Редсандро
3
Для тех, кто предпочитает возвращаться к systemd-resolved, /etc/resolv.confуказывает /run/systemd/resolve/stub-resolv.confпо умолчанию.
Поти Калимуту
2

Сначала убедитесь, что в /etc/NetworkManager/NetworkManager.confследующей строке нет или закомментировано:

dns=dnsmasq

Перезапустите NetworkManager:

sudo systemctl restart NetworkManager

Убедитесь, что dnsmasq, управляемый NetworkManager, больше не работает, либо завершив процесс, либо перезагрузив систему.

Затем установите dnsmasq:

sudo apt install dnsmasq

Добавьте следующее к /etc/dnsmasq.d/example.com:

address=/example.com/127.0.0.1

Перезапустите dnsmasq:

sudo systemctl restart dnsmasq

Теперь вы должны иметь подстановочный знак dns подстановки для example.com.

Себастьян Старк
источник
1
Я не мог заставить это работать. Сразу после чистой минимальной установки (с опцией «стереть диск») sudo apt install dnsmasqвыдается ошибка «не удалось создать прослушивающий сокет для порта 53: адрес уже используется». В любом случае я продолжал до конца, если последующий шаг разрешит это, но это не сработало, и это не сработало.
Ник Райс
Затем dnsmasq, запущенный NetworkManager, все еще работал. Поэтому он должен быть сначала деактивирован, в конечном итоге уничтожен, и только после этого должен быть установлен пакет dnsmasq.
Себастьян Старк
Спасибо, Себастьян. Однако я уже принял ответ Пима, который сработал безупречно, так что теперь я могу двигаться дальше, не балуясь с ним больше.
Ник Райс
@NickRice Нет проблем с этим, но, возможно, другие захотят попробовать
Себастьян Старк
Да, конечно, Себастьян. Сначала я попробовал ваш ответ, потому что он был самым простым, и если все, что ему нужно, это дополнительный начальный шаг, то он очень хороший.
Ник Райс
0

Это будет не так просто, как редактирование файла hosts. У вас есть несколько вариантов:

Это DNS-прокси Python, который будет обрабатывать подстановочные знаки в / etc / hosts

Использование DNSmasq

Харикришнан Р
источник
Благодарю. Ваша ссылка на вопрос DNSmasq - это то, что я делаю в 14.04. Просто сделать то же самое в новой установке 18.04 не работает из-за конфликта портов. Поэтому из коробки нужно что-то еще делать по сравнению с этим. Глядя на весь этот код, необходимый для DNS-прокси Python, я не могу поверить всему, что необходимо. Это было раньше, кроме тех, кто настоял на использовании / etc / hosts.
Ник Райс
Можете ли вы netstat -tulpnпроверить, что использует порт? РЕДАКТИРОВАТЬ: Неважно, видел принятый ответ. проблема в системном разрешении.
Харикришнан Р