Linux 服务器网络配置与排错
Linux 服务器的网络问题在生产环境中出现频率极高:新机器上线连不上外网、突然丢包严重、DNS 解析异常、特定端口不通、流量不对称……这些问题如果没有系统化的配置和排查思路,往往会浪费大量时间。本文从现代 Linux(2025-2026 年主流发行版) 的网络配置方式入手,结合最实用的排错流程和命令,给出一套完整、可落地的方法论。适合云服务器、物理机、容器宿主机、Kubernetes 节点等多种场景。
一、现代 Linux 网络配置全景(不再用 ifconfig/route)
2025 年后,Linux 网络栈已经全面转向 iproute2 工具集(ip、ss、tc 等),旧的 net-tools(ifconfig、netstat、route)在大多数新发行版中已标记为 deprecated 或需额外安装。
主流配置后端对比:
| 发行版/场景 | 默认/推荐工具 | 配置文件位置 | 热加载支持 | 备注 |
|---|---|---|---|---|
| Ubuntu Server 20.04+ | Netplan | /etc/netplan/*.yaml | 是(netplan apply) | YAML 声明式,最友好 |
| Ubuntu Desktop | NetworkManager | 通过 nmcli / GUI | 是 | 适合有桌面的环境 |
| RHEL 9 / Rocky / Alma | NetworkManager + nmcli | /etc/NetworkManager/system-connections/ | 是 | 企业级首选 |
| Debian 12+ / 服务器 | systemd-networkd | /etc/systemd/network/*.network | 是 | 轻量、无 GUI 依赖 |
| 云厂商镜像(AWS/GCP/Azure) | 通常 Netplan 或 systemd-networkd | 视镜像而定 | — | 常预配置 cloud-init |
核心原则:先用 ip 命令临时调试,确认方案后再写入持久化配置文件。
1. 临时配置(生产常用,秒级生效)
# 查看所有接口状态(现代 ifconfig)
ip -c link show # -c 带颜色,更易读
ip -c addr show
# 启用/禁用接口
ip link set eth0 up
ip link set eth0 down
# 配置静态 IP(临时)
ip addr add 192.168.1.100/24 dev eth0
ip addr del 192.168.1.100/24 dev eth0
# 添加默认路由
ip route add default via 192.168.1.1 dev eth0
# 查看路由表
ip route show
ip route get 8.8.8.8 # 看去往某个 IP 的实际路径2. 永久配置示例(三种主流方式)
Netplan(Ubuntu Server 主流)
/etc/netplan/01-netcfg.yaml 示例:
network:
version: 2
renderer: networkd # 或 NetworkManager
ethernets:
enp1s0: # 接口名(ip link 查看)
dhcp4: no
addresses: [10.0.0.5/24]
routes:
- to: default
via: 10.0.0.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]应用:sudo netplan generate && sudo netplan apply
systemd-networkd(轻量首选)
/etc/systemd/network/10-eth0.network:
[Match]
Name=eth0
[Network]
Address=10.0.0.5/24
Gateway=10.0.0.1
DNS=8.8.8.8 1.1.1.1重启服务:sudo systemctl restart systemd-networkd
nmcli(RHEL 系 / NetworkManager)
nmcli con add type ethernet ifname eth0 con-name eth0 ipv4.method manual ipv4.addresses 10.0.0.5/24 ipv4.gateway 10.0.0.1 ipv4.dns "8.8.8.8 1.1.1.1"
nmcli con up eth0二、网络排错黄金流程(5-15 分钟定位 90% 问题)
遵循 “从近到远、从底层到上层” 的分层思路。
步骤 1:确认物理/链路层(1 分钟)
ip link show eth0 # 看 state 是否 UP,LOWER_UP 表示物理链路 OK
ethtool eth0 # 查看网卡协商速率、duplex 是否正常
dmesg | grep -i eth # 看网卡驱动加载是否有错误常见问题:网线松了、交换机端口 shutdown、协商失败(千兆 vs 百兆)。
步骤 2:确认 IP 配置层(2 分钟)
ip addr show # 有没有 IP?是 DHCP 还是静态?
ip route show # 默认路由是否存在?正确吗?
ping 127.0.0.1 # 本地 TCP/IP 栈是否正常
ping <本机 IP> # 本机 IP 是否可达
ping <同网段其他 IP> # 内网二层是否通
ping <网关 IP> # 默认网关是否可达无 IP → 检查 DHCP(dhclient eth0)或配置文件错误。
步骤 3:路由与外网连通性(3 分钟)
# 看去往外网的实际路径
ip route get 8.8.8.8
# 实时路径 + 丢包统计(神器)
mtr -r -c 100 8.8.8.8
traceroute -n 8.8.8.8 # -n 不解析域名,速度快丢包从第几跳开始 → 基本能定位是本机房出口、运营商节点还是目标侧。
步骤 4:DNS 解析排查(最常见痛点)
cat /etc/resolv.conf # DNS 服务器是否正确?
nslookup www.google.com 8.8.8.8 # 指定公共 DNS 测试
dig +short www.google.com # 更详细/etc/resolv.conf 被覆盖?常见于 systemd-resolved、NetworkManager、cloud-init。
临时修复:echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
步骤 5:传输层 / 服务端口(端口不通)
ss -tuln # 查看监听端口(现代 netstat)
ss -ant # 所有 TCP 连接状态
# 测试远程端口
nc -zv 目标IP 443 # 成功返回 succeeded!
telnet 目标IP 80 # 老工具,但很多机器还有
curl -v https://目标域名 # 看完整握手过程步骤 6:防火墙 / SELinux / 云安全组(80% 的“端口不通”元凶)
# firewalld(RHEL/CentOS)
firewall-cmd --list-all
firewall-cmd --zone=public --add-port=443/tcp --permanent
# ufw(Ubuntu)
ufw status verbose
# iptables(老系统或自定义)
iptables -L -n -v
# SELinux 端口上下文(自定义端口常见坑)
semanage port -l | grep http
semanage port -a -t http_port_t -p tcp 8080
# 云厂商安全组 / 网络 ACL → 控制台检查(非服务器命令)步骤 7:抓包确认(终极手段)
tcpdump -i eth0 -nn host 8.8.8.8 # 看是否有请求发出/返回
tcpdump -i any port 443 -nn -c 50 # 抓 HTTPS 流量常见现象:
- SYN 发出无响应 → 防火墙丢包 / 目标不存活
- SYN-ACK 回来但 ACK 没发 → 本机防火墙阻挡
- 重传严重 → MTU 问题 / 网络拥塞
三、高频场景快速定位表
| 现象 | 优先检查命令组合 | 常见根因 |
|---|---|---|
| 完全无网络 | ip link / ip addr / ping 127.0.0.1 | 接口 down / 驱动问题 |
| 内网通外网不通 | ip route / ping 网关 / mtr 8.8.8.8 | 默认路由丢失 / NAT / 出口防火墙 |
| 域名解析失败 | cat /etc/resolv.conf / dig @8.8.8.8 | DNS 配置错 / 53 端口被阻 |
| 端口不通(服务已 listen) | ss -tuln / nc -zv / firewall-cmd --list-all | 防火墙 / SELinux / 云安全组 |
| 间歇性丢包 / 高延迟 | mtr -r / tcpdump / sar -n DEV | MTU 不匹配 / 网卡 offload / 运营商 |
| 连接数爆 / SYN 队列满 | ss -s / sysctl net.ipv4.tcp_max_syn_backlog | TIME_WAIT 过多 / backlog 太小 |
四、生产建议与最佳实践
- 统一配置模板:把 Netplan / systemd-networkd 的 yaml / network 文件做成 ansible 模板,避免手动改错。
- 监控先行:Prometheus + node_exporter 的 netclass 采集丢包、重传、错误包。
- DNS 冗余:至少配置 2-3 个 DNS(8.8.8.8 + 1.1.1.1 + 114.114.114.114)。
- MTU 一致性:云环境常见坑,建议统一 1500 或 9000(jumbo frame)。
- 日志保留:auditd 监控网络相关 syscall,rsyslog 远程备份防火墙日志。
结语
Linux 网络配置与排错的核心是“结构化 + 工具链”。记住这套流程:物理 → IP → 路由 → DNS → 端口 → 防火墙 → 抓包,大多数问题都能在 10-20 分钟内定位。
生产环境中,网络问题往往不是“配置错了”,而是“忘了某个环节”。养成每次改网络后立刻 ping + mtr + curl 验证的习惯,能避免 80% 的上线事故。
欢迎留言分享你最近一次网络故障的真实案例,是 DNS 坑了你还是安全组写反了?我们一起复盘。
