66·网络入门

hostname、host 与 nslookup

hostnamedns-tools

第 66 课:hostname、host 与 nslookup

学习目标

完成本课学习后,你将能够:

  1. 理解并熟练使用 hostname 命令查看和设置系统主机名。
  2. 掌握 host 命令的基本用法,用于进行简单的 DNS 查询。
  3. 熟练使用功能更强大的 nslookup 命令进行 DNS 问题诊断。
  4. 理解域名解析的基本流程以及如何运用这些工具进行排查。

核心概念

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 终端中,完成以下操作:

  1. 查看并记录你当前系统的主机名。
  2. 使用命令将主机名临时修改为 lab-student
  3. 再次查看主机名,确认修改成功。
  4. (思考题)这种临时修改在什么情况下有用?它的缺点是什么?

预期输出

student@initial-hostname:~$ hostname
initial-hostname
student@initial-hostname:~$ sudo hostname lab-student
student@initial-hostname:~$ hostname
lab-student

练习 2:使用 host 进行域名查询

要求

  1. 使用 host 命令查询 linux.org 的 IPv4 地址。
  2. 使用 host 命令查询上一步得到的 IP 地址,进行反向解析。
  3. 使用 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 高级查询

要求

  1. 使用 nslookup 查询 amazon.com 的所有相关记录。
  2. 指定使用公共 DNS 服务器 114.114.114.114 来查询 sohu.com
  3. 进入 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)

常见错误

  1. 混淆临时与永久修改:使用 hostname newname 只是临时修改,重启后失效。新手常误以为已经永久生效。永久修改应使用 hostnamectl set-hostname newname(适用于 systemd 系统)或编辑 /etc/hostname
  2. hostnslookup 输出混淆host 默认查询 A 记录,输出简洁。nslookup 默认也会查询 A 记录,但输出格式不同,并包含更多查询信息。新手容易搞不清哪个结果对应哪个命令。
  3. 误解“权威应答”与“非权威应答”:在 nslookup 输出中,你可能会看到 Non-authoritative answer。这表示你得到的答案不是直接从管理该域名的权威 DNS 服务器获得的,而是从你本地 DNS 服务器的缓存中获得的。这通常是正常的,不需要担心,除非你正在排查缓存导致的问题。
  4. 忘记权限:修改主机名需要 sudo 或 root 权限。新手直接运行 hostname newname 可能会因为权限不足而失败。
  5. 工具不可用:在最小化安装的 Linux 系统中,可能默认未安装 hostnslookup。它们通常包含在 dnsutils (Debian/Ubuntu) 或 bind-utils (RHEL/CentOS) 软件包中。

小结

本节课我们学习了三个与网络标识和 DNS 查询密切相关的命令:

  • hostname 是查看和临时修改本机名称的基础命令。永久修改需使用系统工具或编辑配置文件。
  • host 是一个简单、快速的 DNS 查询工具,适合进行正向(域名->IP)和反向(IP->域名)解析,以及查询特定类型的记录(如MX记录)。
  • nslookup 是一个功能更全面、更灵活的 DNS 诊断工具,支持交互模式,可以指定 DNS 服务器、查询不同的记录类型,是排错时的利器。

记住,hostname 管理“我是谁”,而 hostnslookup 帮助你“找到别人是谁”。在遇到网站无法访问、邮件发送失败等网络问题时,合理使用 hostnslookup 检查 DNS 解析是第一步关键操作。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「SSH 远程连接基础」 以巩固所学知识。