Linux网络排查实战:配置、连通性、性能与故障一次讲透

发布时间:2026/10/8 3:46:04
Linux网络排查实战:配置、连通性、性能与故障一次讲透 刚入行那会儿我接到最多的求助就是“服务器连不上网了帮我看看。”后来带新人发现绝大部分Linux网络问题不是玄学而是基础没理顺——配置文件在哪、路由表怎么读、端口通不通怎么验证、抓包怎么看。打开热搜词列表“linux常用命令”“linux面试题测试”“网络运维7天上岗pdf”这几个词挤在一起说明大家真正要的是能上手的排查套路和配置方法不是背概念。这篇文章我就按实战的经验来写不铺开讲理论只讲Linux网络里你大概率会碰到的场景网卡怎么配、路由怎么走、端口怎么查、性能怎么测、故障怎么排。文章里所有命令都基于主流发行版RHEL系和Debian系会分开说明。适合刚接触Linux运维的人也适合那些已经会敲命令但遇到问题还是没思路的朋友。1. 把Linux网络拆成三块再也不用看到报错就慌1.1 热词背后大家都在找什么看了一圈和“Linux网络”相关的热搜词有“linux常用命令大全”有“网络通信协议”有“linux运维故障案例”还有“网络域隔离-vlan划分与acl配置”。这些词放在一起其实暴露了一个共同焦虑大家不缺文档缺的是能把命令、协议、故障串起来的那根线。更典型的是“网络运维7天上岗pdf”这种词。不可否认运维这行确实存在“快速上手”的路径但如果你只记命令不记思路遇到一个新报错就抓瞎。我之前带过一个新人他能把ping、netstat、ifconfig背得很熟但服务器上不了网的时候他先ping网关通了然后就没有然后了。问题出在哪出在他不知道ping通网关之后还要查什么。所以这篇文章我会把Linux网络拆成三条线配置、连通性排查、性能与故障。配置是地基连通性排查是日常性能和故障是进阶。三条线都捋顺了再怪的报错你也能找到下手的位置。1.2 链路层、网络层、传输层排查顺序就是分层顺序很多教科书会把OSI七层模型讲得让人想睡觉但排查网络问题的时候分层思维真的能救命。我自己总结的经验是先看链路再看网络最后看传输。链路层说白了就是网卡有没有起来、网线有没有插好、交换机端口有没有UP。你可以在Linux里用ip link看到网卡状态出现state UP说明链路正常如果看到state DOWN或者NO-CARRIER大概率是物理链路问题。网络层要看IP、路由、网关传输层要看端口和TCP状态。很多人遇到“连不上数据库”第一反应就是业务代码出了问题其实你先ss -lntp看一眼端口在不在听就知道是不是服务压根没起来。分层排查最大的好处是能快速缩小范围。有一次同事反馈某台服务器“所有外部请求都超时”我登录后先看链路正常再看路由表发现默认网关被清掉了两分钟定位完。如果按“先重启再重装”的老路子至少折腾半小时。1.3 配置、运维、性能三类场景的定位结合热词里反复出现的“linux镜像安装”“国产linux”“嵌入式linux项目”我给你把目标场景划一下。如果你是做运维的重点在配置和故障排查静态IP、DNS、路由、端口是每天都要摸的东西。如果你是做开发的重点在连通性验证和抓包分析至少得搞清楚TCP握手怎么看、HTTP请求为什么慢。如果你是刚接触Linux的学生或者转行者那就从虚拟机里搭一套Linux开始把网卡配好、把SSH连上再慢慢玩防火墙规则。不管哪种角色有个词特别值得注意网络拓扑图。很多人忽略拓扑出了问题只能一台一台试。我建议你哪怕只是虚拟机实验环境也要在文档里画一张简单的拓扑IP段、网关、防火墙规则列清楚。真出问题时这张图能帮你省下大量时间。2. 网络配置静态IP、多网卡、VLAN这些基础操作要玩熟2.1 先学会用ip命令看家底老教程还在教ifconfig但包括CentOS 7、Ubuntu 18.04往后的系统ifconfig已经不再是默认安装的工具了。我更推荐你把ip命令练熟它是iproute2包里的工具几乎每个发行版都自带。看IP地址用ip addr看路由用ip route看邻居ARP缓存用ip neigh看链路状态用ip link。这几个命令的组合就能覆盖90%的日常查看需求。比如你想知道当前机器有没有拿到IP、网卡叫什么名字、网关指向哪一行ip addr ip route就全出来了。有个细节容易被忽略ip命令的缩写功能。ip a等同于ip addrip r等同于ip route。写脚本或者快速排查的时候能省不少敲键盘的时间但教学文档里我还是建议写全称方便自己回忆也方便别人看懂。2.2 手写配置还是用nmcli取决于你的发行版很多新手一开始会纠结到底改配置文件还是用NetworkManager的命令行工具nmcli我的判断标准很简单如果服务器装的是带图形界面的发行版或者你用NetworkManager管理网络那就用nmcli它能把配置原子化地写进配置文件不容易出错。如果你管的是纯命令行服务器而且习惯直接改配置文件那也没问题关键是改完要记得重启网络服务或者用nmcli connection reload加载。这里必须提醒一个大坑CentOS/RHEL 8之后网络配置默认由NetworkManager管理如果你手动改了/etc/sysconfig/network-scripts/ifcfg-eth0但没通知NetworkManager重启后配置可能被覆盖或者不生效。正确做法是改完文件后执行nmcli connection reload或者干脆用nmcli改省心得多。Ubuntu/Debian系的主配置文件是/etc/network/interfaces但新版本默认走netplan配置文件在/etc/netplan/*.yaml。netplan的好处是配置清晰、支持多网卡、支持VLAN坏处是改完必须netplan apply而且YAML的缩进错了直接报错。我见过有人把netplan配置的缩进写乱导致整台机器网络瘫痪只能进单用户模式改回来的惨案。2.3 静态IP配置示例RHEL系和Debian系先给RHEL系比如Rocky Linux、AlmaLinux、CentOS Stream的示例。假设网卡叫ens160IP是192.168.10.20/24网关192.168.10.1DNS用223.5.5.5我通常建议用nmcli直接改nmcli connection modify ens160 ipv4.method manual \ ipv4.addresses 192.168.10.20/24 \ ipv4.gateway 192.168.10.1 \ ipv4.dns 223.5.5.5,114.114.114.114 nmcli connection up ens160如果你偏好手写配置文件那就编辑/etc/sysconfig/network-scripts/ifcfg-ens160DEVICEens160 BOOTPROTOstatic ONBOOTyes IPADDR192.168.10.20 PREFIX24 GATEWAY192.168.10.1 DNS1223.5.5.5 DNS2114.114.114.114Ubuntu/Debian系用netplan配置文件类似这样network: version: 2 ethernets: ens160: dhcp4: false addresses: - 192.168.10.20/24 routes: - to: default via: 192.168.10.1 nameservers: addresses: [223.5.5.5, 114.114.114.114]写完执行sudo netplan apply。注意如果这台机器原来是用DHCP拿地址的改成静态IP前一定要确认IP没被别的机器占用否则会出现IP冲突表现就是网络时通时断特别难查。2.4 多网卡与bond/VLAN网络域隔离不是高深东西热搜里有个“网络域隔离-vlan划分与acl配置”听着吓人实际拆开就是三件事把网络分成多个广播域VLAN、让Linux的网卡能同时走多个VLAN、再加上访问控制规则。先铺垫一个基础为什么需要VLAN。假设你有一台物理服务器上面跑了生产数据库和内部测试系统如果不做隔离测试环境的一个广播风暴就可能拖垮生产网络。VLAN可以把物理网络在逻辑上切成互不相通的两个域配合ACL控制谁能访问谁。在Linux上给物理网卡添加VLAN子接口很简单。先用ip命令临时验证ip link add link eth0 name eth0.10 type vlan id 10 ip addr add 192.168.10.2/24 dev eth0.10 ip link set eth0.10 up但这种方式重启就没了要长期生效建议写成配置文件。RHEL系在ifcfg-eth0.10里写VLANyesDebian系在/etc/network/interfaces里写vlan-raw-device eth0netplan里更简单network: version: 2 ethernets: eth0: dhcp4: false vlans: eth0.10: id: 10 link: eth0 addresses: [192.168.10.2/24]多网卡bond则是把两块或者多块物理网卡绑成一个逻辑网卡目的要么是增加带宽要么是做冗余。早期bonding配置很折腾现在NetworkManager里一条命令就能搞定nmcli connection add type bond con-name bond0 ifname bond0 bond.options modeactive-backup,miimon100 nmcli connection add type ethernet con-name bond0-port1 ifname eno1 master bond0 nmcli connection add type ethernet con-name bond0-port2 ifname eno2 master bond0这里重点提醒bond的mode选择不是随意的。active-backup适合普通服务器一块网卡干活另一块备用802.3ad需要交换机支持LACP适合高性能场景。很多新手上来就选balance-rr如果交换机没做相应配置整体网络反而会丢包。2.5 改完配置不生效常见坑位配置改完不生效是Linux网络里出现频率最高的问题之一。我来给你列一下我踩过的坑和见过别人踩的坑。第一个坑是NetworkManager接管了配置但你不知道。你辛辛苦苦改了/etc/resolv.conf结果系统重启后DNS配置又被NetworkManager重置了。现在很多发行版的/etc/resolv.conf是软链接指向/run/systemd/resolve/stub-resolv.conf你直接改那个文件没用得用resolvectl dns或者改netplan配置。第二个坑是系统里装了多套网络管理工具。有些云镜像默认装了NetworkManager和systemd-networkd两套同时跑互相抢网卡。排查这类问题看服务状态就行systemctl status NetworkManager和systemctl status systemd-networkd把不用的那个停掉并禁用。第三个坑是防火墙。配置看起来全对IP也通了但端口就是连不上结果发现firewalld把端口挡了。改完网络配置顺手看一下firewall-cmd --list-all或者直接测试一下服务端口通不通能省很多事。3. 连通性排查ping通不代表没问题3.1 从ping开始但别只信pingping是所有人上手Linux网络用的第一个命令但我要说一句ping通了只能代表ICMP协议在这个链路上是通的不能代表你的业务端口是通的。我见过最典型的场景服务器之间ping全都通但应用A访问应用B的8080端口就是超时最后发现是防火墙只放行了ICMP业务端口被拦了。所以正确的排查姿势是把ping当作第一步而不是最后一步。先ping本机IP确认网卡和协议栈工作正常再ping网关确认到本网段的链路没问题然后ping远端IP确认跨网段路由通不通最后用telnet或者nc测业务端口。走完这一整套问题基本能定位在一层里。3.2 路径探测mtr比traceroute好用traceroute这个命令有点老态龙钟了输出看着费劲而且有些网络设备会丢弃UDP探测包导致中间路径全是*。我更推荐mtr它把ping和traceroute结合起来不仅能看路径上每一跳的延迟还能统计丢包率排查“时通时断”特别管用。比如你访问某个服务感觉特别慢跑一下mtr -rw 10.20.30.40输出会从第一跳一直列到目标哪个中间节点延迟高、丢包多一眼就能看见。如果是跨机房或者跨运营商访问出问题mtr是最快的甩锅工具先确定是哪一段网络质量差再决定是换线路还是绕路由。这里有个细节值得说mtr默认使用的探测包类型和你的Linux发行版有关有些版本会用ICMP有些会用UDP。如果目标设备禁止了某种探测包输出全是问号这时候可以加-u或者-I参数换包类型试试。3.3 端口连通性ss、nc、telnet怎么配合排查端口问题我通常三件套配合用ss看本机监听状态nc做端口连通测试telnet做老牌但有时候绕不开的测试工具。先看本机端口有没有在监听ss -lntp-l表示监听中的端口-n不做DNS解析直接显示IP和端口-t只看TCP-p显示哪个进程在监听。这个命令输出里的Local Address:Port字段是核心如果服务配置的监听地址是127.0.0.1那外部机器当然连不上只能本机访问。从另一台机器测试端口连通性最直接的是ncnc -vz 192.168.10.20 8080-v是输出详细过程-z表示只扫描端口不发送数据。如果看到succeeded说明端口网络层是通的如果没有输出或者提示Connection refused说明端口没在监听或者被防火墙挡了。telnet之所以还留着是因为某些中间设备只允许TCP SYN探测而nc -z的行为在某些系统上会发完整的TCP握手再关闭二者有细微差别。但说实话日常排查用nc就够了telnet更多是你手头只有telnet时应急用。3.4 DNS解析nslookup、dig、resolvectlDNS出问题的表现特别迷惑有些机器能上网有些不能有些域名能解析有些域名超时浏览器能访问curl却报错。这时候你就需要把DNS单独拎出来查。最常用的命令是nslookup和dig。nslookup适合快速验证比如nslookup blog.example.comdig的输出更详细能告诉你查询走了哪个DNS服务器、响应时间多少、返回的A记录是什么。还有一个常被忽略的点如果你的系统用了systemd-resolved检查DNS状态要用resolvectl status而不是直接看/etc/resolv.conf。有一次我排查一个“curl偶尔失败”的问题ping域名一直通但curl就是报Could not resolve host。后来发现系统里有两个DNS配置源NetworkManager写了一个systemd-resolved里又是另一个一个能解析一个解析不了。最后统一用netplan配置DNS才解决。所以遇到DNS问题时先确认系统里到底是谁在管DNS。3.5 路由表流量为什么不按你预想走路由表是Linux网络里最容易被忽略的部分。很多新手只知道ip route能看到默认网关但不会深入看策略路由和多路由表。举一个真实场景服务器有两块网卡一个连内网一个连外网默认路由指向内网网关。结果外网网卡虽然配置正确但访问外网数据包全从内网网关走了导致内网设备能看到外网流量外网服务反而访问不到。这种问题的根源是路由表没有分清楚哪些流量走内网哪些流量走外网。简单的修法是在路由表里加明细路由ip route add 10.0.0.0/8 via 192.168.10.1 dev eth0 ip route add default via 192.168.20.1 dev eth1但如果业务复杂比如同一个目标IP要从不同网卡出去就得用策略路由了。策略路由的核心是ip rule加ip route 独立路由表比如把来自某个用户或某个网段的流量强制走指定网卡。这块内容比较深日常用得少但理解“路由表决定包往哪走”这个基础逻辑排查问题时就不会南辕北辙。4. 网络性能与协议分析测速、抓包、利用率评估4.1 带宽测试iperf3怎么测才算数热搜里有“网络测速”日常我们测宽带会用在线测速网站但两台Linux服务器之间的带宽最好用iperf3自己测。先在一台机器上启动服务端iperf3 -s -p 5201再在另一台机器上跑客户端iperf3 -c 192.168.10.20 -p 5201 -t 30-t 30表示测试30秒输出最后会给出带宽、丢包率等数据。测完之后记得把服务端停掉或者直接加一个--one-off参数让它在测试结束后自动退出。iperf3测试有几个容易出偏差的细节。第一测试时长不要太短至少30秒否则有些无线网络或者拥塞链路的数据不稳定。第二如果想测TCP吞吐务必保持默认窗口大小不要随手改-w除非你知道自己在做什么。第三测出的带宽是单流值很多服务器默认是单条TCP流实际业务可能是多连接并发所以不要看到带宽低就急着下结论。4.2 网络利用率多少算正常“服务器的网络利用率一般达到多少”这个词我印象很深因为很多人都会被老板问“网卡用了多少”。方法其实很简单看网卡的实时流量。工具上可以用nload、iftop或者想还原出“利用率”这个数值就用ethtool看网卡速率再用ifstat采样实时流量。举例网卡速率是1000Mb/sifstat显示平均流量是300Mb/s那利用率就是30%。但对“正常”这两个字我要泼盆冷水没有绝对的标准。不同的业务模型合理利用率完全不一样。网页服务请求多但每个包小整体利用率很难跑到50%视频转码或者文件备份这种大流量场景利用率跑到80%甚至90%都是正常的。更值得关注的不是瞬时利用率而是持续高利用率。如果一块千兆网卡长期稳定在700Mb/s以上就得考虑是业务本身需要这么大带宽还是存在流量浪费比如没走内网缓存、日志传输重复拖数据。4.3 抓包入门tcpdump三分钟上手排查网络问题只靠ping和ss远远不够很多时候你得看到数据包才能真正定位。tcpdump是我在Linux上用得最多的抓包命令没有之一。第一次用tcpdump的人总会困惑怎么抓下来的包这么多、看不懂我给你几句口诀先确定要看的网卡和方向再确定要过滤的协议和端口最后把包存成pcap用图形工具分析。示例怀疑MySQL查询慢是因为网络问题抓包看客户端到3306端口的流量tcpdump -i eth0 tcp port 3306 -w /tmp/mysql.pcap -s 96这里-i eth0指定网卡tcp port 3306过滤TCP 3306端口-w写文件-s 96只抓每个包的前96字节避免抓全包导致文件巨大。抓完包如果还想在终端看不要用默认的详细输出那会刷屏到崩溃。建议用-nn不做主机名和端口名解析-c 20抓20个包就停先看个大概tcpdump -nn -i eth0 tcp port 3306 -c 20看TCP层的关键是三次握手客户端发SYN服务端回SYN-ACK客户端再回ACK。如果看到客户端反复发SYN但服务端没回应那大概率是服务端accept队列满了或防火墙丢包。如果有SYN-ACK但客户端不再发ACK那可能是客户端侧问题。这套方法能解决大量“连接超时”的疑难杂症。4.4 网络通信协议速览TCP握手、HTTP/DNS热搜里有“网络通信协议”我不打算背教科书只讲和你日常排查最相关的几个点。TCP是绝大多数业务的基础。一个完整连接有三次握手、数据传输、四次挥手三个阶段。你需要记住的不是状态机的每个细节而是ss输出里的状态代表什么。LISTEN表示服务在等连接ESTAB表示连接正常建立SYN_SENT表示客户端发了SYN但没收到响应TIME_WAIT表示连接已关闭但端口还在等。看到大量TIME_WAIT通常不用慌这是正常现象看到大量SYN_SENT就要检查对端了。HTTP是应用层最常见的协议。排查HTTP问题最好用的工具是curl -v它会打印出DNS解析、TCP连接、TLS握手、HTTP响应的每一步耗时。比如访问一个接口很慢curl -v能告诉你时间是花在DNS、TCP还是TLS上基本不用再猜。DNS解析慢、DNS超时是很多“网络卡顿”的隐藏原因。如果你用dig看到查询时间要好几秒检查一下解析的域名是不是走了不合理的递归链路或者本机DNS服务器设置成了一件国内外往返的地址。把DNS统一配置成就近的公共DNS或者自建缓存DNS一般都能解决。5. 高频故障实录与排查套路5.1 虚拟机显示“线缆已拔出”热搜词里有“ubuntu虚拟机 网络 线缆已拔出”这个问题我见得太多了。如果你在VMware或者VirtualBox里装Ubuntu打开系统托盘看到“线缆已拔出”多半不是物理网线问题因为虚拟机没有网线。排查步骤我建议这样来先看虚拟机的网络模式。如果是NAT模式宿主机没联网虚拟机里也会表现为网络不可用如果是桥接模式需要宿主机的物理网卡正常且虚拟机IP要能和宿主机同网段互通。再看VMware的网络服务是否在宿主机的服务里正常运行Windows下可以去服务列表里看VMware NAT Service和VMware DHCP Service的状态。还有一个经常踩的坑虚拟机克隆之后网卡的MAC地址变了但系统里的网络配置还绑定着旧MAC导致网卡起不来。用ip link看一眼MAC和配置文件里记录的是否一致不一致就改回来或者直接删掉配置里绑定MAC的那一行。5.2 “获取接收配置失败请检查网络设置”这个词组应该是某个客户端软件在启动时访问服务端失败后的提示实际原因五花八门但排查思路是相通的。先把问题翻译成人话你的本机到服务端之间的某段网络异常或者服务端配置下发接口异常。第一步确认基础网络ping服务端IP通不通。如果IP都不通再检查路由和防火墙。第二步确认端口用ss -lntp看服务端端口是否在监听用nc -vz从客户端测端口通不通。第三步看服务端日志很多客户端只显示“请检查网络设置”但服务端日志里已经写了具体原因比如证书过期、账号重复登录、IP白名单拦截。这类问题的最大教训是不要只看客户端的提示就跑去改网络。我见过一个案例客户端报“检查网络设置”最后查出来是服务器磁盘满了配置服务响应超时。网络层明明全是通的。所以客户端提示只是出发信号真正定位要靠服务器端日志。5.3 DNS解析慢DNS解析慢的经典表现是首次访问某个域名卡好几秒第二次访问就快多了。原因是本地没有缓存。排查时先用dig看解析时间dig blog.example.com看输出里的Query time。如果这个时间高达几百毫秒甚至数秒再查你的DNS服务器是哪台dig输出的SERVER字段就是。如果是公共DNS响应时间还这么长可能是UDP包被限速或者链路质量差换一个DNS再测对比一下。如果内外网域名混用比如内网服务用自定义域名解析但系统DNS服务器全填了公网地址会导致每个内网域名都要进行一轮外网递归查询慢且可能解析到错误IP。正确做法是内网域名走内网DNS外网域名走公网DNS这就要用DNS分流。systemd-resolved里可以配Domains/etc/resolv.conf也可以配search但这些功能需要谨慎配置错了很容易造成解析混乱。5.4 网络求助的黄金方法论我在排查网络问题时最深刻的体会是不要凭感觉乱试不要漫无目的地一个一个命令敲。一个稳定的方法论比什么都重要。我自己的固定流程是这样的先用ip addr和ip route确认本机网络配置是否异常再ping网关确认物理链路然后用nc和ss确认端口状态接着查DNS解析最后如果还不能定位就开始抓包。每一步都要记录结果这样即使你自己没定位出来把记录贴给同事或者发给供应商对方也能快速接手。抓包尤其要注意不要抓全量流量那样文件太大而且噪声太多。先用top按流量排序找出疑似连接再用具体的IP和端口过滤抓包。另外抓包不只是看有没有包还要看包的序列号和时间戳这些信息能帮你判断是丢包还是延迟抖动。5.5 排查清单速查表我把日常高频问题的排查步骤整理成一张表你可以保存下来作为自己的备忘录。问题现象第一步第二步第三步完全上不了网ip addr看网卡状态ip route看默认路由ping网关能ping通但连不上端口ss -lntp看监听nc -vz测端口查防火墙和ACL域名解析失败nslookup验证resolvectl status看DNS配置抓DNS流量看是否超时网络时通时断检查IP冲突观察是否有丢包mtr换网线/换接口测试跨网段访问慢mtr看路径延迟对比两端带宽测试确认中间网络设备是否限速这张表不是万能药但能帮你把常见问题迅速定位到层剩下的就是具体层面里的细节排查了。6. 给新手的几句实在话6.1 先把环境搭起来学Linux网络光看不练等于白看。我建议你手头至少有一台虚拟机或者拿一台旧电脑直接装Linux。现在网络上有大量免费下载的Linux发行版镜像主流发行版的官方源在国内也有镜像站装个Ubuntu或者Rocky Linux几分钟就能跑起来。装好之后第一件事不是去敲那些炫酷的命令而是自己给自己出几个问题网卡叫什么名IP地址怎么来的默认网关是谁DNS配置在哪通过SSH远程连接能不能成功这几个问题能回答顺了Linux网络的基础就有了。有一个词在热搜里是“永久免费网页版linux”我理解大家想找一个不用装系统就能试的环境。网页版确实方便但很多在线终端不支持抓包、没有完整网卡模拟学网络还是建议用虚拟机功能完整且可以随便折腾。装坏了大不了重来虚拟机的快照功能就是你的后悔药。6.2 建议投入的几件事如果你真想把这套东西吃透我建议按优先级把这四件事做好。第一把ip、ss、nc、tcpdump这四组命令练到形成肌肉记忆它们是日常排查的基石。第二学会读系统和网络日志比如journalctl -u NetworkManager、dmesg | grep -i eth很多网卡问题日志里写得清清楚楚。第三了解自动化配置工具哪怕只用Ansible管理几台机器也比一台台手动改配置靠谱改起来还不容易错。第四面试或者晋升时别只背命令得能讲清楚“为什么”。为什么ping通不代表通为什么TIME_WAIT不用慌为什么双网卡默认网关会出问题这些才是别人愿意认可你的地方。我个人在实际操作中还有一个习惯把每一次故障排查的过程记录下来包括现象、命令输出、最终的根因和修复步骤。攒上二三十个案例你的排查思维就会完全不一样。这也是为什么我一直建议别只收藏别人的故障清单自己要亲自排一遍。很多问题看着别人的复盘觉得简单真到自己遇到卡住你的往往是最不起眼的那个环节。