瑞克
Published on 2026-07-17 / 0 Visits
0
0

网络配置与排查

网络配置与排查

导读:如果把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传统以太网命名eth0eth1
ensXXsystemd可预测命名(PCI槽位)ens33ens160
enpXsYPCI总线+槽位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键操作

互动提问nmclinmtui 哪个更适合写在自动化脚本里?为什么?

方法三:直接编辑配置文件

配置文件路径:/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 / nmtuinetplan(Ubuntu)/ interfaces(Debian)
配置文件位置/etc/sysconfig/network-scripts/ifcfg-*/etc/netplan/*.yaml/etc/network/interfaces
配置格式KEY=VALUE 键值对YAML 或 类INI格式
生效命令nmcli connection up <name>netplan applysystemctl restart networking
服务管理systemctl restart NetworkManagersystemctl restart networkingsystemd-networkd
临时配置ip addr addip 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→域名)

互动提问nslookupdig 哪个输出信息更丰富?在脚本中你更倾向用哪个?

提示: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.confhosts: files dns 这一行决定了先查files(hosts文件)再查dns。


10 常用端口速查表

端口协议服务说明
20/21TCPFTP文件传输(20数据/21控制)
22TCPSSH远程安全登录
23TCPTelnet远程登录(明文,不推荐)
25TCPSMTP邮件发送
53TCP/UDPDNS域名解析
67/68UDPDHCP动态IP分配
80TCPHTTPWeb服务
110TCPPOP3邮件接收
123UDPNTP时间同步
143TCPIMAP邮件接收(比POP3更现代)
443TCPHTTPS加密Web服务
445TCPSMBWindows文件共享
993TCPIMAPS加密IMAP
995TCPPOP3S加密POP3
3306TCPMySQL数据库
5432TCPPostgreSQL数据库
6379TCPRedis缓存数据库
8080TCPHTTP-AltWeb替代端口/代理
8443TCPHTTPS-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 → 端口 → 抓包 → 连接状态"六步法,由浅入深,层层定位。


Comment