djbdns/dbndns dnscache запрос ipv6-only серверов имен?
Я (попытался) настроить dnscache на Ubuntu 14.04 (Trusty) для создания двойного стека для обслуживания запросов и запросов к авторитетным серверам имен.
Чтобы было ясно, я использую пакет dbndns, который имеет исправление IPv6 от fefe.
Я установил пакеты dbndns & dnscache-run. Я убедился, что /etc/service/dnscache/env/IP
было 0.0.0.0
а также /etc/service/dnscache/env/IPSEND
было 0.0.0.0
,
Я также добавил наши диапазоны IP в /etc/service/dnscache/root/ip
,
Теперь я могу загрузить AAA и записи, используя dig
на другой машине через IPv4 и IPv6. Но у testipv6.com есть тест для загрузки записей только с авторитетного сервера имен IPv6. Чтобы проверить это, он загружает URL-адрес http://ds.v6ns.test-ipv6.com/ip/?callback=?. Если я копаю имя хоста для этого, ds.v6ns.test-ipv6.com
с помощью 8.8.8.8
(DNS-сервер Google с поддержкой IPv6) я получаю запись AAAA. Но то же самое с моим кешем dbndns (через IPv4 и IPv6) не дает результата.
Нужно ли менять IPSEND? Если так, то что? Я не хочу ломать решающие проблемы только для IPv4-серверов с авторитетными именами.
2 ответа
У меня была такая же проблема, и я нашел, что она исправлена путем обновления с Fefe test23
к его test27
патч; в частности, различия в query.c
исправил эту проблему.
Это в основном такие изменения:
-dtype = z->level ? DNS_T_A : z->type;
+dtype = z->level ? (z->ipv6[z->level] ? DNS_T_AAAA : DNS_T_A) : z->type;
В операторе if в строке 950 отсутствуют скобки (о которых я сейчас сообщу Fefe), и вам также нужно изменить dtype
иначе, если у вас есть патчи безопасности из http://www.your.org/dnscache/ (что вам, вероятно, следует).
Я поддерживаю его слияние и индивидуальный подход (для поддержки IPv6 в стиле OpenBSD), но вот мой патч для query.c, который должен помочь вам объединить их.
IPSEND
должно быть ::
чтобы это работало, конечно. Ваш упомянутый тестовый хост ds.v6ns.test-ipv6.com
работает для меня после изменения, и терпит неудачу раньше, так что я почти уверен, что это было так.
К сожалению, это не сработает, даже с исправленными dbndns.
Вам понадобятся два экземпляра dnscache, чтобы он работал, один с определенным IPv4-адресом (используя его, как вы делали раньше), а другой с конкретным IPv6-адресом:
root@fw0:/service# grep '' dnscache*/env/IP*
dnscache/env/IP:10.66.1.1
dnscache/env/IPSEND:198.51.100.1
dnscache6/env/IP:2001:db8:10:30::1
dnscache6/env/IPSEND:0.0.0.0
замещать 10.66.1.1
с вашим частным IPv4, и 198.51.100.1
с вашим публичным IPv4 и 2001:db8:10:30::1
с вашими (общедоступными) IPv6-адресами. Это тогда работает для меня:
# dig aaaa ds.v6ns.test-ipv6.com @2001:db8:10:30::1
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> aaaa ds.v6ns.test-ipv6.com @2001:db8:10:30::1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32403
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;ds.v6ns.test-ipv6.com. IN AAAA
;; ANSWER SECTION:
ds.v6ns.test-ipv6.com. 360 IN AAAA 2001:470:1:18::119