恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Linux网络基础:从ip命令到网关DNS的排障实战
首页
资讯中心
/
Linux网络基础:从ip命令到网关DNS的排障实战
Linux网络基础:从ip命令到网关DNS的排障实战
发布时间:2026/10/13 4:00:50
1. 引言为什么要专门写一篇Linux网络基础先说点实在的。我这些年接触过的Linux学习者十有八九都卡在同一个地方命令记住了不少但网络一报错就懵。ping不通、ssh连不上、curl没反应面对这些问题第一反应是瞎试——重启网卡、改配置、换DNS试到哪个算哪个。运气好能蒙对运气不好直接把自己锁在远程服务器外面。其实Linux网络没这么玄乎。它无非就是接口、地址、路由、DNS这几件事的组合。你把这些基础概念搞扎实再配合一套有逻辑的排查思路绝大多数网络问题都能在十分钟内定位。这也是写这篇Linux网络基础1的初衷把网络这块的基础知识按我实际工作里的经验重新梳理一遍不堆术语不写教科书只讲你敲命令时真正需要知道的东西。这篇内容适合刚接触Linux的运维、后端开发者也适合那些用Linux做开发环境但对网络配置一直迷迷糊糊的人。文章里我会带你从网卡接口开始逐步搞清楚IP地址和子网掩码怎么配合、网关和路由的区别是什么、DNS在什么环节发挥作用然后落到实操——用ip和传统命令查看网络状态、配置静态IP、排查连通性问题。学完这一篇你至少能做到拿到一台陌生的Linux机器能在五分钟内搞清楚它的网络长什么样遇到连不上的问题能按步骤而不是靠猜去排查。2. 先把底层概念捋清楚接口、地址、掩码、网关、DNS2.1 网络接口操作系统视角里的网卡在Linux里一切网络通信都发生在接口上。接口就是操作系统给网卡起的名字你可以把它理解成系统里的一扇门——数据要出去必须走某扇门数据要进来也必须从某扇门进。常见的接口名有这么几类lo回环接口永远存在的虚拟接口地址固定是127.0.0.1。它只在本机内部通信用来让本机上的程序互相访问跟外网没有任何关系。eth0/ens33/enp0s3有线网卡。不同发行版、不同虚拟化平台命名规则不一样有的是传统的eth开头有的是根据总线位置命名的enp/ens系列。wlan0无线网卡一般出现在笔记本或带无线模块的机器上。docker0、br-xxxx、vethxxxx虚拟接口。装了Docker或虚拟化软件后会出现一堆这种名字它们是为容器和虚拟网络服务的内核虚拟设备。查看当前系统有哪些接口最简单的方式是ip link show这个命令会列出所有接口、它们的MAC地址以及当前状态。注意看state UP还是state DOWN——这决定了接口是否处于可用状态。如果你的网卡显示DOWN那后面所有上层配置都白搭必须先用ip link set dev eth0 up把它拉起来。我见过不少人排查网络问题查了半天IP、路由、DNS最后发现网卡压根没启用。所以记住一个顺序先确认接口UP再谈地址和路由。2.2 IP地址与子网掩码门牌号和街区范围IP地址是网络层的地址。IPv4就是大家最常见的四段数字比如192.168.1.100。它的作用类似于门牌号告诉网络上的其他设备这台机器在这里。子网掩码Netmask是很多人第一道坎。它到底是干嘛的说得直白一点IP地址本身不告诉你哪些设备跟你在同一个网段子网掩码负责干这件事。它用一串二进制把IP地址切成两部分——网络位和主机位。网络位相同的设备就属于同一个广播域可以直接用ARP找到对方网络位不同的设备必须经过网关转发。举一个实际的例子。假设某台机器配置的是192.168.1.100/24这里的/24就是子网掩码的简写等价于255.255.255.0意思是前24位是网络位。那么它的网络地址是192.168.1.0广播地址是192.168.1.255能直接通信的主机范围是192.168.1.1到192.168.1.254。你在这个网段里配另一台192.168.1.50的机器两者无需路由器就能互通。但如果对方是192.168.2.50网络位不同就必须通过网关转发了。这里有个新手特别喜欢踩的坑把子网掩码配错。比如明明整个局域网是192.168.1.x/24你手滑配成了/16那系统会认为整个192.168.x.x都在同一个网段——结果就是发往不同网段的数据不走网关直接在二层上找目标目标不存在于是网络时通时不通。排查这种问题最痛苦因为IP对、网关对、DNS也对就是上不了网。所以每次配完地址顺手ip addr看一眼掩码是不是跟同一局域网里的其他机器一致能省很多事。2.3 网关与路由数据出门找谁网关的概念可以这样理解你自己家住在某个小区小区内部的路你自己认识直接走过去就行但你想去别的城市必须先从小区大门出去上高速。网关就是那个小区大门默认网关就是不指定具体大门的话出去都走这个门。Linux里用路由表来管理数据怎么走。查看路由表的命令ip route show典型的输出长这样default via 192.168.1.1 dev eth0 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100第一行default via 192.168.1.1 dev eth0说的是目的地址不在其他条目覆盖范围内时统一丢给网关192.168.1.1从eth0出去。第二行说的是192.168.1.0/24这个网段的数据直接通过eth0发送不需要经过网关。理解这两行你就理解了路由匹配的核心逻辑Linux会按最精确匹配的原则从路由表里挑条目——先看有没有条目精确覆盖目的地址没有就走默认路由。所以默认路由的重要性极高一旦缺失出网就废了但局域网内通信可能还是正常的。这解释了一个很常见的现象为什么同一局域网内的机器能互相ping通但访问外网就不行——大概率就是默认路由没配或者网关不对。2.4 DNS人类记名字机器记地址用户访问网站的时候输入的是域名但网络层只认IP。DNS起的就是翻译作用——把域名翻译成IP地址。Linux系统里DNS配置的位置很固定/etc/resolv.conf。查看它的内容cat /etc/resolv.conf一个典型内容nameserver 114.114.114.114 nameserver 8.8.8.8nameserver指的就是你要用的DNS服务器地址。系统解析域名时按顺序尝试这些服务器第一台没响应就换下一台。判断域名解析是否正常可以用nslookup或者dignslookup example.com如果返回了IP说明DNS解析正常。如果报server cant find或者超时问题可能出在DNS服务器不可达、配置错误或者上游DNS服务器本身返回了异常结果。这里有个实际经验/etc/resolv.conf经常被NetworkManager等工具覆盖重写。你手工改了DNS过一会儿发现又变回去了这不是你改错了而是系统服务在托管这个文件。要持久化修改正确做法是去对应的网络配置文件或者NetworkManager连接配置里改而不是直接编辑/etc/resolv.conf。3. 常用网络命令从查看到配置的一整套工具3.1 新一代主角ip命令过去大家习惯用ifconfig、route、netstat这套传统命令但在现代主流发行版上我更推荐你直接上手ip命令家族。它由iproute2软件包提供语法统一输出信息也完整而且已经是几乎所有现代Linux发行版的标配。ip命令按管理对象分成了几个子命令ip link管理接口本身查看/设置接口的UP/DOWN状态、MAC地址、MTU等。ip addr管理接口上的IP地址。ip route管理路由表。ip neigh管理邻居表ARP缓存。日常最常用的三条ip addr show # 查看所有接口的IP地址 ip route show # 查看路由表 ip link show # 查看接口状态ip addr show的输出里重点看这几项state UP接口状态。inet 192.168.1.100/24IPv4地址和掩码。mtu 1500最大传输单元一般不需要动但如果包太大导致传输失败可能需要调低。3.2 连通性测试ping、ss、traceroute查看网络连不连通ping是第一选择。它基于ICMP协议用来测试本机到目标主机的二层/三层连通性。ping -c 4 192.168.1.1-c 4指定发送4个包后停止。观察输出里的time数值可以简单判断链路质量。需要注意ping不通不代表网络一定有问题。很多服务器会屏蔽ICMP比如云主机默认的安全组策略就可能丢弃ICMP请求。所以ping不通目标外网IP但业务访问正常的情况很常见。反过来同一个IP地址ping不通先试试用curl访问它的业务端口如果端口能通说明只是ICMP被拦了不是真正断网。端口层面的连通性检查传统上用telnet但现代系统我更推荐ss命令。举例检查本地22端口是否在监听ss -tlnp | grep :22-t只显示TCP-l显示监听中的端口-n不做域名解析直接显示数字-p显示占用进程。要检查另一台机器上的端口是否可达直接用timeout配合nctimeout 3 nc -zv 192.168.1.100 80能连上会返回succeeded连不上会返回超时或拒绝连接。这里有个技巧nc加上-z表示只扫描不发送数据-v输出详细信息timeout 3防止命令卡死非常适合脚本里做端口探测。如果链路跨了多个网段想知道数据到底在哪里断了用traceroutetraceroute -n example.com-n的意思是不反解域名直接显示IP速度更快也更容易看。输出会列出每一跳的IP和延迟。哪一跳出现* * *且后续全不通问题通常就在那一跳附近。但要提醒一句很多运营商路由器和防火墙会主动丢弃TTL超时的ICMP报文所以个别跳显示星号只是意味着那一跳没响应探测包不一定是故障得结合前后跳判断。3.3 临时配置与持久化配置的区别刚接触Linux网络的人最容易搞混的就是临时配置和持久化配置。临时配置直接用命令改立即生效但重启或重启网络服务后丢失。适合测试、应急调整。改IP的典型做法ip addr add 192.168.1.100/24 dev eth0 ip addr del 192.168.1.99/24 dev eth0 ip link set eth0 up ip route add default via 192.168.1.1注意ip命令指定地址时必须带掩码长度比如/24写在IP后面。不写掩码会直接报错或者默认配成/32——这是很多人第一次用ip命令时踩的坑。/32意思是只有这个IP本身属于这个网段跟其他主机完全无法二层通信。持久化配置把配置写进系统的网络配置文件里不仅要写对位置有的发行版还需要重启网络管理服务或者重新载入连接才能生效。不同发行版的持久化配置方式差异很大。最简单的是内存里的NetworkManager可以用nmcli来操作nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24 nmcli connection modify eth0 ipv4.gateway 192.168.1.1 nmcli connection modify eth0 ipv4.dns 114.114.114.114 nmcli connection modify eth0 ipv4.method manual注意ipv4.method manual这一条不能漏它告诉NetworkManager不要再用DHCP自动获取地址而是使用你手工指定的静态配置。不改这个你前面的IP配置会被自动获取的地址覆盖掉表现就是改了没生效。3.4 传统命令虽然老了但你还得认识它虽然我建议你主用ip系列命令但传统命令并不会马上消失。很多老文档、老脚本里仍然是ifconfig、route和netstat的天下你得看懂它们在说什么。ifconfig查看IP和MAC地址ifconfigroute -n查看路由表-n同样表示不做域名反解route -nnetstat -tlnp查看监听端口等价于我前面说的ss -tlnp。事实上当前主流发行版里的netstat已经是ss的符号链接了你敲netstat实际执行的就是ss。所以学ss就是学新一代的netstat不吃亏。关于新旧命令的取舍我的建议是新项目、新脚本一律用ip系列遇到老机器、老文档里的传统命令时认识就行没必要刻意去练旧的。4. 实操全流程拿到一台陌生Linux机器五分钟搞定网络排查4.1 第一步先看接口状态假设你新接手一台机器业务反馈连不上网。第一步永远是确认接口状态ip link show如果目标网卡显示state DOWN直接拉起来ip link set dev eth0 up如果是远程机器这一步要千万小心——把网卡拉起来后确认IP在有效范围内再关掉你当前的会话否则可能把自己锁在门外。远程操作网络配置永远是改完先验证再断开会话。4.2 第二步看IP和掩码对不对接着看地址ip addr show eth0确认三件事有没有inet条目。如果没有说明这台机器没拿到IP要么是DHCP问题要么是静态IP没配。掩码长度跟同一局域网内其他正常机器是否一致。IP是否在预期的网段内。有时网管分配的IP写在纸上配置的时候抄错了一位这种问题用眼就能看出来。如果机器走的是DHCP可以用dhclient手动重新获取一次dhclient eth0这条命令会向DHCP服务器重新请求地址。注意某些系统上需要先用dhclient -r eth0释放旧地址再执行获取。4.3 第三步看路由和网关ip route show确认有一条default via [网关IP] dev [网卡]。没有的话局域网内还能通但出网肯定不行。临时加默认路由ip route add default via 192.168.1.1 dev eth0加了之后立刻验证ping -c 3 192.168.1.1网关能ping通说明本机到网关这一段没问题。后面再判断外网的问题。4.4 第四步测外网和DNS网关通了不等于外网通。继续测ping -c 3 223.5.5.5这个IP是公共DNS之一用来当外网连通性的探针非常合适因为它响应稳定而且一般不会被本地网络拦截。能ping通说明三层链路到外网是通的。ping不通问题可能在运营商线路、路由策略或者防火墙。外部IP通信正常了再测域名解析ping -c 3 example.com如果IP能通但域名ping不通问题99%出在DNS。检查/etc/resolv.conf里的nameserver配置然后用nslookup手动验证nslookup example.com如果解析失败试着换一个公共DNS再测一次比如nameserver 114.114.114.114。这一步能区分是DNS服务器不可达还是DNS服务器本身解析不了这个域名。4.5 第五步验证业务端口最后网络通了还要验证业务端口。假设对方跑了一个Web服务用nc测一下timeout 3 nc -zv 192.168.1.100 80端口通了说明你的网络基础链路和对方服务都正常。端口不通可能是对方服务没起来、防火墙拦了端口或者你连错了地址。这时候再分头查。这套流程走下来绝大多数网络不通的问题都能定位到具体环节。关键是养成按层排查的习惯——接口层 → 地址层 → 路由层 → 外网层 → DNS层 → 端口层每一层都有明确的验证手段不靠猜。5. 常见问题与排查技巧实录5.1 问题一改完IP没生效这是最多人遇到的问题。配置了静态IP一看ip addr还是原来的地址或者过一会儿自动变回去了。排查顺序查有没有NetworkManager在管理这个接口。nmcli device status能看到每个接口由谁管理。如果显示connected说明NetworkManager在接管手工改的文件它不管数据包还是按它内存里的配置走。查系统有没有启用systemd-networkd。有些发行版用systemd-networkd管理网络配置写在/etc/systemd/network/目录下的.network文件里。查/etc/resolv.conf是不是被软链到了/run/systemd/resolve之类的地方如果是说明systemd-resolved在管理DNS手工改文件只会被覆盖。碰到这种配置被托管的情况正道是找到实际管理网络的工具在它对应的配置层面去改而不是跟系统服务抢文件。5.2 问题二能ping通IP但ping不通域名IP通了域名不通基本锁定DNS环节。但DNS问题还细分成好几种nameserver配置为空或者指向了一个不可达的地址。检查/etc/resolv.conf。DNS服务器可达但对特定域名解析异常。用nslookup分别查询几个不同的域名能区分是局部问题还是全局问题。本机设置了/etc/hosts里错误的映射。/etc/hosts优先级高于DNS如果里面写了错误的IP那解析结果会被篡改。排查DNS的时候我习惯直接看时间——dig命令的输出里有一个Query time字段。如果解析成功但耗时几百毫秒甚至几秒说明DNS服务器响应慢业务上表现就是打开网页很卡。这种情况换一个更近或更快的DNS通常能解决。5.3 问题三ping不通但业务能访问这其实不算问题但经常把人绕晕。前文说过很多节点会屏蔽ICMP。你ping某个地址不通不代表TCP业务不通。验证方法timeout 3 nc -zv [目标IP] [端口]如果目标业务端口能通那网络链路没问题单纯是ICMP被拦了不需要处理。反过来也要记住ping通了也不代表业务端口通端口需要单独验证。5.4 问题四路由配置混乱最典型的一种情况是系统里有多个网卡默认路由指向了错误的网关。比如有两块网卡一块连内网、一块连外网默认路由如果指向了内网网关外网就完全不通。查看当前的路由选择可以用ip route get 223.5.5.5这个命令直接告诉你去某个IP会走哪块网卡、经哪个网关非常直观。如果发现走错了先删掉错误的默认路由再加正确的ip route del default ip route add default via [正确网关] dev [正确网卡]多网卡机器上还有个常见隐患配置了多条默认路由或者内网路由掩码写太宽导致本应走内网的数据绕到了外网网关反而被防火墙拦掉。排查方法是对目标内网IP执行ip route get确认走了正确的网卡。5.5 避坑技巧汇总根据这些年的操作经验最后整理几条实用避坑技巧远程操作网络配置前一定先写好恢复脚本。哪怕只是改个IP也要准备好一条回滚命令或者保留一个能直接执行的恢复步骤。很多人就是改完发现自己敲错了掩码IP彻底失联人还在千里之外。改配置后先验证再断会话。ping一下网关、ip addr show确认地址无误再关掉当前SSH会话。不同发行版配置文件格式差异巨大不要凭记忆照搬。先确认你手上的系统用的哪套管理机制再动手改。ip命令设置地址时记得带掩码长度。/24写漏了一个/32会让你跟整个局域网失联排查起来还毫无头绪。DNS文件被管理工具托管时不要硬改/etc/resolv.conf先去找到实际的网络管理器配置。否则你每次改完重启就被覆盖白白浪费半小时。排查网络要有层次感从接口开始一层一层往下验证。很多人在外网层折腾半天最后发现网卡都是DOWN的这种低级错误其实最耗时。Linux网络基础的内容远不止这一篇能讲完这篇先把接口、地址、路由、DNS和基本排查流程过了一遍算是把地基打牢。后面再往深了写VLAN、bond、防火墙规则这些进阶内容有了这套基础后面那些概念理解起来会顺畅得多。我在实际排查中反复感受到绝大多数看似复杂的网络故障归根结底还是基础概念没吃透——掩码算错、路由表理解不到位、DNS优先级搞反这些问题只要基础扎实都是用几分钟就能定位的事。