☰
Linux网络基础:从ip命令到网关DNS的排障实战
2026/10/13 4:00:46 网站建设 项目流程

1. 引言:为什么要专门写一篇"Linux网络基础"

先说点实在的。我这些年接触过的Linux学习者,十有八九都卡在同一个地方:命令记住了不少,但网络一报错就懵。ping不通、ssh连不上、curl没反应,面对这些问题,第一反应是瞎试——重启网卡、改配置、换DNS,试到哪个算哪个。运气好能蒙对,运气不好直接把自己锁在远程服务器外面。

其实Linux网络没这么玄乎。它无非就是接口、地址、路由、DNS这几件事的组合。你把这些基础概念搞扎实,再配合一套有逻辑的排查思路,绝大多数网络问题都能在十分钟内定位。这也是写这篇"Linux网络基础(1)"的初衷:把网络这块的基础知识按我实际工作里的经验重新梳理一遍,不堆术语,不写教科书,只讲你敲命令时真正需要知道的东西。

这篇内容适合刚接触Linux的运维、后端开发者,也适合那些用Linux做开发环境但对网络配置一直迷迷糊糊的人。文章里我会带你从网卡接口开始,逐步搞清楚IP地址和子网掩码怎么配合、网关和路由的区别是什么、DNS在什么环节发挥作用,然后落到实操——用ip和传统命令查看网络状态、配置静态IP、排查连通性问题。学完这一篇,你至少能做到:拿到一台陌生的Linux机器,能在五分钟内搞清楚它的网络长什么样;遇到"连不上"的问题,能按步骤而不是靠猜去排查。

2. 先把底层概念捋清楚:接口、地址、掩码、网关、DNS

2.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.8

nameserver指的就是你要用的DNS服务器地址。系统解析域名时按顺序尝试这些服务器,第一台没响应就换下一台。

判断域名解析是否正常,可以用nslookup或者dig:

nslookup example.com

如果返回了IP,说明DNS解析正常。如果报server can't 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/24:IPv4地址和掩码。
  • 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配合nc:

timeout 3 nc -zv 192.168.1.100 80

能连上会返回succeeded,连不上会返回超时或拒绝连接。这里有个技巧:nc加上-z表示只扫描不发送数据,-v输出详细信息,timeout 3防止命令卡死,非常适合脚本里做端口探测。

如果链路跨了多个网段,想知道数据到底在哪里断了,用traceroute:

traceroute -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地址:

ifconfig

route -n查看路由表,-n同样表示不做域名反解:

route -n

netstat -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优先级搞反,这些问题只要基础扎实,都是用几分钟就能定位的事。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询