pengembangan-web-mp-pd.com

Mengganti beberapa entri DNS di BIND untuk jaringan internal

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 itu untuk entri Host1 dan Host2, dengan menetapkan 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 itu diselesaikan oleh server DNS lokal saya, dan mis. meminta "otherhost.example.com" menghasilkan kesalahan.

Apakah mungkin untuk mengkonfigurasi BIND untuk menimpa hanya beberapa entri domain, dan untuk menyelesaikan sisanya secara rekursif?

41
Remy Blank

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/08/dns-rpz.html


EDIT: Mari kita lakukan 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 di /etc/bind. Buat di sana file bernama db.rpz dengan konten berikut:

$TTL 60
@            IN    SOA  localhost. root.localhost.  (
                          2015112501   ; serial
                          1h           ; refresh
                          30m          ; retry
                          1w           ; expiry
                          30m)         ; minimum
                   IN     NS    localhost.

localhost       A   127.0.0.1

www.some-website.com    A        127.0.0.1

www.other-website.com   CNAME    fake-hostname.com.

Apa fungsinya?

  • itu menimpa alamat IP untuk www.some-website.com dengan alamat palsu 127.0.0.1, secara efektif mengirimkan semua lalu lintas untuk situs itu ke alamat loopback
  • mengirimkan lalu lintas untuk www.other-website.com ke situs lain bernama fake-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:

zone "rpz" {
  type master;
  file "/etc/bind/db.rpz";
};

Tutorial yang ditautkan di atas memberitahu Anda untuk menambahkan lebih banyak barang ke zone "rpz" { } tapi itu tidak perlu dalam pengaturan sederhana - yang saya tunjukkan di sini adalah minimum untuk membuatnya bekerja pada resolver lokal Anda.

Edit named.conf.options dan di suatu tempat di options { } bagian tambahkan response-policy pilihan:

options {
  // bunch
  // of
  // stuff
  // please
  // ignore

  response-policy { zone "rpz"; };
}

Sekarang restart Bind:

service bind9 restart

Itu dia. Server nama harus mulai mengganti catatan itu sekarang.

Jika Anda perlu melakukan perubahan, cukup sunting db.rpz, lalu mulai kembali Bind.

Bonus: jika Anda ingin mencatat permintaan DNS ke syslog, sehingga Anda dapat mengawasi prosesnya, edit named.conf.local dan pastikan ada bagian logging yang mencakup pernyataan ini:

logging {
    // stuff
    // already
    // there

    channel my_syslog {
        syslog daemon;
        severity info;
    };
    category queries { my_syslog; };
};

Mulai kembali Bind lagi dan hanya itu.

Uji pada mesin yang menjalankan Bind:

Dig @127.0.0.1 www.other-website.com. any

Jika Anda menjalankan Dig pada mesin yang berbeda cukup gunakan @ the-ip-address-of-Bind-server daripada @ 127.0.0.1

Saya telah menggunakan teknik ini dengan sangat sukses untuk menimpa 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.

19
Florin Andrei

The Tidak terikat server DNS rekursif memiliki kemampuan untuk menimpa catatan sumber daya individu.

Lihatlah local-zone dan local-data pengaturan konfigurasi di manual , mis .: .:

local-zone: "example.com." transparent
local-data: "foo.example.com. IN A 192.168.1.1"

Pengaturan transparent pada local-zone menyuruhnya melakukan pencarian rekursif normal untuk nama apa pun yang tidak disertakan dengan local-data.

21
Alnitak

Anda mungkin ingin melihat ke "dnsmasq", yang memungkinkan Anda melakukan beberapa hal yang cukup pintar dengan resolusi tweaker.

4
Luke

Apa yang Anda cari adalah DNS split, yang didefinisikan oleh Webopedia sebagai:

Dalam infrastruktur DNS terpisah, Anda membuat dua zona untuk domain yang sama, satu untuk digunakan oleh jaringan internal, yang lain digunakan oleh jaringan eksternal. Split DNS mengarahkan host internal ke server nama domain internal untuk resolusi nama dan host eksternal diarahkan ke server nama domain eksternal untuk resolusi nama.

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 pada server yang sama melalui penggunaan pernyataan "izinkan-kueri" dalam bagian zona dari file named.conf.

Kemungkinan lain pada 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.

4
Justin Scott

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:

zone "override.example.com" {
        type master;
        notify no;
        file "zone-config/override.example.com";
};

Definisi zona saya terlihat seperti ini:

$TTL 4H
@       IN      SOA     ns.override.example.com.    root.override.example.com. (
                        2009072215      ; Serial
                        3600            ; Refresh
                        600             ; Retry
                        604800          ; Expire
                        3600    )       ; Minimum
;
                NS      ns
        IN      NS      ns.override.example.com.
        IN      A       192.168.1.100
ns      IN      A       192.168.1.100

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.

3
srdjan

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

2
Dustin

Sebenarnya ada cara lain, walaupun 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) perubahan IP, panggil 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

2
nico

Anda sudah berada di jalur yang benar.

Di server DNS internal Anda, Anda harus menentukan zona untuk setiap pengecualian Host 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.

2