CentOS 7 安装 dnsmasq 解决nginx无法指定dns的问题

CentOS 7 安装 dnsmasq 解决nginx无法指定dns的问题

1. 安装 dnsmasq

bash 复制代码
yum install dnsmasq -y

如果无法安装没有网络可以下载本地的包

wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.91.tar.xz

tar -xvf dnsmasq-2.91.tar.xz

cd dnsmasq-2.91

make

make install

cp dnsmasq.conf.example /etc/dnsmasq.conf

启动为

/usr/local/sbin/dnsmasq -C /etc/dnsmasq.conf

2. 配置 dnsmasq

编辑配置文件:

bash 复制代码
nano /etc/dnsmasq.conf

添加/修改以下内容(取消注释或新增):

conf 复制代码
listen-address=127.0.0.1
port=53
no-resolv
no-poll


# 上游(步骤1+2)
all-servers
server=114.114.114.114#53
server=223.5.5.5#53
server=119.29.29.29#53
server=8.8.8.8#53
server=1.1.1.1#53

# 缓存(步骤3)
cache-size=20000
min-cache-ttl=600
max-cache-ttl=3600
dns-forward-max=1500

# 安全/杂项
domain-needed
bogus-priv
filter-AAAA
log-async=50

3. 启动并设置开机自启

bash 复制代码
systemctl start dnsmasq
systemctl enable dnsmasq

4. 配置 Nginx 使用本地 DNS

编辑 Nginx 配置文件(通常在 /etc/nginx/nginx.conf):

nginx 复制代码
resolver 127.0.0.1 valid=300s;
resolver_timeout 5s;

可手动安装 下载源码

官网地址https://thekelleys.org.uk/

传输dnsmasq-2.91.tar.xz到服务器 执行解压

tar -xvf dnsmasq-2.91.tar.xz

cd到解压的目录

cd dnsmasq-2.91

执行安装

make

执行添加

make install

然后添加配置

vi /etc/dnsmasq.conf

下面的为配置 不想手动cp可以从我发的包里面直接粘过去

复制代码
listen-address=127.0.0.1
port=53
no-resolv
no-poll

# 国内域名白名单(步骤1)
conf-dir=/etc/dnsmasq.d

# 上游(步骤2+3)
all-servers
server=114.114.114.114#53
server=223.5.5.5#53
server=119.29.29.29#53
server=8.8.8.8#53
server=1.1.1.1#53

# 缓存(步骤4)
cache-size=20000
min-cache-ttl=600
max-cache-ttl=3600
dns-forward-max=1500

# 安全/杂项
domain-needed
bogus-priv
filter-AAAA
log-async=50

然后添加到systemctl 里面

复制代码
echo -e "[Unit]
Description=dnsmasq servier
After=network.target

[Service]
ExecStart=/usr/local/sbin/dnsmasq -C /etc/dnsmasq.conf --keep-in-foreground
Restart=always

[Install]
WantedBy=multi-user.target" > /etc/systemd/system/dnsmasq.service

执行刷新

复制代码
systemctl daemon-reload

启动服务:

复制代码
systemctl start dnsmasq

关闭

复制代码
systemctl stop dnsmasq

设置开机自动启动:

复制代码
systemctl enable dnsmasq

5. 验证配置

  1. 测试 dnsmasq 是否正常工作

    bash 复制代码
    dig @127.0.0.1 www.baidu.com

    若能正常解析,说明 dnsmasq 已生效。

  2. 检查 dnsmasq 状态

    bash 复制代码
    systemctl status dnsmasq

    确保服务处于 active (running) 状态。

6. 故障排查(可选)

若遇到问题,可尝试:

  • 查看日志

    bash 复制代码
    journalctl -u dnsmasq
  • 检查端口占用

    bash 复制代码
    netstat -tulpn | grep :53

    确保 dnsmasq 在监听 53 端口。

配置效果

配置完成后,Nginx 将通过本地 dnsmasq 进行域名解析,而 dnsmasq 会:

  1. 自动选择响应最快的上游 DNS 服务器;
  2. 缓存解析结果以提高性能;
  3. 当某个服务器不可用时,自动切换到其他可用服务器。
相关推荐
潘正翔13 分钟前
docker基础_镜像使用
linux·运维·服务器·docker·容器·centos·devops
24计网1王仔寿38 分钟前
Linux运维与云计算全栈系统化学习指南(Shell+虚拟化+OpenStack+Docker+公私云实战)
linux·课程设计·数据库开发·微信公众平台·neo4j·命令模式·sequoiadb
DB哥讲数据库1 小时前
rocky linux安装教程:VMware虚拟机图文讲解部署Rocky Linux 9(附镜像包)
linux·运维·服务器
未*望1 小时前
【Linux入坑(二)—全志T133开发板适配USB-电容屏触摸屏驱动(多点触控) 】
linux·运维·服务器
懒鸟一枚1 小时前
为什么 useradd -rs /bin/false service 创建的用户无法用 su 切换?
linux·服务器·数据库
學點1 小时前
Linux ubuntu安装redis
linux·redis·ubuntu
开发小程序的之朴1 小时前
认识安企CMS - 系统概述
nginx·golang·系统架构
天空'之城2 小时前
Linux 系统编程 10:线程同步
linux·开发语言·系统编程·线程同步
河铃旅鹿2 小时前
在Ubuntu系统上为Android交叉编译OpenSSL
android·linux·ubuntu
小蜗牛的路2 小时前
使用OpenSSL生成本地证书https+nginx
网络协议·nginx·https