深色模式
内网 DNS dnsmasq
摘要:dnsmasq 是内网神器——既能做 DNS 缓存加速,又能用一行配置把
wiki.local指向内网 IP。本文在内网一台机器上搭起它,并让其它机器用它解析。
适用环境
bash
which dnsmasq || sudo apt install dnsmasq
dnsmasq --version | head -1
# 该机将作为内网 DNS(建议地址固定,如 10.0.0.2)1
2
3
2
3
操作步骤
1. 基础配置(缓存 + 上游)
bash
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
sudo tee /etc/dnsmasq.conf <<'EOF'
# 监听内网地址
listen-address=127.0.0.1,10.0.0.2
# 上游公共 DNS(缓存未命中时转发)
server=223.5.5.5
server=8.8.8.8
# 缓存大小
cache-size=1000
# 不读 /etc/resolv.conf 的上游,避免冲突
no-resolv
EOF1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
2. 加自定义内网域名
bash
# 把 wiki.local 指向内网服务
echo "address=/wiki.local/10.0.0.50" | sudo tee -a /etc/dnsmasq.conf
echo "address=/git.local/10.0.0.51" | sudo tee -a /etc/dnsmasq.conf1
2
3
2
3
3. 启动并放行
bash
sudo systemctl enable --now dnsmasq
sudo ss -lntp -u | grep ':53' # DNS 走 UDP 53
sudo firewall-cmd --permanent --add-service=dns && sudo firewall-cmd --reload1
2
3
2
3
4. 客户端指向它
bash
# 在客户端 /etc/resolv.conf 写入(或用 nsswitch 的 dns 顺序)
echo "nameserver 10.0.0.2" | sudo tee /etc/resolv.conf1
2
2
验证
bash
# 解析自定义域名
dig +short wiki.local @10.0.0.2 # 应返回 10.0.0.50
# 解析公网域名(走缓存+上游)
dig +short www.example.com @10.0.0.2
# 看缓存命中
dig www.example.com @10.0.0.2 | grep -i "query time" # 第二次应接近 0ms1
2
3
4
5
6
2
3
4
5
6
常见坑
WARNING
listen-address 别写成 0.0.0.0 又不加来源限制,否则会变成开放解析器被利用做放大攻击。内网用就只监听内网地址,并配合防火墙限制来源网段。
DANGER
dnsmasq 与 systemd-resolved 可能争抢 53 端口(常见于桌面版 Linux)。冲突时改 dnsmasq 端口或停掉 resolved 的 53 监听(DNSStubListener=no),否则 dnsmasq 起不来。