DNS 配置与排查
SkillDev toolsDNS configuration and troubleshooting
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the DNS 配置与排查 skill
What this skill tells your AI
The instructions your AI receives, as published by chaterm/terminal-skills in network/dns/SKILL.md and read by ahel’s review.
概述
DNS 配置、解析排查、BIND/CoreDNS 等技能。
DNS 查询工具
dig
# 基础查询
dig example.com
dig example.com A
dig example.com AAAA
dig example.com MX
dig example.com NS
dig example.com TXT
dig example.com ANY
# 简短输出
dig +short example.com
# 指定 DNS 服务器
dig @8.8.8.8 example.com
dig @1.1.1.1 example.com
# 追踪解析过程
dig +trace example.com
# 反向解析
dig -x 8.8.8.8
# 查询特定记录
dig example.com SOA
dig example.com CNAME
# 禁用递归
dig +norecurse example.com
nslookup
# 基础查询
nslookup example.com
nslookup example.com 8.8.8.8
# 查询特定类型
nslookup -type=mx example.com
nslookup -type=ns example.com
nslookup -type=txt example.com
# 反向解析
nslookup 8.8.8.8
host
# 基础查询
host example.com
host -t mx example.com
host -t ns example.com
# 反向解析
host 8.8.8.8
# 详细输出
host -v example.com
本地 DNS 配置
/etc/resolv.conf
# 查看配置
cat /etc/resolv.conf
# 配置示例
nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com
options timeout:2 attempts:3
# 临时修改(可能被覆盖)
echo "nameserver 8.8.8.8" > /etc/resolv.conf
/etc/hosts
# 查看
cat /etc/hosts
# 添加记录
echo "192.168.1.100 myserver.local" >> /etc/hosts
# 格式
127.0.0.1 localhost
192.168.1.100 myserver myserver.local
systemd-resolved
# 查看状态
systemd-resolve --status
resolvectl status
# 查询
resolvectl query example.com
# 刷新缓存
systemd-resolve --flush-caches
resolvectl flush-caches
# 配置文件
/etc/systemd/resolved.conf
BIND DNS 服务器
安装与管理
# 安装
apt install bind9 bind9utils # Debian/Ubuntu
yum install bind bind-utils # CentOS/RHEL
# 服务管理
systemctl start named
systemctl enable named
systemctl status named
# 检查配置
named-checkconf
named-checkzone example.com /etc/bind/zones/db.example.com
主配置
# /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
forwarders {
8.8.8.8;
8.8.4.4;
};
dnssec-validation auto;
listen-on { any; };
listen-on-v6 { any; };
allow-query { any; };
allow-recursion { 192.168.0.0/16; 10.0.0.0/8; };
recursion yes;
};
区域配置
# /etc/bind/named.conf.local
zone "example.com" {
type master;
file "/etc/bind/zones/db.example.com";
allow-transfer { 192.168.1.2; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.192.168.1";
};
区域文件
# /etc/bind/zones/db.example.com
$TTL 604800
@ IN SOA ns1.example.com. admin.example.com. (
2024011501 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; Name servers
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; A records
@ IN A 192.168.1.10
ns1 IN A 192.168.1.1
ns2 IN A 192.168.1.2
www IN A 192.168.1.10
mail IN A 192.168.1.20
; CNAME records
ftp IN CNAME www.example.com.
; MX records
@ IN MX 10 mail.example.com.
CoreDNS
配置文件
# Corefile
.:53 {
forward . 8.8.8.8 8.8.4.4
cache 30
log
errors
}
example.com:53 {
file /etc/coredns/db.example.com
log
errors
}
Kubernetes CoreDNS
# ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf {
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
}
常见场景
场景 1:DNS 解析排查
# 1. 检查本地配置
cat /etc/resolv.conf
# 2. 测试 DNS 服务器连通性
ping 8.8.8.8
# 3. 查询解析
dig example.com
dig @8.8.8.8 example.com
# 4. 追踪解析路径
dig +trace example.com
# 5. 检查 DNS 缓存
systemd-resolve --statistics
场景 2:清除 DNS 缓存
# systemd-resolved
systemd-resolve --flush-caches
# nscd
systemctl restart nscd
# dnsmasq
systemctl restart dnsmasq
# BIND
rndc flush
# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
场景 3:测试 DNS 性能
# 使用 dig 测试响应时间
dig example.com | grep "Query time"
# 批量测试
for i in {1..10}; do
dig +noall +stats example.com | grep "Query time"
done
# 使用 dnsperf
dnsperf -s 8.8.8.8 -d queries.txt
场景 4:配置内部 DNS
# 添加内部域名解析
# /etc/hosts
192.168.1.100 app.internal
192.168.1.101 db.internal
# 或配置 dnsmasq
# /etc/dnsmasq.conf
address=/internal/192.168.1.100
server=8.8.8.8
故障排查
| 问题 | 排查方法 |
|---|---|
| 解析失败 | 检查 resolv.conf、DNS 服务器 |
| 解析慢 | 检查 DNS 服务器响应、网络延迟 |
| 缓存问题 | 清除本地缓存、检查 TTL |
| 记录不存在 | 检查区域文件、SOA 序列号 |
# 检查 DNS 端口
ss -ulnp | grep :53
netstat -ulnp | grep :53
# 测试 TCP/UDP
dig +tcp example.com
dig +notcp example.com
# 检查 BIND 日志
tail -f /var/log/named/query.log
journalctl -u named -f
Signals
- GitHub stars
- 59
- Forks
- 12
- Last commit
- Mar 2026
Advanced
- Catalog kind
- skill
- Gateway key
dns- Source
- github.com/chaterm/terminal-skills