主题
主机名与 DNS 设置
在 Rocky Linux 系统中,主机名和 DNS 设置是网络配置的重要组成部分。正确配置主机名和 DNS 对于系统间的通信、服务识别以及网络资源访问至关重要。本教程将详细介绍如何在 Rocky Linux 中设置和管理主机名,以及如何配置 DNS 解析服务。
主机名概述
主机名是分配给计算机的标签,用于在网络中识别该计算机。在 Rocky Linux 中,主机名分为三种类型:
- 静态主机名(Static hostname):由系统管理员设置的永久主机名
- ** transient 主机名(Transient hostname)**:由 DHCP 或 mDNS 等服务动态分配的主机名
- pretty 主机名(Pretty hostname):用户友好的主机名,可以包含特殊字符和空格
静态主机名是最常用的,它在系统重启后仍然保持不变。
查看当前主机名
在 Rocky Linux 中,可以使用以下命令查看当前的主机名设置:
使用 hostnamectl 命令
hostnamectl 是 systemd 系统中管理主机名的主要工具:
bash
# 查看完整的主机名信息
hostnamectl
# 仅查看静态主机名
hostnamectl status --static
# 仅查看 transient 主机名
hostnamectl status --transient
# 仅查看 pretty 主机名
hostnamectl status --pretty使用 hostname 命令
hostname 命令是一个传统的工具,可以显示或临时设置主机名:
bash
# 显示当前主机名
hostname
# 显示 FQDN(完全限定域名)
hostname -f查看 /etc/hostname 文件
静态主机名也存储在 /etc/hostname 文件中:
bash
cat /etc/hostname设置永久主机名
使用 hostnamectl 设置主机名
在 Rocky Linux 中,推荐使用 hostnamectl 命令来设置永久主机名:
bash
# 设置静态主机名
sudo hostnamectl set-hostname server.example.com
# 设置 pretty 主机名
sudo hostnamectl set-hostname "My Rocky Linux Server" --pretty
# 清除 transient 主机名
sudo hostnamectl set-hostname --transient ""hostnamectl 命令会自动更新 /etc/hostname 文件,并且可以立即生效,无需重启系统。
手动编辑 /etc/hostname 文件
也可以直接编辑 /etc/hostname 文件来设置静态主机名:
bash
sudo vim /etc/hostname将文件内容替换为新的主机名,例如:
server.example.com保存文件后,应用更改:
bash
sudo hostname -F /etc/hostname配置 /etc/hosts 文件
/etc/hosts 文件用于本地 DNS 解析,它允许系统在不查询外部 DNS 服务器的情况下解析主机名到 IP 地址。
查看当前 hosts 文件
bash
cat /etc/hosts编辑 hosts 文件
bash
sudo vim /etc/hosts典型的 hosts 文件包含以下内容:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 server.example.com server建议将系统的静态主机名添加到 127.0.0.1 行,以便本地服务可以正确解析主机名。
DNS 配置
DNS(域名系统)负责将域名解析为 IP 地址,是互联网和局域网通信的基础。在 Rocky Linux 中,DNS 配置主要通过以下几种方式管理:
1. NetworkManager DNS 配置
使用 NetworkManager 管理的网络连接,可以通过 nmcli 或 nmtui 设置 DNS 服务器。
使用 nmcli 配置 DNS
bash
# 查看当前网络连接
nmcli connection show
# 设置 DNS 服务器(将 "ens33" 替换为你的网络接口)
sudo nmcli connection modify ens33 ipv4.dns "8.8.8.8 8.8.4.4"
# 设置 DNS 搜索域
sudo nmcli connection modify ens33 ipv4.dns-search "example.com"
# 应用更改
sudo nmcli connection up ens33使用 nmtui 配置 DNS
nmtui 提供了一个文本用户界面来配置网络设置:
bash
# 启动 nmtui
sudo nmtui按照界面提示,选择 "Edit a connection",然后编辑你的网络连接,在 DNS 服务器字段中输入 DNS 服务器地址。
2. /etc/resolv.conf 文件
/etc/resolv.conf 是传统的 DNS 配置文件,但在使用 NetworkManager 的系统中,这个文件通常是由 NetworkManager 自动生成和管理的。
查看 resolv.conf 文件
bash
cat /etc/resolv.conf直接编辑 resolv.conf(不推荐)
在某些情况下,你可能需要直接编辑 /etc/resolv.conf 文件。但请注意,在使用 NetworkManager 的系统中,这些更改可能会在网络重启后丢失。
bash
sudo vim /etc/resolv.conf添加或修改以下行:
nameserver 8.8.8.8
nameserver 8.8.4.4
domain example.com
search example.com3. 使 resolv.conf 持久化
要使 /etc/resolv.conf 的更改持久化,可以:
禁用 NetworkManager 对 resolv.conf 的管理
bash
# 编辑 NetworkManager 配置
sudo vim /etc/NetworkManager/NetworkManager.conf在 [main] 部分添加:
dns=none然后重启 NetworkManager:
bash
sudo systemctl restart NetworkManager使用 resolvconf 工具
bash
# 安装 resolvconf
sudo dnf install resolvconf -y
# 启用 resolvconf 服务
sudo systemctl enable --now resolvconf.service
# 编辑 resolv.conf.head 文件(会添加到生成的 resolv.conf 的开头)
sudo vim /etc/resolvconf/resolv.conf.d/head添加你的 DNS 配置:
nameserver 8.8.8.8
nameserver 8.8.4.4然后更新 resolv.conf:
bash
sudo resolvconf -uDNS 解析测试
配置 DNS 后,可以使用以下命令测试 DNS 解析是否正常工作:
使用 dig 命令
bash
# 安装 bind-utils 包以获取 dig 命令
sudo dnf install bind-utils -y
# 解析域名
dig www.google.com
# 使用特定的 DNS 服务器解析
dig @8.8.8.8 www.google.com
# 反向解析
dig -x 8.8.8.8使用 nslookup 命令
bash
# 解析域名
nslookup www.google.com
# 使用特定的 DNS 服务器解析
nslookup www.google.com 8.8.8.8使用 host 命令
bash
# 解析域名
host www.google.com
# 反向解析
host 8.8.8.8配置自定义 DNS 服务
在某些情况下,你可能需要在 Rocky Linux 上设置自己的 DNS 服务器,例如 BIND(Berkeley Internet Name Domain)。
安装 BIND DNS 服务器
bash
# 安装 BIND 服务器和工具
sudo dnf install bind bind-utils -y配置 BIND 服务器
编辑主配置文件
bash
sudo vim /etc/named.conf主要配置选项:
options {
listen-on port 53 { 127.0.0.1; any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; any; };
recursion yes;
};配置区域文件
- 为正向解析创建区域文件:
bash
sudo vim /var/named/example.com.zone添加以下内容:
$TTL 86400
@ IN SOA example.com. admin.example.com. (
2023050101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns1.example.com.
ns1 IN A 192.168.1.10
www IN A 192.168.1.100
mail IN A 192.168.1.101- 为反向解析创建区域文件:
bash
sudo vim /var/named/192.168.1.rev添加以下内容:
$TTL 86400
@ IN SOA example.com. admin.example.com. (
2023050101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns1.example.com.
10 IN PTR ns1.example.com.
100 IN PTR www.example.com.
101 IN PTR mail.example.com.- 设置正确的权限:
bash
sudo chown named:named /var/named/example.com.zone /var/named/192.168.1.rev
sudo chmod 640 /var/named/example.com.zone /var/named/192.168.1.rev- 在 named.conf 中添加区域:
bash
sudo vim /etc/named.conf在文件末尾添加:
zones {
example.com IN {
type master;
file "example.com.zone";
allow-update { none; };
};
1.168.192.in-addr.arpa IN {
type master;
file "192.168.1.rev";
allow-update { none; };
};
};检查 BIND 配置
bash
# 检查 named.conf 语法
sudo named-checkconf
# 检查区域文件语法
sudo named-checkzone example.com /var/named/example.com.zone
sudo named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.rev启动 BIND 服务
bash
# 启动 named 服务
sudo systemctl start named
# 设置 named 服务开机自启
sudo systemctl enable named
# 检查 named 服务状态
sudo systemctl status named配置防火墙
bash
# 允许 DNS 服务通过防火墙
sudo firewall-cmd --permanent --add-service=dns
# 重新加载防火墙规则
sudo firewall-cmd --reload使用本地缓存 DNS(dnsmasq)
对于不需要完整 DNS 服务器功能的场景,可以使用 dnsmasq 提供轻量级的 DNS 缓存服务。
安装 dnsmasq
bash
sudo dnf install dnsmasq -y配置 dnsmasq
bash
sudo vim /etc/dnsmasq.conf主要配置选项:
# 监听所有网络接口
listen-address=0.0.0.0
# 不读取 /etc/resolv.conf
no-resolv
# 设置上游 DNS 服务器
server=8.8.8.8
server=8.8.4.4
# 缓存大小
cache-size=1000
# 本地域名解析
address=/example.local/192.168.1.10启动 dnsmasq 服务
bash
# 启动 dnsmasq 服务
sudo systemctl start dnsmasq
# 设置 dnsmasq 服务开机自启
sudo systemctl enable dnsmasq
# 检查 dnsmasq 服务状态
sudo systemctl status dnsmasq配置防火墙
bash
# 允许 DNS 服务通过防火墙
sudo firewall-cmd --permanent --add-service=dns
# 重新加载防火墙规则
sudo firewall-cmd --reload常见问题与故障排除
主机名设置后不生效
如果设置主机名后不立即生效,可以尝试以下方法:
重启网络服务:
bashsudo systemctl restart NetworkManager手动设置临时主机名:
bashsudo hostname server.example.com检查
/etc/hostname文件权限:bashls -l /etc/hostname sudo chmod 644 /etc/hostname
DNS 解析失败
如果 DNS 解析不正常,可以按照以下步骤排查:
检查
/etc/resolv.conf文件内容:bashcat /etc/resolv.conf测试基本网络连接:
bashping 8.8.8.8使用不同的 DNS 服务器测试:
bashdig @8.8.8.8 www.google.com检查防火墙设置:
bashsudo firewall-cmd --list-all检查 NetworkManager 配置:
bashnmcli connection show --active nmcli connection show <connection-name> | grep dns
nslookup 与 ping 解析结果不一致
如果 nslookup 和 ping 显示不同的解析结果,可能是因为:
/etc/hosts文件中的条目覆盖了 DNS 解析- NSS(Name Service Switch)配置问题
检查 /etc/nsswitch.conf 文件中的 hosts 行:
bash
cat /etc/nsswitch.conf | grep hosts正常的配置应该是:
hosts: files dns myhostname这表示系统会先查询 /etc/hosts 文件,然后查询 DNS,最后是 myhostname。
最佳实践
使用有意义的主机名:选择能够反映服务器角色或功能的主机名,便于管理和识别
采用一致的命名约定:在多服务器环境中,建立并遵循一致的主机名命名约定
配置适当的 DNS 服务器:使用可靠的 DNS 服务器,考虑使用主备 DNS 配置
定期测试 DNS 解析:定期测试 DNS 解析是否正常工作,确保网络服务的可用性
使用 DNS 缓存:在大型网络中,考虑使用 DNS 缓存服务提高解析效率
监控 DNS 查询性能:监控 DNS 查询响应时间,及时发现并解决 DNS 相关问题
保持 DNS 记录更新:当服务器 IP 地址变更时,及时更新 DNS 记录
总结
正确配置主机名和 DNS 是 Rocky Linux 系统网络管理的基础。本教程详细介绍了如何查看和设置主机名、配置 DNS 解析、测试 DNS 功能以及部署自定义 DNS 服务。
通过掌握这些知识和技能,您可以确保系统在网络环境中的正确识别和通信,为各种网络服务的正常运行提供保障。在实际应用中,应根据具体的网络环境和需求,选择合适的配置方法,并定期进行检查和维护。