Dahili ağlar için BIND'deki bazı DNS girişlerini geçersiz kılma


39

Tek bir ağ geçidi üzerinden internete bağlı, BIND çalıştıran bir DNS sunucusu olan dahili bir ağım var. Etki alanı "example.com" harici bir DNS sağlayıcı tarafından yönetiliyor. Bu etki alanındaki girdilerin bazıları, "ana bilgisayar1.example.com" ve "ana bilgisayar2.example.com" deyin, ayrıca "üst düzey giriş" ornek.com ", ağ geçidinin genel IP adresini gösterir.

Dahili ağda bulunan ana makinelerin "host1.example.com", "host2.example.com" ve "example.com" u, ağ geçidi yerine iç IP adreslerine çözmesini istiyorum. "Otherhost.example.com" gibi diğer ana bilgisayarlar hala harici DNS sağlayıcısı tarafından çözülmelidir.

Bunu "host1.example.com" ve "host2.example.com" için BIND'de iki tek giriş bölgesi tanımlayarak, host1 ve host2 girişleri için bunu başardım. Ancak, "example.com" için bir bölge eklersem, bu etki alanının tüm sorguları yerel DNS sunucum tarafından çözülür ve örneğin "otherhost.example.com" sorgusu bir hatayla sonuçlanır.

BIND'yi bir etki alanının yalnızca bazı girişlerini geçersiz kılacak ve geri kalanını özyinelemeli olarak çözecek şekilde yapılandırmak mümkün mü ?



1
"BIND'yi bir etki alanının yalnızca bazı girişlerini geçersiz kılacak şekilde yapılandırmak mümkün mü?" Hayır, BIND ile değil. Bir alt etki alanı kullanın.
bortzmeyer

1
Sınırsız tam olarak istediğim şeyi yapıyor gibi görünüyor, bu yüzden Alnitak'ın cevabını kabul edilen cevap olarak belirliyorum. Ama sonunda, ben bortzmeyer tavsiyelerine ve gidiyorum değil alanı girişini geçersiz kılar. Tüm cevaplar için teşekkürler!
Remy Blank,

1
Bind şimdi bunu yanıt politikası bölgesi ile yapabilir. Aşağıdaki cevaba bakınız. Unbound gibi diğer çözümler CNAME'leri geçersiz kılamaz. Bağlama'daki politika bölgeleriyle, alt etki alanları yapmanız gerekmez; İstediğiniz zaman bireysel kayıtları geçersiz kılabilirsiniz.
Florin Andrei

Yanıtlar:


18

En iyi yöntem, Bind 9.8.1 veya daha yenisindeki yanıt politikası bölgesidir. İsteğe bağlı bölgelerdeki tek kayıtları geçersiz kılmanıza izin verir (ve bunun için tam bir alt etki alanı oluşturmanıza gerek yoktur, yalnızca değiştirmek istediğiniz tek bir kayıt vardır), CNAME'leri geçersiz kılmanıza olanak tanır. .

https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html


EDIT: Bunu doğru şekilde yapalım. Yukarıda verilen eğitime dayanarak yaptığım şeyi belgeleyeceğim.

İşletim sistemim Raspberry Pi için Raspbian 4.4, ancak bu teknik Debian ve Ubuntu'da herhangi bir değişiklik yapmadan ya da diğer platformlarda minimum değişiklik yapmadan çalışmalı.

Bind config dosyalarınızın sisteminizde tutulduğu yere gidin - işte burada /etc/bind. Orada db.rpzaşağıdaki içerikleri içeren bir dosya oluşturun :

$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.

Bu ne işe yarıyor?

  • www.some-website.comsahte adresi olan IP adresini geçersiz kılar, 127.0.0.1bu site için tüm trafiği geridöngü adresine etkili bir şekilde gönderir
  • www.other-website.comiçin başka bir siteye trafik gönderirfake-hostname.com

Bir Bind bölge dosyasına girebilecek her şeyi burada kullanabilirsiniz.

Bu değişiklikleri etkinleştirmek için birkaç adım daha var:

named.conf.localBu bölümü düzenleyin ve ekleyin:

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

Yukarıdaki bağlantı size daha fazla şeyler eklemenizi söyler zone "rpz" { }ancak basit kurulumlarda bu gerekli değildir - burada gösterdiğim şey yerel çözümleyicinizde çalışması için minimumdur.

Düzenleyin named.conf.optionsve options { }bölümdeki bir yere response-policyseçenek ekleyin :

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

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

Şimdi Bağlama'yı yeniden başlatın:

service bind9 restart

Bu kadar. Ad sunucusu şimdi bu kayıtları geçersiz kılmaya başlamalıdır.

Değişiklik yapmanız gerekiyorsa, yalnızca düzenleyin db.rpzve ardından Bağlama'yı yeniden başlatın.

Bonus: Eğer DNS sorgularını syslog'a kaydetmek istiyorsanız, ilerlemelere göz atabilir , bu ifadeleri içeren named.conf.localbir loggingbölüm bulunduğunu düzenleyebilir ve emin olabilirsiniz :

logging {
    // stuff
    // already
    // there

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

Yeniden Bağla'yı yeniden başlatın ve hepsi bu

Bind çalıştıran makinede test edin:

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

Farklı bir makinede kazı yaparsanız, sadece @ 127.0.0.1 yerine Bind sunucusunun @-ip-adresini-kullanın.

Bu tekniği, üzerinde çalıştığım bir web sitesinin CNAME'sini geçersiz kılmak için kullandım ve test ettiğim yeni bir AWS yük dengeleyicisine gönderiyorum. Bind'i çalıştırmak için bir Ahududu Pi kullanıldı ve RPI aynı zamanda bir WiFi yönlendirici olarak da çalışacak şekilde yapılandırıldı.


1
Lütfen BIND RPZ'nin aslında (henüz) QTYPE esasına göre tekli kayıtları geçersiz kılamayacağını - belirli bir sahip adı için tüm kayıtları geçersiz kılacağını unutmayın . Bu, bir etki alanı için A kaydını geçersiz kılmak istiyorsanız, ancak örneğin MX kaydını geçersiz kılmak istiyorsanız, yapamazsınız demektir. MX kaydını da RPZ bölgesine koymanız ve gerçek bölge ile senkronize tutmanız gerekir.
Alnitak

2
Bunu yaptığın gibi ayırdığın için teşekkürler. Çok yararlı.
sruffell

Herhangi bir uyarı var mı? Bunu bir pfsense üzerinde yapmaya çalışıyorum, ancak herhangi bir sonucu "sahte" edemiyorum, yine de gerçek adresi bildiriyor. Mektuba verilen talimatları takip ettiğime inanıyorum.
Lenne

@Lenne Sadece çalışması gerekir. Gönderiyi düzenledim ve değişiklikleri test etmek için bir öneri ekledim.
Florin Andrei

@Lenne pfSense BIND paketi, yaklaşık bir yıl boyunca GUI'ye yerleşik bir yapıya sahiptir, bu nedenle konfigürasyonlarla uğraşmak gerekmemelidir. OP: NXDOMAIN ile yanıtlama ya da yanıtı bırakma gibi bir RPZ ile yapabileceğiniz diğer bazı şeylerden bahsetmeye değer olabilir .
miken32

21

Unbound özyinelemeli DNS sunucusu bireysel kaynak kayıtlarını geçersiz kılmak için yeteneği vardır.

Bak local-zoneve local-datayapılandırma ayarlarından manuel , örneğin:

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

transparentÜzerinde ayar local-zoneonunla sağlanmayan herhangi adları için normal bir özyinelemeli aramalarını yapmak söyler local-data.


1
Tam olarak yapmak istediğim gibi görünüyor, teşekkürler. Bu gece Unbound'u okuyacağım.
Remy Boş

Öte yandan, bilgeliği oldukça sorgulanabilir. Bir internal.example.com alan adına sahip olmak daha net olacaktır.
bortzmeyer

@Bortzmeyer - haklı olabilirsin, ama Wouter'ın sadece eğlence için koyduğunu sanmıyorum ;-)
Alnitak

3
@bortzmeyer, bazen başka seçenek yoktur. Örnek: SBS 2008'in tek bir LAN IP'sine sahip olması gerekir, ancak yönlendiricinin yönlendirdiği harici bir IP kullanarak dışarıdan erişilmesi gerekir. Microsoft, SBS'de iki ağ kartına veya aynı kartta yapılandırılmış iki IP'ye izin vermez. Yerel sunucular DNS adını harici IP'ye çözerse, yönlendiricinin LAN ipleri için hem DNAT hem de SNAT yapması gerekir ve ardından SBS'deki günlükler yönlendiricinin IP'sinden tüm erişimi gösterecektir ve bu sadece yanlış. unboundKendi yönlendiricime yükleyeceğim , çözümün çok daha iyi olduğunu düşünüyorum.
Cosmin Prund

Bu, BIND'ye özgü olduğu için soruyu yanıtlamaz.
bzeaman

4

Tweaking çözünürlüğü ile oldukça zeki şeyler yapmanıza izin veren "dnsmasq" içine bakmak isteyebilirsiniz.


Teşekkürler, iyi bahşiş. Çok kötü dnsmasq özyinelemeli bir çözümlemiyor, bu yüzden yine de BIND'i başka bir bağlantı noktasında çalıştırmak zorunda kalacağım (ISS'imin DNS sunucuları flakey).
Remy Boş

4

Ne aradığınız tarafından tanımlanır bölünmüş DNS olan Webopedia olarak:

Bölünmüş bir DNS altyapısında, aynı etki alanı için biri iç ağ tarafından, diğeri dış ağ tarafından kullanılan iki bölge oluşturursunuz. DNS'yi bölme, dahili ana bilgisayarları ad çözümlemesi için bir iç etki alanı adı sunucusuna yönlendirir ve dış ana bilgisayarlar ad çözümlemesi için bir dış etki alanı adı sunucusuna yönlendirilir.

Temel olarak, harici bölge dosyanızın bir kopyasını almanız ve dahili DNS sunucunuza aktarmanız, ardından özellikle dahili ağınız için gereken kayıtları değiştirmeniz veya eklemeniz gerekir. Bu, oldukça yaygın bir kurulum olsa da, "harici" kayıtları iki DNS sunucusu arasında senkronize tutmak bir sorun olabilir. Genel sunucuda bir kayıt oluşturursanız veya değiştirirseniz, özel sunucuda da oluşturulması veya değiştirilmesi gerekir.

Bu, kullandığınız DNS sunucusu uygulamasından bağımsız olarak uygulanabilir. Çoğu kurulumda, harici ağa hizmet veren bir DNS sunucusuna ve dahili ağa hizmet eden farklı bir ağa sahip olacaksınız. BIND ile, diğer uygulamalarda olduğu gibi, named.conf dosyasının bölge bölümündeki "allow-query" deyimini kullanarak bölgenin her iki sürümünü de aynı sunucuda kullanabilirsiniz.

BIND'deki bir başka olasılık da (ve bunu hiç denemedim) example.com alan adınızı dahili DNS sunucusunda yalnızca dahili olarak kullandığınız kayıtlarla ayarlamak olabilir. Ardından, "first" argümanına sahip bir "forward" ifadesi ayarlayın ("forwarders" ile birlikte). Teorik olarak, bu, dış DNS sunucusuna (“ileticilerin” içinde belirtildiği gibi, bir cevap için, dahili kayıtlarınıza sahip olmayacak ve bir hata yanıtı döndürmeyecek) gider. Bunun işe yarayacağından eminim, ama bu bir düşünce.


İki bölge dosyasını senkronize etmek, harici dosya dinamik bir DNS istemcisi aracılığıyla güncellendiğinden karmaşık olacaktır. Yine de ileriye yönelik ifadeleri okurum. Bahşiş için teşekkürler.
Remy Boş

Hayır, BIND yönlendirmesi işe yaramayacak, yalnızca bilinmeyen alanlar için olacak ancak dahili ad sunucusu example.com hakkında bilgi sahibi olacak, bunun için yetkili olacak.
bortzmeyer

1
Dokümanları doğru okuyorsam, bir bölge bölümündeki "önce ilet" ifadesi BIND'in dışarı çıkmasını ve yetkili bir yerel etki alanı için bile ileticinin yanıtını aramasını sağlamalıdır, sonra yerel bilgileri yalnızca ileticiden bir cevap alamadım.
Justin Scott,

Genel bir "önce ilet" "koyarsanız, sorguları ileticiye gönderir ve yanıtlanmadığında sorguyu yanıtlamaya çalışır '(doc'dan) ancak bir yanıt alırsa, kendi kendine çözümlemeye çalışmaz. Yanıtın yetkili olmadığı veya NXDOMAIN olsa bile çözülmeye zorlanacak olsaydı çok iyi olurdu, ancak ileticiden yanıt alırsa bağlama denemez.
Pablo Martinez,

3

BIND'de, istenen ana bilgisayar adını kullanarak bir bölge tanımlayarak bu sonucu alıyorum. Yalnızca birkaç ana bilgisayarı geçersiz kılmak istiyorsanız, yaklaşım iyidir.

Bölge bildirim şöyle görünüyor:

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

Zon tanımım şöyle gözüküyor:

$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

Bu nedenle, eğer intranet DNS ve ISS DNS'de example.com'u sorgularsam aynı IP alırım, ancak override.example.com'u sorgularsam intranet DNS (birincil) erişilebilirse farklı sonuçlar alırım.


2

Sen zaten doğru yoldasın.

Dahili DNS sunucularınızda, "example.com" un hemen altındaki her istisna ana bilgisayarı için bir bölge tanımlamanız gerekir. Bu istisnaları en aza indirmek için, tüm iç makineleri "hosta.internal.example.com" olarak adlandırmak, DNS sunucusunun en çok sorguyu dış DNS sunucularına göndermesi ancak "internal.example.com" bölgesi için yetkili kılmasıyla bilinen bir uygulamadır. (Küçük bir işlemi geçtikten sonra, genellikle istemcilerin yönlendirildiği bir çift DNS sunucusu ve bu sunucuların "internal.example.com" için yönlendirildiği ayrı bir yetkili DNS bulunur.)

Genellikle, yalnızca bir ana makinenin hem dış hem de dahili olarak erişilebilir olması gerektiğinden, tanımladığınız istisnaların ortaya çıkması gerekir. O zaman bile, dışarıdan "host1.example.com" ve içeriden "host1.internal.example.com" kullanmak isteyebilirsiniz. Dahili bilgisayarlar "internal.example.com" içindeki adları arayacak şekilde yapılandırılır. Bir sunucunun sertifikası sunucuyu "host1.example.com" olarak tanımladıysa, bu durumda istemcilerin bağlanacağı ad olmasını istediğiniz durumlar gibi uygun olan durumlar olabilir.


Evet, "host1.example.com" ana bilgisayarları için zaten iyi çalışıyor. İşin zor yanı, "example.com" üst düzeyini de aynı şekilde ele alıyor ...
Remy Blank

2

Kullanımı dnsmasq gerçekten kolaylaştırır. http://www.thekelleys.org.uk/dnsmasq/doc.html dns sunucusu olarak davranır, ancak yerel dns sunucusundan cevap alır. Güzel bir şey, bölge dosyaları ile uğraşmadan tek etki alanı kayıtlarını geçersiz kılabilirsiniz.


2

Nitekim, belki biraz farklı olsa bile, bunu yapmanın bir yolu var. Aynı durum var, harici ve dahili olarak kullanılan bir alanım var ve harici statik ve dinamik konaklarım var. Gerçekten acı verici olan sadece dış dinamik olanlar. Çözüm muhtemelen en zarif değil, fakat küçük bir senaryo ile uygulanabilir. Çoğunlukla dinamik DNS sağlayıcımın API'si ile kendi dinamik DNS komut dosyamı yapıyorum, bu komut dosyasını her 5 dakikada bir cron ile çalıştırıyorum:

1) harici IP adresimi al. değişti mi Çıkış yok.

2) IP adresini değiştirdi, yeni IP adresiyle birlikte dyndns-sağlayıcısının API'sini çağırın,

3) db.mydomain.com adresini harici IP ile ayarlayınız.

4) bağlamayı yeniden başlatın.

Ev ağım için çok güvenilir çalışıyor


Benim tarafımdan yapılan aynı işlem. lütfen detayları wiki Stealth İsim Sunucumuzda bulabilirsiniz . Ama dyn.dev.shahed.bizDünya Çapında çözülemiyor ! Lütfen bu sorunu çözmek için bize yardım eder misiniz?
Md Shahed Hossain,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.