[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: