Я (пытался) настроить 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
.
Теперь я могу загрузить aaaa и записи, используя 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.
У меня была такая же проблема, и я обнаружил, что она исправлена обновлением с Fefe’s 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 отсутствуют фигурные скобки (о которых я сейчас сообщу Фефе), и вам также необходимо изменить 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