Re: dnsmasq
Artem Chuprina <ran@lasgalen.net> wrote:
> Хочу поделиться.
> Разнося на разные девайсы сервер и роутер, таки сподобился настроить DNS
> и DHCP для локалки через dnsmasq. Получилось проще, чем с ISC (bind и
> isc-dhcpd). Про "легковеснее" молчу.
> Из грабель (они описаны в FAQ). isc-dhcpd, видимо, работает в
> promiscuous mode, и справляется с ситуацией, когда на файрволе по
> данному интерфейсу отдельного разрешения 255.255.255.255 на порт DHCP
> нет (у меня пускали только с адресами из локалки). dnsmasq не справился,
> пришлось донастроить файрвол. Подумав, махнул рукой и разрешил с этого
> интерфейса вообще всё, так что нет уверенности, что достаточно было бы
> разрешить по минимуму.
-p udp --dports 67:69 - это так сложно прописать в фаирвол? ;)
> Судя по документации, dnsmasq теперь можно обучить практически всем
> типам записей, т.е. чуть ли не сделать из него полноценный DNS-сервер,
> торчащий наружу. Хотя он вообще-то придуман не для этого. Единственное ???
> не помню, можно ли ему объяснить, что наружу можно отдавать запросы по
> своей зоне, но нельзя делать рекурсивные. Скорее всего, можно, потому
> что про соответствующую атаку авторы в курсе. Просто не помню (пока было
> не надо).
Ага. Как только научишь его отдавать ОДИН IP адрес на два MAC'a - скажи.
Скажу сразу - для ноутбука. У которого или эзернет или вай-вай.
Я уже не говорю про такое:
-- cut --
# Transform invalid hostnames
log(concat("hn: ", option fqdn.hostname, ":", option host-name));
if (exists fqdn.hostname) {
if (not (option fqdn.hostname ~~ "^[a-z0-9\-]+[a-z0-9]+$")) {
ddns-hostname = concat("host-", binary-to-ascii(16, 8, "", substring(hardware, 1, 6)));
log(concat("Transform client fqdn: ", option fqdn.hostname, " => ", ddns-hostname));
} else {
log(concat("Using client fqdn: ", option fqdn.hostname));
ddns-hostname = lcase(option fqdn.hostname);
}
log(concat("af: ", option fqdn.hostname, ":", option host-name, ":",
ddns-hostname, ":", option fqdn.domainname));
} elsif (not (option host-name ~~ "^[a-z0-9\-]+[a-z0-9]+$")) {
set new_host_name = concat("host-", binary-to-ascii(16, 8, "", substring(hardware, 1, 6)));
log(concat("invalid hostname: ", option host-name, " => ", new_host_name));
ddns-hostname = new_host_name;
} elsif (exists host-name) {
log(concat("Using client hostname: ", option host-name));
ddns-hostname = lcase(option host-name);
}
-- cut --
> Чего он явно не умеет (в документации нет даже упоминания), так это
> трансфера зон.
Это затычка для роутеров, оно без внешнего DNS'a работать не умеет.
> Подумываю, не попробовать ли его как второй авторитетный DNS своей зоны.
Чем тебя bind не устроил? Тем, что в нем на порядок меньше CVE находят, чем
в dnsmasq?
Сравни
https://www.cvedetails.com/product/14557/Thekelleys-Dnsmasq.html?vendor_id=8351
и
https://www.cvedetails.com/product/144/ISC-Bind.html?vendor_id=64
для приличия.
> Чего, опять же, не отследил ??? будет ли он работоспособен без
> вышестоящего _рекурсивного_ DNS-сервера. Однако,
Нет.
> i A dnsmasq-base Recommends dns-root-data
> Может, конечно, он оттуда только ключи для DNSSEC хочет...
Вот именно. Оно еще и ntp сервер захочет. Чтоб ключи валидировать. И будешь
ты с kill -HUP ${pid} играться :)
PS: Лучше уж сборку из unbound/atftpd/udhcpd - оно хоть если развалиться, то
не всё сразу. И дурацких лимитов по умолчанию в 150 паралельных DNS запросов не
имеет. И внешний DNS не требует.
Reply to:
- References:
- dnsmasq
- From: Artem Chuprina <ran@lasgalen.net>