Bagaimana saya bisa mengatur resolusi domain wildcard lokal (127.0.0.1) pada 18.04?


18

Di Ubuntu 14.04 saya menggunakan dnsmasq untuk menyelesaikan domain wildcard example.com ke mesin lokal (komputer desktop di rumah).

Setelah banyak membaca di sekitar saya tidak bisa seumur hidup saya memilah yang sama pada instalasi bersih 18,04.

Yang ingin saya capai saat ini adalah:

  • untuk ping example.com melakukan ping 127.0.0.1 dan bukan 93.184.216.34;
  • untuk ping anysubdomain.example.com juga melakukan ping 127.0.0.1;
  • dan untuk ping google.com melakukan ping google.com nyata melalui router / IP DNS.

Tentunya ini harus sederhana, bahkan sepele?

Tapi saya bingung. Saya bisa mendapatkan penyelesaian example.com tetapi hanya dengan mengorbankan yang lainnya.

Bagaimana saya bisa melakukan ini?


1
Mengapa tidak menginstal dnsmasq seperti yang Anda lakukan pada 14.04?
vidarlo

1
@vidarlo Yah tentu saja itu adalah hal pertama yang saya lakukan, seperti yang saya tunjukkan dalam pertanyaan saya. Namun tidak seperti pada 14.04 yang menghasilkan kesalahan "gagal membuat soket pendengaran untuk port 53: Alamat sudah digunakan". Jawaban yang saya terima berfungsi dengan baik tanpa menginstal dnsmasq secara eksplisit.
Nick Rice

Jawaban:


30

Berikut langkah-langkah untuk ubuntu 18.04. Ini agak lama karena systemd-resolvedtidak berfungsi dengan baik NetworkManagersaat dikonfigurasikan dnsmasq.

Namun saya tetap merekomendasikan mulai dnsmasqdari NetworkManager, karena perubahan konektivitas jaringan (WIFI, kabel, ...) akan ditangani secara transparan.

Aktifkan dnsmasq di NetworkManager

Edit file /etc/NetworkManager/NetworkManager.conf, dan tambahkan baris dns=dnsmasqke [main]bagian, itu akan terlihat seperti ini:

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

Biarkan NetworkManager mengelola /etc/resolv.conf

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

Konfigurasikan example.com

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

Reload NetworkManagerdan pengujian

NetworkManager harus dimuat ulang agar perubahan diterapkan.

sudo systemctl reload NetworkManager

Kemudian kami dapat memverifikasi bahwa kami dapat menjangkau beberapa situs biasa:

dig askubuntu.com +short
151.101.129.69
151.101.65.69
151.101.1.69
151.101.193.69

Dan terakhir, verifikasi bahwa example.comdan subdomain diselesaikan sebagai 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

apa yang Anda maksud dengan "systemd-resolved tidak bermain dengan baik dengan NetworkManager"?
Sebastian Stark

1
Ketika NetworkManager menggunakan dns = dnsmasq, itu harus memberitahu systemd-diselesaikan untuk menggunakan dnsmasq, bisa otomatis.
pim

1
Terima kasih, ini berhasil! Sepertinya saya tidak bisa memberi Anda hadiah selama satu jam lagi, dan karena sudah satu jam di sini di sini saya akan tidur sekarang dan akan melakukan itu ketika saya kembali besok.
Nick Rice

2
Luar biasa. Saya sudah membaca banyak teknik berbeda. Inilah yang akhirnya berhasil.
Redsandro

3
Bagi mereka yang lebih memilih untuk kembali ke systemd-diselesaikan, /etc/resolv.confpoin untuk /run/systemd/resolve/stub-resolv.confsecara default.
Pothi Kalimuthu

2

Pertama-tama pastikan /etc/NetworkManager/NetworkManager.confbaris berikut tidak ada atau dikomentari:

dns=dnsmasq

Mulai kembali NetworkManager:

sudo systemctl restart NetworkManager

Pastikan dnsmasq yang dikontrol NetworkManager tidak berjalan lagi, baik dengan mematikan proses atau me-reboot sistem Anda.

Kemudian instal dnsmasq:

sudo apt install dnsmasq

Tambahkan yang berikut ke /etc/dnsmasq.d/example.com:

address=/example.com/127.0.0.1

Mulai ulang dnsmasq:

sudo systemctl restart dnsmasq

Sekarang Anda harus memiliki pengganti wildcard dns untuk example.com.


1
Saya tidak bisa melakukan ini. Segera setelah instalasi minimal bersih (dengan opsi "erase disk") sudo apt install dnsmasqmemberikan kesalahan "gagal membuat soket pendengaran untuk port 53: Alamat sudah digunakan". Saya tetap melanjutkan sampai akhir kalau-kalau langkah selanjutnya diselesaikan itu, tetapi tidak dan ini tidak berhasil.
Nick Rice

Kemudian dnsmasq yang dimulai oleh NetworkManager masih berjalan. Jadi pertama-tama harus dinonaktifkan, akhirnya dibunuh, dan hanya paket dnsmasq yang harus diinstal.
Sebastian Stark

Terima kasih, Sebastian. Namun saya sudah menerima jawaban pim yang bekerja dengan sempurna, jadi saya bisa melanjutkan sekarang tanpa bermain-main dengannya.
Nick Rice

@NickRice Tidak masalah dengan ini, tapi mungkin orang lain ingin mencoba
Sebastian Stark

Ya tentu saja, Sebastian. Saya memang mencoba jawaban Anda pertama karena itu yang paling sederhana, dan jika semua yang dibutuhkan adalah langkah awal yang ditambahkan maka itu sangat bagus.
Nick Rice

0

Ini tidak akan sesederhana mengedit file host. Anda memiliki dua pilihan:

Proxy DNS python ini yang akan menangani wildcard di / etc / hosts

Menggunakan DNSmasq


Terima kasih. Tautan Anda ke pertanyaan DNSmasq adalah apa yang saya lakukan pada 14.04. Hanya melakukan hal yang sama dalam pemasangan baru 18,04 tidak berfungsi karena konflik port. Jadi di luar kotak sesuatu yang perlu dilakukan dibandingkan dengan itu. Melihat semua kode yang diperlukan untuk proksi DNS python, saya tidak percaya semua yang diperlukan. Itu bukan sebelumnya kecuali, saya kira, bagi mereka yang bersikeras menggunakan / etc / hosts.
Nick Rice

Bisakah Anda lakukan netstat -tulpnuntuk memeriksa apa yang menggunakan porta? EDIT: Nevermind, melihat jawaban yang diterima. masalahnya adalah systemd-resolving.
Harikrishnan R
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.