Cara mendapatkan networkmanager untuk mengkonfigurasi server nama domain khusus dengan openresolv + dnsmasq

11

Saya sering terhubung ke beberapa jaringan secara bersamaan. Masing-masing jaringan ini menyediakan konfigurasi server nama melalui dhcp. Mis. Jaringan 1: (eth0):

domain company1.corp #
nameserver 192.168.0.253
nameserver 192.168.0.254

Jaringan 2 (tun0):

domain company2.corp #
nameserver 10.102.204.51
nameserver 10.102.208.51

# Nama berubah

Ketika terhubung ke kedua jaringan secara bersamaan:

# resolv.conf from NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

Menyelesaikan service.company2.corp tidak berfungsi karena server nama depan hanya tahu tentang nama company1.corp.

Karena terinspirasi oleh artikel ini , saya telah menyiapkan openresolv (implementasi resolvconf) yang mengonfigurasi layanan dnsmasq lokal di install linux Arch saya.

Jika saya mengkonfigurasi nameserver secara manual menggunakan resolvconf:

# resolvconf -d NetworkManager
# echo "domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
" | resolvconf -a eth0
# echo "domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51
" | resolvconf -a tun0

Kemudian saya dapat menyelesaikan nama dari company1.corp dan company2.corp (server dnsmasq lokal menangani ini.)

Perhatikan bahwa setelah konfigurasi manual, resolveconf -l menunjukkan 2 konfigurasi secara terpisah:

~ # resolvconf -l
# resolv.conf from tun0
domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51

# resolv.conf from eth0
domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254

Namun, ketika membiarkan manajer jaringan melakukan konfigurasi, 2 konfigurasi tidak terpisah, sebagaimana jika manajer jaringan menulis ke /etc/resolve.conf

~ # resolvconf -l
# resolv.conf from NetworkManager
# Generated by NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

Pertanyaan saya adalah bagaimana saya bisa mendapatkan manajer jaringan untuk memanggil resolveconf dengan benar sehingga server nama untuk setiap antarmuka terdaftar secara terpisah. (Sayangnya googling untuk ini tidak berguna karena google berpikir bahwa "resolveconf" == "resol.conf")

Gary van der Merwe
sumber
2
Di Google, cari "resolvconf"dengan kutipan. Selalu beri tanda kutip di sekitar nama yang tepat di Google.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

14

NetworkManager memiliki fungsionalitas untuk mengelola server dnsmasq lokal bawaan. Tidak perlu menggunakan resolvconf / openresolv untuk melakukan ini.

Untuk mengaktifkan ini:

  • Nonaktifkan konfigurasi resolnsconf / openresolv dnsmasq jika sebelumnya diaktifkan, dan pastikan tidak ada instance dnsmasq yang berjalan.
  • Pastikan dnsmasq diinstal
  • Tambahkan dns=dnsmasqke /etc/NetworkManager/NetworkManager.conf.
  • Mulai kembali NetworkManager

Setelah Anda melakukan ini, Anda akan melihat bahwa NetworkManager telah memulai proses dnsmasq:

$ pgrep dnsmasq -fl
1697 /usr/bin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/nm-dns-dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=400 --proxy-dnssec

/etc/resolve.conf harus menunjuk ke instance dnsmasq lokal:

$ cat /etc/resolv.conf
# Generated by NetworkManager
domain company1.corp
search company1.corp
nameserver 127.0.0.1

dan kita dapat melihat server apa yang digunakan dnsmasq:

# cat /var/run/nm-dns-dnsmasq.conf 
server=/company2.corp/10.102.208.51
server=/10.in-addr.arpa/10.102.208.51
server=192.168.1.244
server=192.168.1.239
Gary van der Merwe
sumber
sangat bagus, terima kasih! solusi yang sangat mudah dan mudah tetapi sayangnya tidak dikenal - tidak bisa menahan, maaf
akostadinov
Ini tampaknya berfungsi ketika menggabungkan koneksi lokal dengan satu atau dua VPN. Tampaknya tidak berfungsi dengan dua koneksi lokal. Saat ini saya terhubung ke jaringan kantor melalui Ethernet, di mana sayangnya koneksi internet hulu telah gagal. Saya juga terhubung melalui USB Ethernet (telepon saya) ke Internet yang berfungsi. Saya tidak bisa mendapatkan NetworkManager untuk menerapkan nama domain ke server DNS kantor.
Oskar Berggren
@OskarBerggren: Di ethernet kantor Anda, di bawah tab IPv4, centang "Gunakan koneksi ini hanya untuk sumber daya di jaringan itu."
Gary van der Merwe
@ GaryvanderMerwe Itulah yang saya coba, lupa untuk menulisnya. Tampaknya ada permintaan bug / fitur terkait: bugzilla.gnome.org/show_bug.cgi?id=685962
Oskar Berggren
FYI tidak ada opsi untuk digunakan uboundsehingga DNSSEC juga berfungsi, lihat fedoraproject.org/wiki/Networking/NameResolution/DNSSEC
akostadinov
0

Sepertinya NetworkManager hanya menimpa /etc/resolv.confdan tidak menggunakan openresolv. Menurut FS # 24635 , NetworkManager memang memiliki dukungan untuk openreslov, tetapi awalnya tidak diaktifkan di build. Versi Arch Linux apa yang Anda jalankan dan apa versi paket manajer jaringan?

Mgorven
sumber
networkmanager 0.9.4.0-6 NetworkManager memanggil resolveconf, dan tidak menulis ke /etc/resolev.conf. Masalahnya adalah NetworkManager menggabungkan informasi dns, dan meneruskannya ke resolveconf sebagai satu antarmuka, dan bukan sebagai informasi untuk antarmuka yang terpisah.
Gary van der Merwe
0

Lakukan seperti yang dijawab Gary van der Merwe, tetapi lakukan

/etc/NetworkManager/NetworkManager.conf

Saya harus menambahkan

[main]
dns=dnsmasq

ke file. Tidak hanya

dns=dnsmasq

Ini karena semua pengaturan dalam file itu harus di bawah bagian, dan distro saya, manjaro (archlinux), versi paket NetworkManager tidak mengisi file konfigurasi. (Saya berasumsi bahwa distro Gary melakukannya karena garis yang disarankannya bekerja untuknya yang lain)

Catatan lain, konfigurasi dnsmasq apa pun harus masuk dalam file config dalam hal ini

/etc/NetworkManager/dnsmasq.d/

direktori. Mungkin direktori berbeda di mesin Anda. Saya belajar direktori yang digunakan dengan melihat baris yang digunakan NetworkManager untuk memulai daemon dnsmasq. Anda dapat melihat baris ini dengan menjalankan ps aux|grep dnsmasq. Anda harus menunggu untuk menjalankan ini sampai setelah memodifikasi konfigurasi NetworkManager dan memulai kembali layanannya.

SultanLegend
sumber