... kontrolümüz dışındaki kırık DNS sunucularını telafi etmek için.
Sorunumuz: Sensör verilerini toplayan yerleşik cihazları, çoğunlukla IPv4'e özgü çeşitli sitelerde kullanıyoruz. Bazı siteler, hatalı yapılandırılmış veya başka türlü AAAA sorgularını tamamen görmezden gelen veya bunlara bozuk yanıtlarla cevap veren DNS önbellekleri ve / veya güvenlik duvarları gibi zayıf bakım ağlarına sahiptir (örneğin hatalı kaynak IP!). Tesisler departmanına harici bir tedarikçi olarak, (bazen isteksiz) BT departmanları üzerinde hiçbir etkimiz yoktur. DNS sunucularını / güvenlik duvarlarını yakın zamanda tamir etme şansları çok azdır.
Cihazımızdaki etki, her gethostbyname () işlevinde, AAAA'nın zaman aşımına uğraması için bazı süreçlerin tamamen bağlantı kurma girişimlerini zaman aşımına uğratması için süreçlerin beklemesi gerektiğidir.
Çözümler arıyorum ...
- geniş sistem. Düzinelerce uygulamayı tek tek yeniden yapılandıramıyorum
- kalıcı değildir ve yapılandırılabilir. IPv6'yı nerede / ne zaman sabitlenir / çıkarılırsa (yeniden) etkinleştirmemiz gerekir. Yeniden başlatma tamam.
- Bir çözümün değiştirilmesi için glibc gibi bir çekirdek kitaplık gerekiyorsa, yeni kitaplık paketi iyi bilinen bir depodan (örneğin Debian Testing, Ubuntu universe, EPEL) temin edilebilir olmalıdır. Kendi kendini inşa etmek, nereden başlayacağımı bile bilmediğim birçok nedenden ötürü bir seçenek değildir, bu yüzden onları hiç listelemiyorum ...
En belirgin çözüm, çözücü kütüphanesini örneğin / etc / { resolv , nsswitch , gai } .conf aracılığıyla AAAA kayıtlarını sorgulamayacak şekilde yapılandırmak olacaktır . Bir resolv.conf seçeneği no-inet6
önerildiği gibi burada olacağını tam olarak ben ne arıyorum. Ne yazık ki uygulanmadı, en azından bizim sistemimizde değil (libian-6-2.13-38 + Debian 7'deki deb7u4; libc6-2.19-0ubuntu6.3 - Ubuntu 14.04)
Nasıl o zaman? Biri SF ve başka yerlerde önerilen aşağıdaki yöntemleri bulur, ancak bunların hiçbiri işe yaramaz:
- /Etc/modprobe.d/ içinde IPv6 LKM kara listeye alarak, tamamen örneğin IPv6 devre dışı bırakılması veya
sysctl -w net.ipv6.conf.all.disable_ipv6=1
. ( Merak etme: Çözücü neden IPv6'nın devre dışı bırakıldığı AAAA'yı istiyor? ) - /Etc/resolv.conf
options inet6
dosyasından kaldırılıyor . İlk etapta yoktu,inet6
bugünlerde varsayılan olarak etkindir. options single-request
/Etc/resolv.conf dosyasında ayarlama . Bu, yalnızca A ve AAAA sorgularının paralel değil sırayla yapılmasını sağlar- Değişen
precedence
/etc/gai.conf hedefine içinde. Bu, DNS sorgularını etkilemez, yalnızca birden fazla yanıtın nasıl işlendiğini gösterir. - Dış çözümleyicileri kullanmak (veya bozuk DNS sunucularını çevreleyen yerel bir çözümleyici arka plan programı çalıştırmak) yardımcı olacaktır, ancak genellikle şirketin güvenlik duvarı ilkeleri tarafından engellenir. Ve iç kaynaklara erişilemez hale getirebilir.
Alternatif çirkin fikirler:
- Localhost'ta bir DNS önbelleği çalıştırın. AAAA olmayan tüm sorguları iletmek için yapılandırın, ancak NOERROR veya NXDOMAIN ile AAAA sorgularına yanıt verecek şekilde (ilgili A-sorgusunun sonucuna bağlı olarak) yapılandırın. Ancak bunu yapabilen bir DNS önbelleğinin farkında değilim.
- İc32 ile reddetmek (ya da çözümleyici libu buna nasıl tepki verir?) Ya da bunları yanıtlayan yerel bir DNS sunucusuna yönlendirmek için AAAA sorgularıyla eşleştirmek için bazı akıllı iptables u32 eşleşmesini ya da Ondrej Caletka'nın iptables DNS modülünü kullanın. boş bir NOERROR olan her şey.
SE ile ilgili benzer soruların olduğunu unutmayın. Benim sorunum, çözülmesi gereken asıl problemi ayrıntılandırdığı sürece, açıkça öne sürülen gereklilikleri listelediğinden, sıklıkla önerilmeyen çalışma dışı çözümleri kara listeye aldığından ve tek bir uygulamaya özgü olmadığı için farklıdır. Bu tartışmanın ardından sorumu yayınladım.