CentOS中配置带自定义端口的DNS服务器(修改/etc/resolv.conf)方法咨询
CentOS中配置带自定义端口的DNS服务器(修改/etc/resolv.conf)方法咨询
嗨,先给你划个重点:默认的/etc/resolv.conf里的nameserver字段不支持直接指定端口号——这是glibc自带的DNS解析库的限制,它只会默认用53端口去连接DNS服务器,你要是直接写nameserver 127.0.0.1:5353这种格式,系统根本识别不了,白忙活。
那该怎么解决呢?给你两个在CentOS里实用的方案:
方案一:用dnsmasq做DNS转发(最常用)
dnsmasq是轻量的DNS缓存+转发工具,刚好能帮我们把默认53端口的请求转发到你自定义的5353端口DNS上。
- 先安装dnsmasq:
sudo yum install dnsmasq -y
- 编辑dnsmasq的配置文件
/etc/dnsmasq.conf,添加/修改以下内容:
# 只监听本地回环地址,避免对外暴露服务 listen-address=127.0.0.1 # 指定你的自定义端口DNS作为上游服务器,格式是【IP#端口】 server=127.0.0.1#5353 # 把你原来的两个DNS服务器也加上作为备选(如果需要的话) server=14.2.3.1 server=14.2.3.2 # 禁用默认读取resolv.conf的行为,避免冲突 no-resolv
- 重启dnsmasq并设置开机自启:
sudo systemctl restart dnsmasq sudo systemctl enable dnsmasq
- 修改
/etc/resolv.conf,把本地dnsmasq设为首选DNS:
sudo echo "nameserver 127.0.0.1" > /etc/resolv.conf # 要是想保留原来的DNS作为备选,也可以追加进去 # sudo echo -e "nameserver 14.2.3.1\nnameserver 14.2.3.2" >> /etc/resolv.conf
⚠️ 注意:如果你的CentOS用了NetworkManager,它可能会自动覆盖/etc/resolv.conf。这时候需要修改NetworkManager配置,让它别乱改:
- 编辑
/etc/NetworkManager/NetworkManager.conf,在[main]模块里加一行:
dns=none
- 重启NetworkManager:
sudo systemctl restart NetworkManager
方案二:用systemd-resolved(适合CentOS 8+)
如果你的CentOS版本比较新(比如8及以上),系统自带的systemd-resolved也支持自定义端口的DNS配置:
- 编辑
/etc/systemd/resolved.conf,修改[Resolve]部分:
[Resolve] # 把自定义端口的DNS放在前面,格式是【IP:端口】 DNS=127.0.0.1:5353 14.2.3.1 14.2.3.2 # 要是想让所有域名都用这些DNS,可以加一行Domains=~.
- 重启systemd-resolved服务:
sudo systemctl restart systemd-resolved
- 让
/etc/resolv.conf指向systemd-resolved的配置文件:
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
这样配置后,系统就会通过systemd-resolved转发请求到你指定的5353端口DNS上了。
备注:内容来源于stack exchange,提问作者dave
相关产品推荐
相关产品推荐

