Saya memiliki jaringan internal dengan server DNS yang menjalankan BIND, terhubung ke internet melalui gateway tunggal. Domain saya "example.com" dikelola oleh penyedia DNS eksternal. Beberapa entri dalam domain itu, katakan "host1.example.com" dan "host2.example.com", serta entri tingkat atas "example.com", arahkan ke alamat IP publik gateway.
Saya ingin host yang berada di jaringan internal untuk menyelesaikan "host1.example.com", "host2.example.com" dan "example.com" ke alamat IP internal alih-alih dari gateway. Host lain seperti "otherhost.example.com" masih harus diselesaikan oleh penyedia DNS eksternal.
Saya telah berhasil melakukan hal itu untuk entri host1 dan host2, dengan mendefinisikan dua zona entri tunggal di BIND untuk "host1.example.com" dan "host2.example.com". Namun, jika saya menambahkan zona untuk "example.com", semua kueri untuk domain tersebut diselesaikan oleh server DNS lokal saya, dan mis. Kueri "otherhost.example.com" menghasilkan kesalahan.
Apakah mungkin untuk mengkonfigurasi BIND untuk menimpa hanya beberapa entri domain, dan untuk menyelesaikan sisanya secara rekursif?
sumber
Jawaban:
Metode terbaik adalah melalui zona kebijakan respons di Bind 9.8.1 atau lebih baru. Ini memungkinkan Anda untuk menimpa catatan tunggal di zona arbitrer (dan tidak perlu membuat subdomain keseluruhan untuk itu, hanya catatan tunggal yang ingin Anda ubah), memungkinkan Anda untuk menimpa CNAME, dll. Solusi lain seperti Tidak terikat tidak dapat menimpa CNAMEs .
https://www.redpill-linpro.com/sysadvent/2015/12/12/dns-rpz.html
EDIT: Mari kita lakukan ini dengan benar. Saya akan mendokumentasikan apa yang telah saya lakukan berdasarkan tutorial yang ditautkan di atas.
OS saya adalah Raspbian 4.4 untuk Raspberry Pi, tetapi teknik ini harus bekerja tanpa perubahan pada Debian dan Ubuntu, atau dengan perubahan minimal pada platform lain.
Pergi ke tempat file konfigurasi Bind Anda disimpan di sistem Anda - ini dia
/etc/bind
. Buat di sana file yang disebutdb.rpz
dengan konten berikut:Apa fungsinya?
www.some-website.com
dengan alamat palsu127.0.0.1
, secara efektif mengirim semua lalu lintas untuk situs itu ke alamat loopbackwww.other-website.com
ke situs lain yang disebutfake-hostname.com
Apa pun yang bisa masuk dalam file Bind zone dapat Anda gunakan di sini.
Untuk mengaktifkan perubahan ini ada beberapa langkah lagi:
Edit
named.conf.local
dan tambahkan bagian ini:Tutorial yang ditautkan di atas memberitahu Anda untuk menambahkan lebih banyak hal
zone "rpz" { }
tetapi itu tidak perlu dalam pengaturan sederhana - apa yang saya tunjukkan di sini adalah minimum untuk membuatnya bekerja pada resolver lokal Anda.Edit
named.conf.options
dan di suatu tempat dioptions { }
bagian tambahkanresponse-policy
opsi:Sekarang restart Bind:
Itu dia. Server nama harus mulai mengganti catatan itu sekarang.
Jika Anda perlu melakukan perubahan, cukup edit
db.rpz
, lalu mulai ulang Bind lagi.Bonus: jika Anda ingin mencatat permintaan DNS ke syslog, sehingga Anda dapat mengawasi prosesnya, edit
named.conf.local
dan pastikan adalogging
bagian yang menyertakan pernyataan ini:Mulai kembali Bind lagi dan hanya itu.
Uji pada mesin yang menjalankan Bind:
Jika Anda menjalankan penggalian pada mesin yang berbeda, cukup gunakan @ the-ip-address-of-Bind-server alih-alih @ 127.0.0.1
Saya telah menggunakan teknik ini dengan sangat sukses untuk mengganti CNAME untuk situs web yang sedang saya kerjakan, mengirimkannya ke penyeimbang beban AWS baru yang baru saja saya uji. Raspberry Pi digunakan untuk menjalankan Bind, dan RPi juga dikonfigurasi untuk berfungsi sebagai router WiFi - jadi dengan menghubungkan perangkat ke SSID yang berjalan pada RPi saya akan mendapatkan penggantian DNS yang saya butuhkan untuk pengujian.
sumber
The Unbound DNS Server rekursif memiliki kemampuan untuk mengesampingkan catatan sumber daya individu.
Lihatlah pengaturan
local-zone
danlocal-data
konfigurasi dalam manual , misalnya:The
transparent
pengaturan padalocal-zone
mengatakan itu untuk melakukan pencarian rekursif normal untuk setiap nama tidak disertakan denganlocal-data
.sumber
unbound
di router saya sendiri, saya pikir solusinya jauh lebih baik.Anda mungkin ingin melihat ke "dnsmasq", yang memungkinkan Anda melakukan beberapa hal yang cukup pintar dengan resolusi tweaker.
sumber
Apa yang Anda cari adalah DNS split, yang didefinisikan oleh Webopedia sebagai:
Pada dasarnya, Anda perlu membuat salinan file zona eksternal Anda dan menopangnya di server DNS internal Anda, kemudian mengubah atau menambahkan catatan yang diperlukan khusus untuk jaringan internal Anda. Ini adalah pengaturan yang cukup umum, meskipun mungkin menyusahkan untuk menjaga catatan "eksternal" disinkronkan antara dua server DNS. Jika Anda membuat atau mengubah catatan di server publik, itu juga perlu dibuat atau diubah di server pribadi juga.
Ini dapat diterapkan terlepas dari implementasi server DNS apa yang Anda gunakan. Di sebagian besar penyiapan, Anda akan memiliki satu server DNS yang melayani jaringan eksternal, dan yang berbeda yang melayani jaringan internal. Dengan BIND, sebagai kemungkinan implementasi lainnya, Anda dapat memiliki kedua versi zona di server yang sama melalui penggunaan pernyataan "izinkan-kueri" dalam bagian zona dari file named.conf.
Kemungkinan lain di BIND (dan saya belum pernah mencoba ini) adalah untuk mengatur domain example.com Anda pada server DNS internal dengan hanya catatan yang Anda gunakan secara internal. Kemudian, tetapkan pernyataan "maju" dengan argumen "pertama" (bersama dengan "penerus"). Secara teori, ini akan menanyakan server DNS eksternal (sebagaimana diatur dalam "forwarder" untuk jawaban, yang tidak akan memiliki catatan internal Anda dan mengembalikan respons kegagalan. Kemudian, server internal akan melihat sendiri untuk jawaban. Tidak yakin apakah itu akan berhasil, tapi itu sebuah pemikiran.
sumber
Di BIND saya mendapatkan hasil ini dengan mendefinisikan zona menggunakan nama host yang diinginkan. Pendekatan ini baik-baik saja jika Anda hanya ingin menimpa beberapa host.
Deklarasi zona saya terlihat seperti ini:
Definisi zona saya terlihat seperti ini:
Jadi jika saya query example.com pada intranet DNS dan ISP DNS saya mendapatkan IP yang sama tetapi jika saya query override.example.com saya mendapatkan hasil yang berbeda jika intranet DNS (primer) dapat diakses.
sumber
Anda sudah berada di jalur yang benar.
Pada server DNS internal Anda, Anda harus menentukan zona untuk setiap host pengecualian tepat di bawah "example.com". Untuk meminimalkan pengecualian ini, merupakan praktik umum untuk memberi nama semua mesin internal "hosta.internal.example.com", dengan server DNS mengirim sebagian besar kueri ke server DNS eksternal, tetapi otoritatif untuk zona "internal.example.com". (Setelah Anda melewati operasi kecil, biasanya ada beberapa server DNS yang mengarahkan klien dan DNS otoritatif terpisah yang ditujukan untuk "internal.example.com" server.)
Biasanya, hanya ketika host harus dapat dijangkau baik secara eksternal maupun internal bahwa pengecualian yang Anda uraikan dapat dibuat. Meskipun begitu, Anda mungkin ingin menggunakan "host1.example.com" dari luar dan "host1.internal.example.com" dari dalam. Host internal dikonfigurasikan untuk mencari nama dalam "internal.example.com". Ada situasi di mana apa yang sudah Anda lakukan sesuai, seperti jika sertifikat untuk server mengidentifikasi server sebagai "host1.example.com", dalam hal ini Anda ingin itu menjadi nama yang terhubung dengan klien.
sumber
Gunakan dnsmasq membuatnya sangat mudah. http://www.thekelleys.org.uk/dnsmasq/doc.html Bertindak sebagai server dns tetapi mendapat jawaban dari server dns lokal. Yang menyenangkan adalah Anda dapat mengganti catatan domain tunggal tanpa mengacaukan file zona
sumber
Sebenarnya ada cara lain, meskipun mungkin sedikit berbeda, untuk melakukan ini. Saya memiliki situasi yang sama, saya memiliki domain yang digunakan secara eksternal dan internal, dan saya memiliki host statis dan dinamis eksternal. Satu-satunya yang benar-benar menyakitkan adalah yang dinamis eksternal. Solusinya mungkin bukan yang paling elegan, tetapi dapat diterapkan dengan skrip kecil. Sebagian besar saya melakukan skrip DNS dinamis saya sendiri dengan API penyedia DNS dinamis saya, saya menjalankan skrip ini dengan cron, setiap 5 menit:
1) dapatkan IP eksternal saya. apakah sudah berubah? tidak ada jalan keluar.
2) mengubah IP, memanggil API penyedia dyndns, dengan alamat IP baru,
3) sed the db.mydomain.com dengan IP eksternal
4) restart bind.
Bekerja sangat andal untuk jaringan rumah saya
sumber
dyn.dev.shahed.biz
dari World Wide! Maukah Anda membantu kami menyelesaikan masalah ini?