网络配置与排查
导读:如果把Linux服务器比作一座城堡,那网络配置就是城堡的大门和道路——没有它,再强大的服务器也只是孤岛。本章将带你从"认识网卡"开始,逐步掌握IP地址配置、DNS解析、路由排查和网络故障诊断的全套技能。
1 网卡:服务器的"网络接口"
生活类比
网卡(Network Interface Card, NIC)就像你家的门牌号。快递员(数据包)要根据门牌号(IP地址)才能找到你家(服务器)。每块网卡都有自己的MAC地址(物理地址,相当于身份证号)和IP地址(逻辑地址,相当于收件地址)。
查看网卡信息
# 查看所有网卡及其状态
ip addr show # 推荐,现代Linux通用
ip link show # 只看链路层状态(UP/DOWN)
# 老式命令(部分新系统已默认不安装)
ifconfig -a # 需要安装 net-tools 包
互动提问:你的电脑上执行
ip addr后能看到几个网卡?lo是什么?提示:
lo是回环接口(loopback),地址固定为127.0.0.1,就像"给自己寄信"。
常见网卡命名规则
| 命名格式 | 含义 | 示例 |
|---|---|---|
ethX | 传统以太网命名 | eth0、eth1 |
ensXX | systemd可预测命名(PCI槽位) | ens33、ens160 |
enpXsY | PCI总线+槽位 | enp0s3 |
lo | 回环接口 | lo |
2 配置IP地址——RHEL系(CentOS/RHEL/Rocky/Alma)
问题场景
新装了一台CentOS服务器,需要配置静态IP地址才能上网和远程管理。
方法一:nmcli(推荐,命令行方式)
# 查看当前所有连接
nmcli connection show
# 修改IP地址为静态
nmcli connection modify "ens33" \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "114.114.114.114,8.8.8.8" \
connection.autoconnect yes
# 重启连接使其生效
nmcli connection up "ens33"
方法二:nmtui(图形化文本界面)
nmtui # 弹出文本菜单,用方向键和Tab键操作
互动提问:
nmcli和nmtui哪个更适合写在自动化脚本里?为什么?
方法三:直接编辑配置文件
配置文件路径:/etc/sysconfig/network-scripts/ifcfg-<网卡名>
vi /etc/sysconfig/network-scripts/ifcfg-ens33
典型配置内容:
TYPE=Ethernet
BOOTPROTO=static # static=静态 dhcp=动态 none=不使用
NAME=ens33
DEVICE=ens33
ONBOOT=yes # 开机是否自动启用
IPADDR=192.168.1.100
NETMASK=255.255.255.0 # 或 PREFIX=24
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
# 使配置生效
systemctl restart NetworkManager
# 或
nmcli connection reload && nmcli connection up ens33
方法四:ip命令临时配置(重启失效)
ip addr add 192.168.1.100/24 dev ens33
ip link set ens33 up
ip route add default via 192.168.1.1
注意:
ip addr add配置的地址重启后丢失,仅用于临时测试。
3 配置IP地址——Debian系(Ubuntu/Debian)
方法一:Netplan(Ubuntu 18.04+推荐)
配置文件路径:/etc/netplan/*.yaml
vi /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1 # 旧版写法
# routes: # 新版写法(Ubuntu 22.04+)
# - to: default
# via: 192.168.1.1
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
# 应用配置(立即生效,无需重启)
netplan apply
# 如果想先测试(120秒后自动回滚,防止远程断连)
netplan try
互动提问:YAML格式对缩进非常敏感,你知道应该用空格还是Tab来缩进吗?
答案:只能用空格,用Tab会导致解析错误。
方法二:interfaces文件(Debian传统方式)
配置文件路径:/etc/network/interfaces
vi /etc/network/interfaces
auto ens33
iface ens33 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 114.114.114.114 8.8.8.8
# 使配置生效
systemctl restart networking
# 或
ifdown ens33 && ifup ens33
方法三:ip命令临时配置(与RHEL系完全相同)
ip addr add 192.168.1.100/24 dev ens33
ip link set ens33 up
ip route add default via 192.168.1.1
4 各发行版网络管理方式对比
| 对比项 | RHEL系(CentOS/RHEL/Rocky) | Debian系(Ubuntu/Debian) |
|---|---|---|
| 推荐工具 | nmcli / nmtui | netplan(Ubuntu)/ interfaces(Debian) |
| 配置文件位置 | /etc/sysconfig/network-scripts/ifcfg-* | /etc/netplan/*.yaml 或 /etc/network/interfaces |
| 配置格式 | KEY=VALUE 键值对 | YAML 或 类INI格式 |
| 生效命令 | nmcli connection up <name> | netplan apply 或 systemctl restart networking |
| 服务管理 | systemctl restart NetworkManager | systemctl restart networking 或 systemd-networkd |
| 临时配置 | ip addr add | ip addr add(相同) |
| GUI工具 | nmtui(文本图形) | netplan try(带超时回滚) |
小测验:如果你拿到一台Rocky Linux 9服务器,应该去哪个目录修改网络配置?
答案:
/etc/sysconfig/network-scripts/,或者直接用nmcli命令。
5 DNS配置与域名解析
生活类比
DNS就像电话簿——你记得朋友的名字(域名 www.baidu.com),但打电话需要号码(IP地址 180.101.50.242)。DNS服务器就是帮你"查号"的服务。
/etc/resolv.conf——DNS客户端配置
cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114 # 首选DNS
nameserver 8.8.8.8 # 备用DNS
search localdomain # 默认搜索域
注意:此文件通常由 NetworkManager 或 netplan 自动管理,手动修改可能被覆盖。如需手动固定,可设置
chattr +i /etc/resolv.conf(加锁,慎用)。
nslookup——交互式域名查询
nslookup www.baidu.com # 基本查询
nslookup -type=mx qq.com # 查询邮件记录
nslookup -type=ns baidu.com # 查询NS记录
# 交互式模式
nslookup
> server 8.8.8.8 # 指定DNS服务器
> www.taobao.com
> exit
dig——更强大的DNS查询工具
dig www.baidu.com # 基本查询
dig www.baidu.com +short # 只显示IP
dig mx qq.com # 查询邮件交换记录
dig ns baidu.com # 查询名称服务器记录
dig @8.8.8.8 www.google.com # 指定DNS服务器查询
dig -x 114.114.114.114 # 反向解析(IP→域名)
互动提问:
nslookup和dig哪个输出信息更丰富?在脚本中你更倾向用哪个?提示:
dig输出更结构化,适合脚本解析;nslookup交互更友好,适合手动排查。
6 路由配置
生活类比
路由器就像高速公路的立交桥——它告诉数据包"下一个路口往哪走"。没有正确的路由,数据包就像迷路的快递,永远到不了目的地。
查看路由表
ip route show # 推荐
route -n # 老式命令(需要 net-tools)
输出示例:
default via 192.168.1.1 dev ens33 proto static metric 100
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.100 metric 100
解读:
- 第1行:默认网关是
192.168.1.1,所有非本网段的流量都走这里 - 第2行:
192.168.1.0/24是本机直连网段,直接通过ens33发送
添加/删除路由
# 添加默认网关
ip route add default via 192.168.1.1
# 添加到特定网段的路由
ip route add 10.0.0.0/8 via 192.168.1.254
# 删除路由
ip route del 10.0.0.0/8
# 清空路由表(危险!会断网)
ip route flush all
traceroute——追踪数据包路径
traceroute www.baidu.com # 经典工具
tracepath www.baidu.com # 不依赖ICMP,穿透防火墙能力更强
mtr www.baidu.com # 实时监控(需要安装),最推荐
输出示例:
1 192.168.1.1 1.2 ms 1.1 ms 1.0 ms ← 你的网关
2 10.0.0.1 5.3 ms 5.1 ms 5.0 ms ← 运营商第一跳
3 202.97.12.1 15.2 ms 14.8 ms 15.0 ms ← 运营商骨干网
...
8 www.baidu.com 25.1 ms 24.9 ms 25.0 ms ← 目标到达
互动提问:如果 traceroute 中间某几跳显示
* * *,说明什么?答案:说明中间路由器禁止了ICMP响应(防火墙拦截),不一定代表网络故障。
7 网络排查六步法
排查流程图
ping 目标 ← 第1步:能否到达?
│
├── 不通 → arp -a ← 第2步:能否解析MAC地址?(局域网内)
│
├── 能通但很慢 → traceroute ← 第3步:哪个节点延迟高?
│
└── 能通但服务不可用
│
├── telnet/nc 目标 端口 ← 第4步:端口是否开放?
│
├── tcpdump 抓包分析 ← 第5步:数据包正常吗?
│
└── ss / netstat 查看连接 ← 第6步:本机端口状态如何?
第1步:ping——测试连通性
ping www.baidu.com # 持续ping(Ctrl+C停止)
ping -c 4 www.baidu.com # 只发4个包
ping -c 4 -i 0.2 baidu.com # 间隔0.2秒
ping -s 1400 192.168.1.1 # 指定包大小(测MTU问题)
ping6 ::1 # ping IPv6回环地址
常见结果分析:
| 现象 | 可能原因 |
|---|---|
| 正常回复 | 网络通畅 |
Destination Host Unreachable | 本机无路由或ARP失败 |
Request timeout | 对方防火墙丢弃ICMP或网络不通 |
Network is unreachable | 本机没有到目标网段的路由 |
第2步:arp——查看MAC地址映射
arp -a # 查看ARP缓存表
arp -n # 数字显示,不做DNS反解
ip neigh show # 推荐,现代替代命令
互动提问:如果你
ping同网段另一台机器不通,但arp -a里能看到对方的MAC地址,说明问题出在哪一层?答案:网络层(第3层)可能有问题——对方的防火墙可能拦截了ICMP。链路层(第2层)是通的,因为ARP能解析出MAC。
第3步:traceroute——定位网络瓶颈
(见7.6节详细说明)
第4步:telnet / nc——测试端口连通性
# telnet方式(几乎所有Linux都预装)
telnet 192.168.1.100 80 # 测试HTTP端口
telnet 192.168.1.100 22 # 测试SSH端口
# 连接后输入 Ctrl+] 然后 quit 退出
# nc方式(更强大,推荐)
nc -zv 192.168.1.100 80 # -z扫描 -v显示详情
nc -zv 192.168.1.100 1-1000 # 扫描端口范围
nc -zv 192.168.1.100 22 80 443 # 测试多个端口
第5步:tcpdump——抓包分析
# 抓取指定网卡的流量
tcpdump -i ens33
# 只抓与某IP相关的包
tcpdump -i ens33 host 192.168.1.100
# 只抓某端口的包
tcpdump -i ens33 port 80
# 抓100个包后保存为文件
tcpdump -i ens33 -c 100 -w /tmp/capture.pcap
# 读取抓包文件
tcpdump -r /tmp/capture.pcap
提示:抓到的
.pcap文件可以用 Wireshark 图形化工具打开分析,非常适合排查复杂网络问题。
第6步:ss / netstat——查看本机端口与连接
# ss(推荐,速度更快)
ss -tlnp # TCP监听端口 + 进程名
ss -ulnp # UDP监听端口 + 进程名
ss -tanp # 所有TCP连接(含已建立的)
ss -s # 连接统计摘要
# netstat(老式命令)
netstat -tlnp # 功能同上
netstat -tulnp # TCP+UDP监听端口
netstat -anp | grep ESTABLISHED # 查看已建立的连接
输出示例(ss -tlnp):
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* sshd
LISTEN 0 128 [::]:80 [::]:* httpd
LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* mysqld
互动提问:如果MySQL监听在
127.0.0.1:3306,远程客户端能连接吗?答案:不能。
127.0.0.1表示只监听本机回环地址,远程客户端无法连接。需要改为0.0.0.0:3306或指定网卡IP。
8 防火墙状态查看
firewalld(RHEL系默认)
systemctl status firewalld # 查看服务状态
firewall-cmd --state # 查看运行状态
firewall-cmd --list-all # 查看所有规则
firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放80端口
firewall-cmd --reload # 重载规则
ufw(Ubuntu默认)
ufw status # 查看状态
ufw status verbose # 详细状态
ufw enable # 启用防火墙
ufw allow 80/tcp # 开放80端口
ufw deny 22/tcp # 禁止22端口
iptables(底层通用)
iptables -L -n # 查看所有规则
iptables -L -n --line-numbers # 带行号显示
iptables -t nat -L -n # 查看NAT规则
互动提问:如果服务器上的网站无法访问,你第一步检查什么?
答案:先
ping看是否通,再ss -tlnp看Web服务是否在运行,最后检查防火墙是否放行了80/443端口。
9 hosts文件
生活类比
/etc/hosts 就像你自己手写的通讯录——在查电话簿(DNS)之前,先看看自己记的号码。系统解析域名时,先查 hosts 文件,再查 DNS。
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain
::1 localhost localhost.localdomain
192.168.1.100 webserver.local webserver # 自定义映射
常见用途:
- 开发测试:把
dev.example.com指向本机127.0.0.1 - 屏蔽网站:把广告域名指向
127.0.0.1 - 内网互访:给内网服务器起好记的名字
# 添加一条hosts记录
echo "192.168.1.100 myserver.local myserver" >> /etc/hosts
# 测试hosts是否生效
ping myserver
注意:
/etc/nsswitch.conf中hosts: files dns这一行决定了先查files(hosts文件)再查dns。
10 常用端口速查表
| 端口 | 协议 | 服务 | 说明 |
|---|---|---|---|
| 20/21 | TCP | FTP | 文件传输(20数据/21控制) |
| 22 | TCP | SSH | 远程安全登录 |
| 23 | TCP | Telnet | 远程登录(明文,不推荐) |
| 25 | TCP | SMTP | 邮件发送 |
| 53 | TCP/UDP | DNS | 域名解析 |
| 67/68 | UDP | DHCP | 动态IP分配 |
| 80 | TCP | HTTP | Web服务 |
| 110 | TCP | POP3 | 邮件接收 |
| 123 | UDP | NTP | 时间同步 |
| 143 | TCP | IMAP | 邮件接收(比POP3更现代) |
| 443 | TCP | HTTPS | 加密Web服务 |
| 445 | TCP | SMB | Windows文件共享 |
| 993 | TCP | IMAPS | 加密IMAP |
| 995 | TCP | POP3S | 加密POP3 |
| 3306 | TCP | MySQL | 数据库 |
| 5432 | TCP | PostgreSQL | 数据库 |
| 6379 | TCP | Redis | 缓存数据库 |
| 8080 | TCP | HTTP-Alt | Web替代端口/代理 |
| 8443 | TCP | HTTPS-Alt | 加密Web替代端口 |
记忆口诀:21传文件,22远程登,25发邮件,53查域名,80看网页,443加密行,3306数据库。
11 实战案例
案例1:服务器无法上网
问题描述:新装的CentOS 7服务器,ping www.baidu.com 提示 Name or service not known。
排查步骤:
# 1. ping IP地址(跳过DNS)
ping -c 3 114.114.114.114
# 如果通 → 网络层没问题,是DNS问题
# 如果不通 → 继续排查网络层
# 2. 检查DNS配置
cat /etc/resolv.conf
# 发现文件为空或nameserver不对
# 3. 修复DNS
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
# 4. 验证
ping -c 3 www.baidu.com
案例2:远程SSH连不上
问题描述:ssh root@192.168.1.100 连接超时。
排查步骤:
# 1. 先ping看网络通不通
ping -c 3 192.168.1.100
# 2. 测试SSH端口
nc -zv 192.168.1.100 22
# 3. 如果端口不通,可能原因:
# - SSH服务未启动:systemctl status sshd
# - 防火墙拦截:firewall-cmd --list-all
# - IP地址配错:ip addr show
# 4. 如果端口通但连不上:
# - 检查sshd_config:是否禁止了root登录?
# - 检查密码是否正确
# - 检查密钥认证配置
案例3:网站访问很慢
# 1. 查看到目标服务器的路由
traceroute www.example.com
# 2. 找到延迟最高的节点
# 假设第5跳延迟突然从5ms跳到200ms
# 3. 查看DNS解析是否正常
dig www.example.com +short
# 4. 抓包分析是否有重传
tcpdump -i ens33 host www.example.com -c 50
运维常用命令精选
# ===== 网络信息查看 =====
ip addr show # 查看IP地址
ip link show # 查看网卡状态
ip route show # 查看路由表
ss -tlnp # 查看监听端口
# ===== 网络配置 =====
nmcli connection show # RHEL:查看连接
nmcli connection modify "ens33" ipv4.addresses 192.168.1.100/24 # RHEL:改IP
netplan apply # Ubuntu:应用配置
systemctl restart NetworkManager # RHEL:重启网络服务
systemctl restart networking # Debian:重启网络服务
# ===== DNS相关 =====
cat /etc/resolv.conf # 查看DNS配置
dig www.baidu.com +short # 域名解析
nslookup www.baidu.com # 域名查询
# ===== 网络排查 =====
ping -c 4 www.baidu.com # 测试连通性
traceroute www.baidu.com # 追踪路由
nc -zv 192.168.1.100 80 # 测试端口
tcpdump -i ens33 -c 100 # 抓包
ss -tanp # 查看连接状态
# ===== 防火墙 =====
firewall-cmd --list-all # RHEL:查看防火墙规则
ufw status # Ubuntu:查看防火墙状态
iptables -L -n # 底层iptables规则
趣味命令
# 1. curl获取公网IP(看看你的出口IP是什么)
curl ifconfig.me
curl ip.sb
# 2. curl查天气(在终端里看天气预报!)
curl wttr.in/Beijing # 北京的天气
curl wttr.in/Shanghai # 上海的天气
curl wttr.in/Moon # 月相(真的!)
curl wttr.in # 自动定位
# 3. 查看本机所有网络接口的统计信息
ip -s link
# 4. 实时监控网络流量(需要安装nload)
# yum install nload 或 apt install nload
nload ens33
# 5. 用ASCII art看路由追踪(需要安装mtr)
mtr --curses www.baidu.com
# 6. 查看哪些程序在占用网络
lsof -i -n -P # 列出所有网络连接及对应进程
# 7. 生成随机MAC地址(虚拟机常用)
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'
# 8. 快速搭建一个临时HTTP服务器(分享文件超方便)
cd /path/to/share
python3 -m http.server 8888
# 然后在浏览器访问 http://你的IP:8888 即可下载文件
小结:网络配置是运维的基本功。记住RHEL系用
nmcli+/etc/sysconfig/network-scripts/,Debian系用netplan+/etc/netplan/*.yaml。排查问题遵循"ping → arp → traceroute → 端口 → 抓包 → 连接状态"六步法,由浅入深,层层定位。