我在 CentOS 8 桌面上全新安装了 powerdns。在端口 53 上运行服务时,一切运行正常。更改端口 5300 时出错。我收到此错误消息:
visitel-vpn1.localdomain systemd[1]: Started PowerDNS Authoritative Server.
Loading '/usr/lib64/pdns/libgmysqlbackend.so'
This is a standalone pdns
Listening on controlsocket in '/var/run/pdns/pdns.controlsocket'
Unable to bind UDP socket to '0.0.0.0:5300': Permission denied
Fatal error: Unable to bind to UDP socket
这是我的服务文件。我将服务文件精简到最低限度,并将 --local-port 添加到命令行参数。
[Unit]
Description=PowerDNS Authoritative Server
[Service]
ExecStart=/usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no --local-port=5300
User=root
Group=root
RuntimeDirectory=pdns
[Install]
WantedBy=multi-user.target
我尝试过的事情:
- 使用默认设置默认端口运行 PowerDNS。有效
- 在端口 5300 的控制台中以 root 身份运行。有效
- Ubuntu 20 Server 上的 PowerDNS 在端口 5300 上作为服务运行。有效
- 禁用防火墙。失败
- 使用端口 0.0.0.0:5300 或 127.0.0.0:5300 或 [localip]:5300 运行 powerDNS 服务。失败
- 在 53 以外的任何端口上运行 PowerDNS,例如 25、1000、1024、54。失败
CentOS 8 桌面版中有一些安全设置限制服务绑定到 UDP 端口。我可以运行 Ubuntu,但我想知道为什么它在 CentOS 上失败了。有什么想法吗?谢谢。
答案1
SELinux 仅允许 DNS 服务器绑定到标记为 的端口dns_port_t
,当前这些端口包括:
# semanage port -l | grep -w 53
dns_port_t tcp 53, 853
dns_port_t udp 53, 853
您可以添加自己的自定义端口来允许此访问。
# semanage port -a -t dns_port_t -p udp 5300
# semanage port -l | grep -w 53
dns_port_t tcp 53, 853
dns_port_t udp 5300, 53, 853
(您可能还需要允许 TCP,并在 PowerDNS 中对其进行配置。)