ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux网络配置实战:IP、DNS与路由修改及故障排查指南

Linux网络配置实战:IP、DNS与路由修改及故障排查指南 简介这份PDF面向Linux系统管理员与运维初学者聚焦Linux环境下IP地址、DNS与路由配置的实操方法帮助读者掌握网络参数调整这一基础技能。内容涵盖ifconfig临时改IP、编辑ifcfg-eth0实现永久配置、route命令与network文件修改网关、resolv.conf设置DNS以及ifconfig、route、ping、traceroute、hostname、dhclient、netconfig等常用网络命令的用法并整理了网络接口、主机名、域名解析等配置文件的作用与重启网络服务的方式。资源包共1个PDF文件大小约11KB篇幅精炼适合作为日常查阅的命令速查与配置参考。目前已有166人学习内容覆盖临时生效与永久生效两类操作路径便于读者对照实际环境快速定位配置入口减少反复试错的时间成本。1. Linux 路由配置从改一个 IP 到让整条链路跑通机房里有台 CentOS 7 的测试机网线插好了ifconfig却只看到lo和一块没有地址的ens33。你打开/etc/sysconfig/network-scripts/ifcfg-ens33把BOOTPROTO从dhcp改成static填上 IP、掩码、网关systemctl restart network一敲SSH 直接断线——因为网关填错了或者 DNS 没配域名解析全挂。这类场景几乎每个做 Linux 运维的人都遇到过改 IP、配 DNS、加路由三件事看起来简单但任何一个参数写错整台机器就从网络上消失。这篇笔记围绕 Linux 下修改 IP、DNS 和路由配置这条主线把 ifconfig/ip 命令、配置文件写法、路由表操作和排错方法串起来适合刚接手 Linux 服务器的新手也适合想理清 network 与 NetworkManager 两套体系差异的熟手。2. 改 IP 之前先搞清楚ifconfig、ip 和配置文件到底谁说了算2.1 临时改和永久改是两套逻辑很多人第一次改 IP 用的是ifconfig eth0 192.168.1.100命令敲完立刻生效但重启后一切还原。这是临时修改只改内核里的网络接口状态不碰任何配置文件。永久修改则要写进/etc/sysconfig/network-scripts/ifcfg-接口名CentOS/RHEL 系或/etc/netplan/*.yamlUbuntu 18.04由网络服务在启动时读取并应用。临时改适合调试和验证永久改才是生产环境该做的事。我一般会先用临时命令验证 IP 和网关能不能通确认无误后再写配置文件避免改完配置重启网络直接失联。ifconfig属于net-tools包较新的发行版默认不再安装取而代之的是ip命令。ip addr看地址ip link看接口状态ip route看路由表。功能上ip更全但ifconfig在大量老文档和脚本里还在用两者都值得会。2.2 用 ip 命令临时改 IP 和网关# 查看当前接口和地址 ip addr show # 给 ens33 添加一个临时 IP掩码 24 位 ip addr add 192.168.1.100/24 dev ens33 # 启用接口如果之前是 down 状态 ip link set ens33 up # 添加默认网关 ip route add default via 192.168.1.1 dev ens33 # 验证 ip addr show ens33 ip route showip addr add是追加地址不是替换。如果接口上已有旧 IP需要先ip addr del 旧IP/掩码 dev ens33再添加。ip route add default添加默认路由如果已存在默认路由会报RTNETLINK answers: File exists此时用ip route replace default via 192.168.1.1替换。这些命令重启后全部丢失只适合临时排障。2.3 写配置文件实现永久生效CentOS 7 的网卡配置文件路径固定文件名必须和接口名一致。一个典型的静态 IP 配置如下# /etc/sysconfig/network-scripts/ifcfg-ens33 TYPEEthernet BOOTPROTOstatic NAMEens33 DEVICEens33 ONBOOTyes IPADDR192.168.1.100 PREFIX24 GATEWAY192.168.1.1 DNS1114.114.114.114 DNS28.8.8.8BOOTPROTOstatic表示静态 IP如果写dhcp则下面的 IPADDR 等字段会被忽略。ONBOOTyes保证开机自动启用接口很多人改完配置重启后网络没起来就是因为这一项是no。PREFIX24等价于NETMASK255.255.255.0两种写法都认。DNS1和DNS2会写入/etc/resolv.conf但要注意 NetworkManager 可能会覆盖这个文件。改完后重启网络systemctl restart network # 或者只重启指定接口 ifdown ens33 ifup ens33systemctl restart network会重启所有接口如果当前是 SSH 连接改错网关就会断线。稳妥做法是先用ip命令临时验证确认能通再写配置文件并且尽量在带外管理或本地终端操作。Ubuntu 22.04 用的是 netplan配置文件在/etc/netplan/下通常是 YAML 格式# /etc/netplan/01-netcfg.yaml network: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 114.114.114.114 - 8.8.8.8改完执行netplan apply。YAML 对缩进极其敏感用空格不用 Tab缩进错一位整个文件解析失败网络直接起不来。建议改之前先cp一份备份。3. DNS 配置resolv.conf 为什么改了会还原3.1 resolv.conf 的三种被覆盖场景/etc/resolv.conf是 Linux 的 DNS 解析配置文件格式很简单nameserver 114.114.114.114 nameserver 8.8.8.8 search example.com options timeout:2 attempts:3nameserver最多写三个按顺序查询。search用于补全短主机名。options控制超时和重试次数。问题在于这个文件经常被覆盖。三种常见情况一是 NetworkManager 接管了 DNS会根据网卡配置里的DNS1重新生成 resolv.conf二是dhclient在 DHCP 续约时重写三是 systemd-resolved 服务把/etc/resolv.conf变成指向/run/systemd/resolve/stub-resolv.conf的软链接。你手动改完重启网络就还原这就是热词里说的「linux修改dns后重启网络还原」。判断当前是谁在管ls -l /etc/resolv.conf # 如果是软链接看指向哪里 systemctl status NetworkManager systemctl status systemd-resolved如果 resolv.conf 是软链接指向 systemd-resolved 的 stub 文件直接改它没用要改/etc/systemd/resolved.conf里的DNS字段然后systemctl restart systemd-resolved。如果是 NetworkManager 管理改网卡配置文件里的DNS1更可靠或者在/etc/NetworkManager/NetworkManager.conf的[main]段加dnsnone让 NetworkManager 不再碰 resolv.conf然后手动维护。3.2 用 nmcli 改 DNS 并验证解析NetworkManager 环境下nmcli是更规范的操作方式# 查看当前连接名 nmcli connection show # 修改指定连接的 DNS nmcli connection modify ens33 ipv4.dns 114.114.114.114 8.8.8.8 # 让修改生效 nmcli connection up ens33 # 验证 DNS 是否写入 cat /etc/resolv.confnmcli connection modify改的是连接配置connection up重新激活连接才会应用。如果只想临时加一个 DNS 做测试可以直接编辑/etc/resolv.conf但要知道它随时可能被覆盖。验证解析用dig或nslookup# 用指定 DNS 查询域名 dig 114.114.114.114 www.baidu.com # 查看解析走了哪个 DNS nslookup www.baidu.com # 查看本机 DNS 配置 resolvectl status # systemd-resolved 环境dig 指定DNS可以绕过本机配置直接测某个 DNS 服务器是否可用。如果dig 114.114.114.114能通但ping www.baidu.com不通说明本机 resolv.conf 没配好或者被覆盖了。如果所有 DNS 都查不到检查/etc/nsswitch.conf里hosts:一行是否包含dns。3.3 自建 DNS 服务器的场景和最小配置有些内网环境需要自己搭 DNS比如给内部域名做解析或者做 DNS 过滤。常见做法是用dnsmasq或bind。dnsmasq 轻量配置简单适合小规模场景# 安装 yum install dnsmasq -y # 编辑配置 cat /etc/dnsmasq.conf # 添加 # listen-address192.168.1.100 # resolv-file/etc/resolv.dnsmasq # addn-hosts/etc/hosts.dnsmasq # 上游 DNS 写进 resolv-file echo nameserver 114.114.114.114 /etc/resolv.dnsmasq # 自定义解析写进 hosts 文件 echo 192.168.1.50 internal.example.com /etc/hosts.dnsmasq # 启动 systemctl enable --now dnsmasqlisten-address指定监听地址resolv-file指定上游 DNSaddn-hosts指定自定义解析文件。客户端把 DNS 指向这台机器就能用。注意防火墙要放通 53 端口firewall-cmd --add-servicedns --permanent。4. 路由配置从默认网关到静态路由的完整操作4.1 路由表怎么看ip route show输出的是内核路由表典型内容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第一行是默认路由所有匹配不到其他路由的流量都走这里。第二行是直连路由192.168.1.0/24 网段的流量直接从 ens33 发出不需要网关。proto kernel表示内核自动生成scope link表示链路层可达。路由匹配遵循最长前缀优先目标地址如果同时匹配/24和/16两条路由选/24那条。metric 值越小优先级越高多条默认路由时选 metric 小的。4.2 添加静态路由的两种方式临时添加# 添加到 10.0.0.0/8 网段的路由下一跳 192.168.1.254 ip route add 10.0.0.0/8 via 192.168.1.254 dev ens33 # 添加到特定主机的路由 ip route add 172.16.1.10/32 via 192.168.1.253 dev ens33 # 删除路由 ip route del 10.0.0.0/8 # 查看 ip route show永久添加在 CentOS 7 下有两种做法。一是写进网卡配置文件同目录的路由文件# /etc/sysconfig/network-scripts/route-ens33 10.0.0.0/8 via 192.168.1.254 dev ens33 172.16.1.10/32 via 192.168.1.253 dev ens33文件名必须是route-接口名格式是「目标网段 via 下一跳 dev 接口」。重启网络后生效。二是在网卡配置文件里用IPADDR1等字段配合但不如独立路由文件清晰。Ubuntu netplan 则在 YAML 里写routes:列表前面示例已经展示。4.3 策略路由让不同来源走不同出口一台机器有两个网卡、两个网关时默认路由只能有一条另一条链路可能闲置。策略路由可以按源地址、目标地址等条件分流# 创建路由表表名自定义编号 100 echo 100 custom /etc/iproute2/rt_tables # 给自定义表添加默认路由 ip route add default via 192.168.2.1 dev ens34 table custom # 添加规则来自 192.168.2.100 的流量查 custom 表 ip rule add from 192.168.2.100 table custom # 查看规则 ip rule showrt_tables文件定义表名和编号的映射编号 1-252 可用。ip rule add from按源地址匹配还可以用to按目标地址、fwmark按防火墙标记。规则按优先级顺序匹配ip rule show里数字越小越先匹配。策略路由在双线接入、多网卡场景下很实用但配置复杂改错容易导致流量黑洞建议先在测试机验证。5. 避坑与排查改完网络就失联的 5 个真实原因5.1 网关填错导致 SSH 断线现象改完 IP 和网关systemctl restart network一执行SSH 卡死再也连不上。原因网关地址不在当前网段内或者网关本身不可达。内核添加默认路由时不会校验网关是否真的能通但流量发出去后没人转发连接自然断。解决改配置前先用ip route add default via 新网关 dev ens33临时测试ping外网地址确认能通再写配置文件。如果已经断线通过带外管理或本地终端登录把网关改回正确值。生产环境改网络配置尽量用nohup加延时重启给自己留后悔药# 5 分钟后重启网络期间可以取消 shutdown -r 5 # 确认没问题后取消 shutdown -c5.2 DNS 改了不生效resolv.conf 被覆盖现象手动编辑/etc/resolv.conf加了 nameserverping域名还是解析失败cat一看文件内容变回去了。原因NetworkManager 或 systemd-resolved 在后台重写了文件。解决先ls -l /etc/resolv.conf看是不是软链接。如果是改对应的服务配置。如果是 NetworkManager 管理用nmcli connection modify改 DNS或者在/etc/NetworkManager/NetworkManager.conf里设dnsnone后重启 NetworkManager。改完用dig验证不要只看文件内容。5.3 路由加了但流量不走现象ip route add添加了静态路由ip route show也能看到但ping目标网段不通。原因可能是路由的下一跳不可达或者目标网段和已有直连路由冲突或者防火墙 forward 链拦截。解决ip route get 目标IP查看内核实际选了哪条路由。如果选的不是刚加的那条说明有更优匹配。ping 下一跳IP确认下一跳可达。iptables -L FORWARD -n -v看转发是否被拦。如果是容器或虚拟机环境还要检查宿主机的路由和 NAT 规则。5.4 网卡配置文件改完不生效现象改了ifcfg-ens33systemctl restart network也没报错但ip addr看地址没变。原因文件名和接口名不一致或者ONBOOTno或者 NetworkManager 和 network 服务冲突两个都在管同一块网卡。解决nmcli device status看接口被谁管理。如果显示connected且是 NetworkManager用nmcli改而不是改文件。如果两个服务都启用停掉一个systemctl stop NetworkManager systemctl disable NetworkManager只用 network 服务或者反过来。不要两个同时跑。5.5 改完 IP 后 IP 冲突现象新设的 IP 能 ping 通自己但外部访问时通时断或者直接不通。原因局域网里已有其他设备用了同一个 IP。热词里「ip冲突排查」说的就是这种情况。解决改 IP 前先用arping探测# 发送 ARP 请求看是否有回应 arping -I ens33 192.168.1.100 -c 3有回应说明 IP 已被占用换一个。如果已经冲突ip neigh show看 ARP 表里该 IP 对应的 MAC和交换机管理界面里的 MAC 表对比定位冲突设备。长期方案是做好 IP 地址规划静态 IP 和 DHCP 池分开别让手配的地址落在 DHCP 范围内。6. 用 ip route get 和 tcpdump 把路由决策看穿配完 IP、DNS 和路由怎么确认流量真的按你设想的方式走我常用的组合是ip route get加tcpdump。ip route get 8.8.8.8会直接告诉你内核为这个目标地址选了哪条路由、从哪个接口发出、源地址是什么ip route get 8.8.8.8 # 输出示例 # 8.8.8.8 via 192.168.1.1 dev ens33 src 192.168.1.100 uid 0如果输出里的via或dev和你预期不符说明路由表里有更优匹配或者策略规则在起作用。ip route get支持指定源地址ip route get 10.0.0.1 from 192.168.2.100用来验证策略路由是否按源地址分流。tcpdump则用来确认包实际有没有发出去、有没有回来# 抓 ens33 上所有 ICMP 包 tcpdump -i ens33 -n icmp # 抓特定主机的流量 tcpdump -i any -n host 10.0.0.1 # 抓 DNS 查询 tcpdump -i any -n port 53-i any抓所有接口-n不解析主机名和端口名避免 DNS 反向查询干扰。如果ping不通先tcpdump看请求包有没有从正确接口发出。如果请求出去了但没有回复问题在对面或中间链路如果请求根本没发出问题在本机路由或防火墙。一个我踩过的坑有次配了策略路由ip rule show和ip route show table custom都正常但流量就是不走。后来用ip route get 目标IP from 源IP才发现规则里的源地址写的是网段但实际流量的源地址是另一个网段的地址规则没匹配上。策略路由的from要写实际发出流量的源地址不是你以为的那个。另一个习惯每次改完网络配置先ip addr、ip route、cat /etc/resolv.conf三连确认再ping网关、ping外网 IP、dig域名三步验证。这套流程能覆盖大部分配置错误。改生产环境之前在测试机或虚拟机里先跑一遍确认命令和参数都对再上真机。网络配置这东西改错一行就是失联多花五分钟验证省下的是半夜去机房的打车费。希望帮到你。本文还有配套的精品资源点击获取
返回列表