第 66 课:hostname、host 与 nslookup
学习目标
完成本课学习后,你将能够:
- 理解并熟练使用
hostname命令查看和设置系统主机名。 - 掌握
host命令的基本用法,用于进行简单的 DNS 查询。 - 熟练使用功能更强大的
nslookup命令进行 DNS 问题诊断。 - 理解域名解析的基本流程以及如何运用这些工具进行排查。
核心概念
1. hostname:你的机器叫什么名字?
在网络中,每一台主机都需要一个标识,就像每个人都有自己的名字。hostname 命令就是用来查看和临时修改这个“名字”的。
- 查看当前主机名:直接输入
hostname。 - 临时修改主机名:使用
hostname 新名字。注意,这个修改在系统重启后会失效。永久修改主机名通常需要编辑/etc/hostname文件(或使用hostnamectl命令,取决于你的 Linux 发行版)。
2. host:简易的 DNS 查询员
host 是一个简单、直接的 DNS 查询工具。它常用于将域名(如 www.google.com)转换为 IP 地址,或者反向查询 IP 对应的域名。它的输出结果清晰明了,非常适合快速检查。
- 查询域名的 IP 地址:
host 域名 - 查询 IP 对应的域名(反向解析):
host IP地址
3. nslookup:功能强大的 DNS 侦探
nslookup(Name Server Lookup)是另一个经典的 DNS 查询工具,功能比 host 更全面,支持交互模式和非交互模式。它可以帮助你查询特定类型的 DNS 记录(如 A、MX、CNAME),指定使用哪个 DNS 服务器进行查询,是网络排错的重要工具。
- 非交互模式:
nslookup 域名或nslookup 域名 DNS服务器 - 交互模式:直接输入
nslookup进入,然后可以输入域名或命令进行查询。
生活化比喻:
hostname就像你给自己起的昵称,告诉别人“我叫小明”。- 当你想知道“张三”的电话号码(IP地址)时,你会打电话给电话局(DNS服务器)。
host就像直接告诉电话局:“查一下张三的号码”,然后给你一个简洁的答案。 nslookup则像一个更专业的查询服务,你可以问:“查一下张三的家庭电话号码(A记录)”、“查一下张三公司的号码(MX记录)”,甚至可以指定去另一个电话局查。
代码示例
#!/bin/bash
# 示例 1: hostname 命令
echo "--- 1. hostname 命令 ---"
echo "当前主机名:"
hostname # 输出当前主机名,如 `my-linux-server`
echo -e "\n临时修改主机名为 'temp-host'(注意:此修改重启后失效)"
sudo hostname temp-host
echo "修改后的主机名:"
hostname # 输出 `temp-host`
# 为了不影响后续演示,我们先改回来(实际环境中请根据需求操作)
# 注意:这里需要sudo权限或以root用户执行
sudo hostname $(cat /etc/hostname) # 或者直接写回原主机名,这里用了一个技巧读取文件内容
# 示例 2: host 命令
echo -e "\n--- 2. host 命令 ---"
echo "查询 'baidu.com' 的 IP 地址(A记录):"
host baidu.com # 输出类似:baidu.com has address 220.181.38.148
echo -e "\n查询 IP 地址 '8.8.8.8' 对应的域名(反向解析/PTR记录):"
host 8.8.8.8 # 输出类似:8.8.8.8.in-addr.arpa domain name pointer dns.google.
echo -e "\n查询 'google.com' 的邮件服务器记录(MX记录):"
host -t MX google.com # 输出类似:google.com mail is handled by 10 smtp.google.com.
# 示例 3: nslookup 命令
echo -e "\n--- 3. nslookup 命令 ---"
echo "使用默认DNS服务器查询 'github.com':"
nslookup github.com # 输出包含Name和Address的非交互式结果
echo -e "\n指定使用 '8.8.8.8' 作为DNS服务器来查询 'github.com':"
nslookup github.com 8.8.8.8
echo -e "\n进入交互模式(这里通过脚本模拟):"
# 使用 here-document 模拟交互输入,`quit` 退出交互模式
nslookup <<EOF
set type=MX
baidu.com
quit
EOF
echo -e "\n脚本演示结束。你可以亲自在终端中尝试以上命令。"
实践练习
练习 1:基础主机名操作
要求:在你的 Linux 终端中,完成以下操作:
- 查看并记录你当前系统的主机名。
- 使用命令将主机名临时修改为
lab-student。 - 再次查看主机名,确认修改成功。
- (思考题)这种临时修改在什么情况下有用?它的缺点是什么?
预期输出:
student@initial-hostname:~$ hostname
initial-hostname
student@initial-hostname:~$ sudo hostname lab-student
student@initial-hostname:~$ hostname
lab-student
练习 2:使用 host 进行域名查询
要求:
- 使用
host命令查询linux.org的 IPv4 地址。 - 使用
host命令查询上一步得到的 IP 地址,进行反向解析。 - 使用
host命令查询microsoft.com的邮件交换记录(MX记录)。
预期输出(以实际结果为准):
linux.org has address 104.26.10.78
...
78.10.26.104.in-addr.arpa. ... domain name pointer 104-26-10-78.lhr.hns.net.
...
microsoft.com mail is handled by 10 microsoft-com.mail.protection.outlook.com.
练习 3:nslookup 高级查询
要求:
- 使用
nslookup查询amazon.com的所有相关记录。 - 指定使用公共 DNS 服务器
114.114.114.114来查询sohu.com。 - 进入
nslookup交互模式,查询cloudflare.com的 CNAME 记录。 提示:在交互模式下,先输入set type=CNAME,再输入域名。
预期输出(交互模式部分):
> set type=CNAME
> cloudflare.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
*** Can't find cloudflare.com: No answer
# (注:cloudflare.com 本身通常直接是A记录,其子域名如 www 才可能有CNAME)
常见错误
- 混淆临时与永久修改:使用
hostname newname只是临时修改,重启后失效。新手常误以为已经永久生效。永久修改应使用hostnamectl set-hostname newname(适用于 systemd 系统)或编辑/etc/hostname。 host和nslookup输出混淆:host默认查询 A 记录,输出简洁。nslookup默认也会查询 A 记录,但输出格式不同,并包含更多查询信息。新手容易搞不清哪个结果对应哪个命令。- 误解“权威应答”与“非权威应答”:在
nslookup输出中,你可能会看到Non-authoritative answer。这表示你得到的答案不是直接从管理该域名的权威 DNS 服务器获得的,而是从你本地 DNS 服务器的缓存中获得的。这通常是正常的,不需要担心,除非你正在排查缓存导致的问题。 - 忘记权限:修改主机名需要
sudo或 root 权限。新手直接运行hostname newname可能会因为权限不足而失败。 - 工具不可用:在最小化安装的 Linux 系统中,可能默认未安装
host和nslookup。它们通常包含在dnsutils(Debian/Ubuntu) 或bind-utils(RHEL/CentOS) 软件包中。
小结
本节课我们学习了三个与网络标识和 DNS 查询密切相关的命令:
hostname是查看和临时修改本机名称的基础命令。永久修改需使用系统工具或编辑配置文件。host是一个简单、快速的 DNS 查询工具,适合进行正向(域名->IP)和反向(IP->域名)解析,以及查询特定类型的记录(如MX记录)。nslookup是一个功能更全面、更灵活的 DNS 诊断工具,支持交互模式,可以指定 DNS 服务器、查询不同的记录类型,是排错时的利器。
记住,hostname 管理“我是谁”,而 host 和 nslookup 帮助你“找到别人是谁”。在遇到网站无法访问、邮件发送失败等网络问题时,合理使用 host 和 nslookup 检查 DNS 解析是第一步关键操作。
练习编辑器
rust
Loading...