Volodymyr Kostyrko wrote:
Yuriy B. Borysov wrote:
Здравствуйте!
Есть машина с подключением к Интернет через pppoe.
pppoe клиент mpd5. ip статический.
С некоторых пор стал замечать ругань в логах такого вида:
Feb 14 22:15:06 pty-gw named[2089]: creating IPv4 interface ng7
failed; interface ignored
Feb 14 22:15:06 pty-gw named[2089]: could not listen on UDP socket:
permission denied
Соответственно резолв не работает, бинд на внешнем интерфейсе не
отвечает. Если бинд рестартануть руками, все нормализуется.
Есть предположение, что подключиться бинд не может после разрыва
соединения и, соответственно, пропадания ng* интерфейса.
Можно это как-то поправить или обойти? Рестартить бинд из start-if
скрипта как-то не очень хочется.
бинд системный, система 8.2-RELEASE-p6
Спасибо!
Прогнал малость, у меня уже повсеместно 9.0 а kld_list максимум до
8-STABLE добралось.
echo kld_list="mac_portacl" >> /etc/rc.conf
echo mac_portacl_load=yes >> /boot/loader.conf
Суть вопроса в том, что первые 1024 порта (всё что меньше
net.inet.ip.portrange.reservedhigh) может брать только root. Все
сервисы, использующие порты из этого диапазона, запускаются из-под рута
и форкаются с понижением привилегий. Ущемлённый процесс слушать порт
право имеет, но переоткрыть его - уже нет.
В момент пропадания интерфейса открытый сокет как и все открытые
соединения тихо и спокойно закрываются. Поскольку сам процесс уже не
принадлежит руту заново открыть порт он не может. Нужно либо
перезапускать сервис либо разрешить непривилегированному процессу
открывать соответствующие порты. Для второго случая нам пригодится
mac_portacl(4).
Загрузка этого модуля требует `options MAC` в ядре, в GENERIC это уже
добавили и в 8.2 оно точно было.
echo net.inet.ip.portrange.reservedhigh=0 >> /etc/sysctl.conf
Здесь мы отключаем прямой контроль за первыми 1024-мя портами. Запрет
тем не менее остаётся в силе, поскольку контроль за этим диапазоном
берёт на себя mac_portacl.
echo security.mac.portacl.rules="uid:53:tcp:53,uid:53:udp:53" >>
/etc/sysctl.conf
Ну и разрешаем пользователю с uid 53 (bind) открывать 53-ый порт.
--
Sphinx of black quartz judge my vow.