nslookup 是网络管理中最常用的DNS查询工具之一。它可以查询DNS记录,检查域名解析是否正常,查找域名的IP地址,以及诊断DNS服务器问题。
dig 或 host 命令替代,但它仍然广泛使用。
nslookup 通常包含在 bind-utils 或 dnsutils 包中:
sudo apt-get install dnsutils
sudo yum install bind-utils
# CentOS 8+使用dnf
sudo dnf install bind-utils
sudo dnf install bind-utils
sudo pacman -S dnsutils
nslookup -version
# 非交互模式
nslookup [选项] [域名] [DNS服务器]
# 交互模式
nslookup
> 命令
| 选项 | 说明 |
|---|---|
域名 |
要查询的域名 |
DNS服务器 |
指定使用的DNS服务器(如8.8.8.8) |
-type=类型 |
指定查询记录类型(A、MX、NS、CNAME、TXT等) |
-query=类型 |
同 -type,指定查询类型 |
-debug |
显示调试信息 |
-timeout=秒 |
设置查询超时时间 |
-retry=次数 |
设置重试次数 |
-port=端口 |
指定DNS服务器端口(默认53) |
-sil 或 -silent |
静默模式,只显示结果 |
-h 或 -help |
显示帮助信息 |
| 记录类型 | 说明 | 用途 |
|---|---|---|
A |
地址记录 | 将域名指向IPv4地址 |
AAAA |
IPv6地址记录 | 将域名指向IPv6地址 |
CNAME |
规范名称记录 | 域名别名,将一个域名指向另一个域名 |
MX |
邮件交换记录 | 指定邮件服务器的地址 |
NS |
域名服务器记录 | 指定该域名的权威DNS服务器 |
PTR |
指针记录 | 用于反向DNS查找,IP指向域名 |
TXT |
文本记录 | 存储任意文本信息,常用于SPF、DKIM等 |
SOA |
起始授权记录 | 存储域名的管理信息 |
SRV |
服务定位记录 | 定义特定服务的服务器位置 |
# 查询域名的A记录(IPv4地址)
nslookup www.google.com
# 查询域名的所有记录
nslookup -type=ANY www.google.com
输出示例:
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: www.google.com
Address: 142.250.185.4
# 使用Google的公共DNS服务器
nslookup www.google.com 8.8.8.8
# 使用Cloudflare的DNS服务器
nslookup www.google.com 1.1.1.1
# 使用本地DNS服务器
nslookup www.google.com 192.168.1.1
# 查询MX记录(邮件服务器)
nslookup -type=MX google.com
# 查询NS记录(域名服务器)
nslookup -type=NS google.com
# 查询CNAME记录(别名)
nslookup -type=CNAME www.github.com
# 查询TXT记录
nslookup -type=TXT google.com
# 查询AAAA记录(IPv6地址)
nslookup -type=AAAA ipv6.google.com
# 根据IP地址查询域名
nslookup 8.8.8.8
# 使用PTR记录进行反向查询
nslookup -type=PTR 8.8.8.8
# 进入交互模式
nslookup
# 在交互模式中可以使用以下命令
> server 8.8.8.8 # 切换DNS服务器
> set type=MX # 设置查询类型为MX
> google.com # 查询域名
> set debug # 开启调试模式
> set timeout=10 # 设置超时时间
> exit # 退出
# 查询域名的所有相关信息
nslookup -type=ALL example.com
# 显示详细的调试信息
nslookup -debug example.com
在nslookup交互模式中,可以使用以下命令:
| 命令 | 说明 |
|---|---|
域名 |
查询指定域名 |
server DNS服务器 |
设置默认DNS服务器 |
set type=记录类型 |
设置查询的DNS记录类型 |
set debug |
开启调试模式 |
set nodebug |
关闭调试模式 |
set recurse |
启用递归查询 |
set norecurse |
禁用递归查询 |
set port=端口 |
设置DNS服务器端口 |
set timeout=秒 |
设置查询超时时间 |
set retry=次数 |
设置重试次数 |
ls 域名 |
列出域名的所有记录(需要权限) |
exit 或 quit |
退出nslookup |
help 或 ? |
显示帮助信息 |
# 检查DNS解析是否正常
nslookup www.google.com
# 如果失败,尝试使用公共DNS
nslookup www.google.com 8.8.8.8
# 检查本地DNS服务器
nslookup localhost
nslookup 127.0.0.1
创建脚本批量查询域名:
#!/bin/bash
domains=("google.com" "github.com" "stackoverflow.com")
for domain in "${domains[@]}"; do
echo "查询域名: $domain"
nslookup $domain
echo "------------------------"
done
# 查询MX记录
nslookup -type=MX example.com
# 查询TXT记录中的SPF信息
nslookup -type=TXT example.com | grep spf
# 检查邮件服务器的A记录
nslookup mail.example.com
# 逐步诊断DNS问题
echo "1. 检查本地DNS缓存"
sudo systemd-resolve --statistics
echo "2. 查询根域名服务器"
nslookup -type=NS . # 注意有一个点
echo "3. 查询TLD服务器"
nslookup -type=NS com.
echo "4. 查询权威DNS服务器"
nslookup -type=NS example.com
#!/bin/bash
domain="example.com"
dns_servers=("8.8.8.8" "1.1.1.1" "9.9.9.9" "208.67.222.222")
for dns in "${dns_servers[@]}"; do
echo "使用DNS服务器: $dns"
nslookup $domain $dns | grep "Address:"
echo "------------------------"
done
| 工具 | 特点 | 推荐使用场景 |
|---|---|---|
| nslookup | 简单易用,交互模式方便调试,所有系统都支持 | 快速查询,简单故障排除 |
| dig | 功能强大,输出详细,支持更多选项,脚本友好 | 高级DNS查询,自动化脚本 |
| host | 简单快速,输出简洁,适合查看基本DNS信息 | 快速查看域名解析结果 |
| whois | 查询域名注册信息,不是DNS查询工具 | 查看域名所有者、注册信息 |
| systemd-resolve | systemd系统的DNS解析器,管理DNS配置 | 管理systemd系统的DNS设置 |
A: 这表示查询结果来自DNS缓存服务器(如8.8.8.8),而不是该域名的权威DNS服务器。权威答案需要查询域名的NS记录指定的DNS服务器。
A: 使用以下命令查询NS记录:
nslookup -type=NS example.com
A: 可能是以下原因:
解决方法:
# 测试网络连通性
ping 8.8.8.8
# 测试DNS端口
nc -zv 8.8.8.8 53
# 更换DNS服务器
nslookup example.com 1.1.1.1
A: 指定的DNS服务器无法处理查询请求。尝试:
dig 命令nslookup、dig 和 whois 进行完整的域名调查-silent选项减少输出