Linux 网络排查:IP、路由、DNS 与服务状态
适用于使用 iproute2 的 Linux;systemctl 示例要求系统使用 systemd。网络配置由发行版、云镜像和实际网络管理器共同决定,不存在一套适用于所有 Linux 的配置文件路径。
Linux 常用网络操作
主机名操作
bash
hostname
hostnamectl在使用 systemd 的系统上,确认新名称后可永久设置:
bash
sudo hostnamectl set-hostname server01hostname 新名称 通常只修改当前运行时名称。云镜像还可能由 cloud-init 管理主机名,应检查其配置,避免重启后被覆盖。
查询系统完整信息
bash
uname -a
cat /etc/os-release前者查看内核与架构,后者查看发行版信息。
IP 地址与路由
bash
ip -br addr
ip route
ip -6 route
ip route get 1.1.1.1分别查看接口地址、IPv4 / IPv6 路由和到指定地址将采用的路由。存在 IP 地址并不意味着默认路由、DNS 或公网连接正常。
需要修改 IP 前先识别管理器:
bash
systemctl is-active NetworkManager
systemctl is-active systemd-networkd
command -v nmcli
command -v networkctl
command -v netplaninactive 或工具不存在不是必然故障,可能表示该系统使用另一套管理方式。按实际情况选择:
| 环境 | 查看现状 | 持久配置入口 |
|---|---|---|
| NetworkManager | nmcli connection show、nmcli device status | 对应连接配置,可用 nmcli connection edit |
| systemd-networkd | networkctl status | /etc/systemd/network/ 中的 .network 文件 |
| Netplan | sudo netplan get | /etc/netplan/ 中的 YAML,后端可能是上述任一管理器 |
| ifupdown | 检查接口文件与服务 | /etc/network/interfaces 及其 include 文件 |
/etc/sysconfig/network-scripts/ 与 network 服务只适用于使用旧式 network-scripts 的系统,不应作为通用 Linux 步骤。
域名映射与 DNS
本机静态映射由 /etc/hosts 提供,可使用 sudoedit /etc/hosts 编辑。示例:
text
192.0.2.10 example.test192.0.2.10 是文档示例地址,应替换成实际目标。检查系统名称解析:
bash
getent hosts example.test
cat /etc/resolv.conf使用 systemd-resolved 时,可额外运行 resolvectl status。/etc/resolv.conf 可能由网络管理器自动生成,不应未经确认直接覆盖。
网络服务管理
查看与当前环境对应的一项:
bash
systemctl status NetworkManager --no-pager
systemctl status systemd-networkd --no-pager修改网络配置可能中断 SSH,应预先准备云控制台或串口访问,并保留当前会话。Netplan 环境可先用 sudo netplan generate 检查生成过程,再使用 sudo netplan try 临时应用并按提示确认;超时回退后仍应核对磁盘配置与实际连接状态。其他环境遵循所属管理器的应用方法,不要盲目执行 service network restart。
变更后分别验证接口地址、默认路由、DNS、目标服务连接;确认配置已持久化后再安排重启验证。
防火墙设置
以下只适用于实际安装并使用 firewalld 的系统:
bash
systemctl status firewalld --no-pager
systemctl is-enabled firewalld
sudo firewall-cmd --list-allstatus 查看当前运行状态,is-enabled 查看是否配置为随启动启用,两者不能互相替代。服务启停和开机配置也需区分:
| 命令 | 作用 |
|---|---|
sudo systemctl start firewalld | 现在启动服务 |
sudo systemctl stop firewalld | 现在停止服务 |
sudo systemctl enable firewalld | 设置开机启用,不立即启动 |
sudo systemctl disable firewalld | 取消开机启用,不立即停止 |
排查服务状态还可使用:
bash
systemctl list-unit-files --state=enabled
systemctl --failed第一项列出开机启用的 unit,不代表它们此刻都在运行。端口不可达时应同时核对监听程序、主机防火墙和云安全组,而不是默认关闭防火墙。
Linux 学习路径
网络服务或端口异常时,可结合 Linux 进程管理 查找监听程序;需要回顾路径时,可返回 Linux 目录结构。