Як я можу налаштувати локальну роздільну здатність (127.0.0.1) дозволу домену на 18.04?


18

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

Після багатого прочитання я не можу за все життя розібратися в тому ж, що стосується чистої установки 18.04.

Все, що я хочу досягти в даний момент, це:

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

Невже це повинно бути просто, навіть тривіально?

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

Як я можу це зробити?


1
Чому б просто не встановити dnsmasq, як ви робили 14.04?
vidarlo

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

що ви маєте на увазі під "вирішеною системою, не дуже добре грає з NetworkManager"?
Себастьян Старк

1
Коли NetworkManager використовує dns = dnsmasq, він повинен сказати, що системно вирішено використовувати dnsmasq, може бути автоматичним.
пім

1
Дякую, це спрацювало чудово! Здається, я не можу дати тобі щедрості ще годину, і, як пропала одна вранці, я зараз лягаю спати і зроблю це, коли повернуся завтра.
Нік Райс

2
Дивовижно. Я читав багато різних технік. Це той, який нарешті спрацював.
Редсандро

3
Для тих, хто вважає за краще повернутись до системного рішення, за замовчуванням /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 override для example.com.


1
Я не міг змусити це працювати. Одразу після чистого мінімального встановлення (за допомогою параметра «стерти диск») sudo apt install dnsmasqвидається помилка «не вдалося створити прослуховувальний сокет для порту 53: Адреса вже використовується». Я все одно продовжував до кінця, якщо наступний крок вирішив це, але це не сталося, і це не спрацювало.
Нік Райс

Потім dnsmasq, який запускається NetworkManager, все ще працює. Тож спочатку його слід деактивувати, врешті-решт убити, і лише після цього пакунок dnsmasq повинен бути встановлений.
Себастьян Старк

Спасибі, Себастьян. Однак я вже прийняв відповідь Піма, який працював бездоганно, тому я вже зараз можу рухатись, не граючи з цим більше.
Нік Райс

@NickRice Немає проблем з цим, але, можливо, інші хочуть спробувати
Себастьян Старк

Так, звичайно, Себастьян. Я спробував спершу вашу відповідь, оскільки це був найпростіший, і якщо все, що потрібно, - це доданий початковий крок, то це дуже хороший.
Нік Райс

0

Це буде не так просто, як редагування файлу хостів. У вас є пара варіантів:

Цей проксі-сервер DNS python, який буде обробляти підстановку в / etc / hosts

Використання DNSmasq


Спасибі. Ваше посилання на питання DNSmasq - це те, що я роблю в 14.04. Так само, як це зробити в новій установці 18.04, не працює через порт конфлікту. Тож поза коробкою щось інше потребує порівняно з цим. Переглядаючи весь той код, необхідний для проксі-сервера DNS, я не можу повірити у все необхідне. Це було раніше, крім, мабуть, тих, хто наполягав на використанні / etc / hosts.
Нік Райс

Ви можете netstat -tulpnперевірити, що використовує порт? РЕДАКТУВАННЯ: Ніколи не знаю, бачив прийняту відповідь. проблема вирішується системою.
Harikrishnan R
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.