FreeBSD и named на динамическим интерфейсе
Ситуация: нужно запустить DNS-сервер на динамическом интерфейсе (ppp, pppoe etc).
Под FreeBSD и, наверное, не только, named не сможет слушать 53-й порт на динамическом интерфейсе, который появился после запуска Named, поскольку не разрешается чиста-пользователям биндить порты ниже 1024-го. Соответственно, named пропускает этот интерфейс и выдает в лог
... named: network: listening on IPv4 interface tun0, 195.214.198.170#53 ... named: network: could not listen on UDP socket: permission denied ... named: network: creating IPv4 interface tun0 failed; interface ignored
Конечно, можно перезапускать named через start-скрипт от PPP, но предпочел сделать более стандартными средствами, используя Mandatory Access Control (MAC).
Для этого
- Ядро компилируется с option MAC (обязательно!)
- Либокомпилировать ядро с option MAC_PORTACL, либо загрузить модулем (в файл /boon/loader.conf прописать строку
mac_portacl_load="YES"
- В файл /etc/sysctl.conf добавляются строки
security.mac.portacl.enabled=1 security.mac.portacl.suser_exempt=1 security.mac.portacl.port_high=1023 net.inet.ip.portrange.reservedlow=0 net.inet.ip.portrange.reservedhigh=0 security.mac.portacl.rules=uid:53:tcp:53,uid:53:udp:53
- либо перезагрузить комп, либо выполнить следующие команды. Кому как нравится…
# kldload /boot/kernel/mac_portacl.ko # /etc/rc.d/sysctl reload
Ссылки: FreeBSD -> Handbook – The MAC portacl Module и обсуждение на форуме FreeBSD.