分为服务器更新和客户端更新两部分#容器同理
客户端
@wan设备,添加计划任务,设置脚本下载解析配置并重启服务。
# 创建脚本文件并写入更新DNS列表的内容
cat << 'EOF' > /etc/update_dns.sh
#!/bin/sh
# 随机等待0到500秒
sleep $(awk -v min=0 -v max=500 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')
# 定义工作目录和文件URL
cd /etc/dnsmasq.d
china_conf_url="https://gitee.com/felixonmars/dnsmasq-china-list/raw/master/accelerated-domains.china.conf"
ad_conf_url="https://anti-ad.net/anti-ad-for-dnsmasq.conf"
# 覆盖下载中国域名加速列表并替换223.5.5.5解析
wget -O china.conf $china_conf_url
sed -i 's/114\.114\.114\.114/223.5.5.5/g' china.conf
# 下载并更新广告过滤列表
#wget -O ad.conf $ad_conf_url
# 重启dnsmasq和netapi服务
/etc/init.d/dnsmasq restart
/etc/init.d/netapi restart
EOF
# 赋予脚本执行权限
chmod +x /etc/update_dns.sh
# 设置crontab任务,每两天的凌晨三点运行一次脚本
(crontab -l 2>/dev/null; echo "0 3 */2 * * /etc/update_dns.sh") | crontab -
重置反代重刷:
cd /etc/dnsmasq.d
wget -O china.conf https://gitee.com/felixonmars/dnsmasq-china-list/raw/master/accelerated-domains.china.conf
sed -i 's/114\.114\.114\.114/223.5.5.5/g' china.conf
#添加广告过滤列表,下载下边的文件,不需要注释掉也行
#wget -O ad.conf https://anti-ad.net/anti-ad-for-dnsmasq.conf
#如果不想覆盖平台的反向代理配置,下方两行注释掉可以防止覆盖原配置
cat china.conf > upstream.conf
rm china.conf
/etc/init.d/dnsmasq restart
/etc/init.d/netapi restart
#验证反向代理配置
tail -n 5 /etc/dnsmasq.d/upstream.conf
服务器
思路:定期下载覆盖配置
列表源:
国内IP:
https://www.ipdeny.com/ipblocks/data/countries/cn.zone
国内域名:
https://gitee.com/felixonmars/dnsmasq-china-list/raw/master/accelerated-domains.china.conf
AD拦截:
https://anti-ad.net/anti-ad-for-dnsmasq.conf
每两天的凌晨1:30更新:
echo “30 1 */2 * * /bin/sh /*/update.sh” | crontab –
#!/bin/sh
# 输出当前时间
current_datetime_start=$(date +"%Y-%m-%d %H:%M:%S")
echo "当前更新开始时间: $current_datetime_start" > log.txt
wget -O cn.zone https://www.ipdeny.com/ipblocks/data/countries/cn.zone
wget -O accelerated-domains.china.conf https://gitee.com/felixonmars/dnsmasq-china-list/raw/master/accelerated-domains.china.conf
wget -O anti-ad-for-dnsmasq.conf https://anti-ad.net/anti-ad-for-dnsmasq.conf
#输出结束时间
current_datetime_over=$(date +"%Y-%m-%d %H:%M:%S")
echo "更新结束时间: $current_datetime_over" >> log.txt
容器
alpine 安装 dnsmasq 解析国内后,需定期更新国内解析列表
整体思路:容器启动脚本中添加定时计划任务,由计划任务脚本来定期实现。
完善检测:添加当前时间,输出日志。整体配置如下:
Dockerfile
# 使用 Alpine Linux 作为基础镜像
FROM alpine:latest
# 复制启动脚本到工作目录
COPY *.sh /etc/init.d/
# 安装 dnsmasq 设置启动脚本权限
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories && \
apk update && \
apk add dnsmasq tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Shanghai/Asia" > /etc/timezone && \
apk del tzdata &&\
apk cache clean && \
chmod +x /etc/init.d/start.sh &&\
chmod +x /etc/init.d/redns.sh
# 复制 dnsmasq 配置文件到容器
COPY dnsmasq.conf /etc/dnsmasq.conf
# 复制配置文件到容器
COPY accelerated-domains.china.conf /etc/dnsmasq.d/accelerated-domains.china.conf
COPY bogus-nxdomain.china.conf /etc/dnsmasq.d/bogus-nxdomain.china.conf
COPY resolv.dnsmasq.conf /etc/dnsmasq.d/resolv.dnsmasq.conf
#COPY *.conf /etc/dnsmasq.d/
# 添加元数据
LABEL maintainer="Run <hi_itboy@126.com>"
# 暴露 DNS 端口
EXPOSE 53/udp
# 设置容器启动时运行的命令
CMD ["/etc/init.d/start.sh"]
启动脚本:
#!/bin/sh
# 清除现有的计划任务
crontab -r
# 添加新的计划任务
echo "14 2 */2 * * /bin/sh /etc/init.d/redns.sh" | crontab -
#运行后台进程
crond
dnsmasq & tail -f /dev/null
定时更新脚本:
#!/bin/sh
# 输出当前时间
current_datetime_start=$(date +"%Y-%m-%d %H:%M:%S")
echo "当前时间: $current_datetime_start" > /tmp/wait.log
# 生成 0 到 500 之间的随机秒数
WAIT_TIME=$(($RANDOM % 501))
# 打印等待时间(可选)
echo "等待 ${WAIT_TIME} 秒" >> /tmp/wait.log
# 等待随机时间
sleep $WAIT_TIME
#覆盖下载国内解析配置
wget -O /tmp/accelerated-domains.china.conf https://gitee.com/felixonmars/dnsmasq-china-list/raw/master/accelerated-domains.china.conf
#替换解析服务器223.5.5.5
sed -i 's/114\.114\.114\.114/223.5.5.5/g' /tmp/accelerated-domains.china.conf
#覆盖现有配置
cat /tmp/accelerated-domains.china.conf > /etc/dnsmasq.d/accelerated-domains.china.conf
#清除解析日志
rm /tmp/dns.log
#重启dnsmasq
pkill dnsmasq
#给我开
dnsmasq
#结束后测试
current_datetime_over=$(date +"%Y-%m-%d %H:%M:%S")
echo "当前时间: $current_datetime_over" > /tmp/over.log
nslookup www.baidu.com 127.0.0.1 >> /tmp/over.log
构建时选择arm架构:
docker buildx build -t run/dns:3.0-arm –platform linux/arm . –load