☰
Linux路由配置笔记:IP、DNS与路由修改的临时与永久生效
2026/9/30 5:30:55 网站建设 项目流程

简介:面向Linux系统管理员和初学者的路由配置速查资料,聚焦在Linux操作系统下修改IP、DNS、网关和路由的完整思路。内容覆盖ifconfig、route等命令的临时修改方式,以及编辑ifcfg-eth0、/etc/sysconfig/network、resolv.conf等配置文件实现永久生效的具体步骤,并将常用网络命令与配置文件的作用整理成对照,便于运维排查和系统化学习。资源为单个PDF文档,大小约11KB,篇幅紧凑但要点齐全,适合作为日常配置、实验练习或备考系统管理相关内容时的快速参考。目前已有166人学习下载,对刚接触Linux网络配置、需要搭设服务器或虚拟机的读者尤为实用。通过文中实例,能够理清临时配置与永久配置的区别,掌握重启网络服务后的生效逻辑,避免修改后不生效或重启丢失等常见问题。

1. 一份Linux路由配置笔记:把IP、DNS和路由改明白再动手

接手 Linux 服务器的人,迟早要被网络配置绊倒一次。我见过最典型的翻车:远程登录后直接敲 ifconfig eth0 192.168.0.20 改 IP,当前会话立刻断开,重启后配置原样恢复,客户那边业务照旧不通。这份 linux 路由配置笔记恰好把临时命令和永久配置两条路线都写全了——修改 IP、DNS 和路由配置,既可以用 ifconfig、route 即时生效,也可以写进 ifcfg-eth0、resolv.conf 长期保存。适合刚入门 Linux 运维的新手,也适合在机房或远程环境需要快速改网络参数、又不希望重启后丢配置的从业者。下面按这份 PDF 的顺序,把命令、字段、坑和验证方法逐条拆开。

2. 临时生效与永久生效:命令背后的配置落点

2.1 ifconfig 与 route:先分清“查看”和“修改”

PDF 里开篇就强调熟悉 ifconfig 会很方便,而 ifconfig 的第一类用途是查看网络接口信息。普通用户执行 ifconfig 时需要用全路径 /sbin/ifconfig,因为 /sbin 不一定在普通用户的 PATH 里;查看指定接口的详细信息则执行 ifconfig eth0;连 down 状态的接口也要看到时,用 ifconfig -a。

/sbin/ifconfig # 查看所有活跃接口 /sbin/ifconfig eth0 # 只看 eth0 的详细信息 /sbin/ifconfig -a # 包括 down 掉的接口也显示 route | grep default # 快速确认默认网关 hostname # 显示当前主机名

这些命令只读不写,输出里需要关注几项:eth0 后面的 inet addr 是 IP 地址,Mask 是子网掩码,HWaddr 是 MAC 地址,RX/TX 行的错误计数可以作为网线或对端问题的基础判断。route 不带参数时显示完整路由表,grep default 直接过滤默认路由,看 Gateway 列就能确认默认网关指向谁。ping -c 4 192.168.1.10 是发送指定数量数据包测试连通性,traceroute 192.168.1.10 则用于查看路径上哪一跳丢包,这两条偏诊断,不参与配置。

再看修改类命令。ifconfig 修改 IP 的语法是接口名加地址加掩码,例如:

# 修改 eth0 的 IP,即时生效,重启后恢复原样 ifconfig eth0 192.168.0.20 netmask 255.255.255.0 # 一块物理网卡绑定多个 IP,虚拟接口名是 eth0:1 ifconfig eth0:1 192.168.0.30 up

第一条命令改完后,当前会话的临时 IP 立刻生效,但重启后内核会按 ifcfg-eth0 的内容重新配置。第二条虚拟接口写法在服务器需要绑多个地址、或者网络实验要模拟多台主机时很常用,PDF 里特别提了一句“在设置虚拟主机时有用到”。激活和关闭网卡分别是 ifconfig eth0 up 和 ifconfig eth0 down。

网关与路由修改用的是 route 命令:

# 添加默认网关 route add default gw 192.168.0.254 # 删除默认网关 route del default gw 192.168.0.254 # 向 10.0.0.0/8 网段加静态路由,走本机 eth0 出去 route add -net 10.0.0.0 netmask 255.0.0.0 dev eth0

route 命令同样只改当前运行状态。添加默认网关的本质是往路由表里写一条 0.0.0.0/0 的记录,删除默认网关时也可以用 route del -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.0.1 这种显式写法,PDF 里两种都有出现,后一种更直观但容易把网段写错,建议平时固定用 default 关键字。动态获取地址的场景用 dhclient,这条命令直接从 DHCP 服务器申请新的网络设置,适合 DHCP 环境下手动触发重新租约。修改 MAC 地址的完整流程是禁用网卡、改硬件地址、再激活:

ifconfig eth0 down ifconfig eth0 hw ether 1234567890ab ifconfig eth0 up

必须先 down 再改,否则内核会报 device busy。PDF 里提到的“永远保持这样”是把这三句写进 /etc/rc.d/rc.local,开机时执行一遍;这是老 CentOS 5/6 的常见做法,新版系统更推荐用 udev 规则管理 MAC,但 rc.local 思路在老旧生产机上仍然有效。

2.2 为什么命令会“丢配置”:重启后从哪读参数

很多新手不理解为什么 ifconfig 改完重启就失效,根因在于 Linux 网络初始化机制。系统启动时,/etc/init.d/network 脚本会去读 /etc/sysconfig/network-scripts/ifcfg-ethX、/etc/sysconfig/network、/etc/resolv.conf 等文件,再把这些文件的内容重新设置到内核里。ifconfig、route 改的是内核当前参数,从来不写配置文件,所以一旦重启,内核按配置文件重新配置,手工改的就全被覆盖。hostname 同理,hostname Linserver 命令即时生效,但纯命令设置重启后恢复原主机名。

所以“临时生效”和“永久生效”的分界线很清楚:

修改内容临时命令永久配置位置重启后行为
IP 地址ifconfig eth0 IP netmask 掩码ifcfg-eth0 的 IPADDR/NETMASK按配置文件恢复
默认网关route add default gw 地址ifcfg-eth0 或 /etc/sysconfig/network 的 GATEWAY按配置文件恢复
DNS无标准临时命令/etc/resolv.conf修改即生效
主机名hostname 名称/etc/sysconfig/network 的 HOSTNAME按配置文件恢复
动态地址dhclientifcfg-eth0 的 BOOTPROTO=dhcp按配置文件获取

修改配置文件之后,需要重启网络服务或重启接口来让配置生效。常见的三条指令:service network restart 重启整个网络服务,ifdown eth0 然后 ifup eth0 只重载指定接口,/etc/init.d/network restart 是老系统的等价写法。PDF 里还提到 netconfig 和 setup 两个字符界面工具,以及 neat 图形窗口,这几个工具只配置 eth0,生产环境用得少,知道有就行。改完配置后优先用 ifdown/ifup 单个接口的方式,不要动不动 network restart,影响面小,这是后面避坑章节要重点展开的经验。

3. 写进文件才算数:三个配置文件的字段与联动

3.1 ifcfg-eth0 与 /etc/sysconfig/network:静态 IP 和网关的落点

永久修改 IP 必须编辑 /etc/sysconfig/network-scripts/ifcfg-eth0。这份 PDF 里给了一份标准静态配置模板:

# /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 # 网络接口名称,必须与文件名后缀一致 ONBOOT=yes # 开机时自动激活此接口 BOOTPROTO=static # 静态地址方式,不向 DHCP 请求 IPADDR=192.168.1.10 # 本机 IP NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.1.1 # 默认网关

逐字段说清楚:DEVICE 必须和文件名里的 eth0 一致,写错会导致脚本找不到接口;ONBOOT 决定系统启动时要不要激活这块网卡,生产服务器如果这里写 no,开机后网卡是 down 的,业务自然全断;BOOTPROTO 可取 static、dhcp、none 三种值,多数老系统里 none 和 static 等价,但最稳妥的写法是 static。IPADDR、NETMASK、GATEWAY 只在静态模式下生效,如果 BOOTPROTO=dhcp 却残留了这些字段,网络脚本很可能启动失败,这是后面避坑章节的重点。

改用 DHCP 获取网络配置时,文件精简成三行:

# /etc/sysconfig/network-scripts/ifcfg-eth0(DHCP 方式) DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp

这里有个很容易忽略的细节:DHCP 模式下千万不要再写 IPADDR、NETMASK、GATEWAY,否则部分系统网络脚本会检测到字段冲突。需要一块网卡配多个 IP 时,除改主文件外还可以新建 ifcfg-eth0:1 的虚拟接口文件,字段内容和主文件相同,IPADDR 写第二个地址,这和命令行的 ifconfig eth0:1 是一一对应的关系。

另一个配置文件是 /etc/sysconfig/network,它管的是全局网络行为和主机名:

# /etc/sysconfig/network NETWORKING=yes # 是否启用网络,no 会禁用全部网络 HOSTNAME=Aaron # 设置的主机名 GATEWAY=192.168.1.1 # 全局默认网关

注意 GATEWAY 可以出现在两个地方:ifcfg-eth0 里和 /etc/sysconfig/network 里。常见做法是只在主网卡的 ifcfg-ethX 里写 GATEWAY,/etc/sysconfig/network 里的 GATEWAY 是整个系统的兜底;两处同时写但值不一致时,路由表可能出现两条默认路由或者网关被覆盖,结果就是 ping 外网时好时坏。多网卡服务器尤其要避免每块网卡文件里都写 GATEWAY,后面避坑章节有对应记录。HOSTNAME 字段对应 hostname 命令,修改文件后执行 hostname 命令或重启才能生效。

3.2 /etc/resolv.conf:DNS 写法、优先级与覆盖问题

DNS 的永久配置文件是 /etc/resolv.conf,PDF 里给出了完整样例:

# /etc/resolv.conf search lingdian.com # 默认查找域名,解析短主机名时自动补全 nameserver 202.96.128.68 # 首选 DNS 服务器 nameserver 219.136.241.206 # 备用 DNS 服务器

search 行表示当解析“mail”这类不完整域名时,系统会先尝试 mail.lingdian.com 再尝试 mail。nameserver 每行一个,文件中最多可写 3 条记录,系统优先使用最上面那条,第一条不通才轮到第二条。修改 resolv.conf 是即时生效的,不需要重启网络服务,普通程序在解析时读到新内容,这也是排查 DNS 问题时为什么可以先改文件再立刻 nslookup 验证的原因。

验证当前系统用的是哪个 DNS,可以在 nslookup 交互模式下执行 server 命令来查看。这个命令读的正是 /etc/resolv.conf 里的配置,所以改完文件后执行 nslookup 进入交互模式,输入 server 就能确认当前生效的 DNS 地址;也可以直接 nslookup 一个域名名,输出里的 Server 字段会显示用了哪个 DNS 解析出的结果。

这里要提醒一句:NetworkManager 管理的系统会把 resolv.conf 当成自己的缓存文件,手动编辑后可能被覆盖回网络连接里配置的 DNS。所以判断“改了没生效”之前,先确认系统里有没有 NetworkManager 在跑,有的话优先用 nmcli 改 IPv4 的 DNS 配置,或者干脆停掉 NetworkManager 再手写 resolv.conf,二选一,不要两边同时写。另外,resolv.conf 里最多 3 条 nameserver 的限制是协议和 libc 解析器的约定,写第 4 条会被忽略,不是系统 bug。

4. 让 Linux 当路由器:转发、静态路由与 Zebra

4.1 先开转发再谈路由:ip_forward 与 route 命令

把 Linux 变成路由器,第一步是打开内核的 IP 转发。PDF 里的做法是一条 echo:

# 临时开启 IP 转发,1 开启,0 关闭 echo 1 > /proc/sys/net/ipv4/ip_forward

这条命令立即生效,但重启后恢复默认值 0。Linux 默认不开转发是出于安全和隔离考虑,不需要路由功能的机器转发打开后,相当于无防护地让数据包在网卡间穿梭。永久开启的常见做法是写进 /etc/sysctl.conf:

# /etc/sysctl.conf 追加一行 net.ipv4.ip_forward = 1 # 立即应用,不用重启 sysctl -p

sysctl -p 会重新读取 /etc/sysctl.conf 并应用其中配置,不需要重启机器。实验环境里如果只是临时做个 NAT 或转发测试,echo 1 足够,但生产环境一定走 sysctl.conf,否则机器一重启转发就关了,业务流量瞬间断掉。

开启转发后,添加静态路由用 route 命令。PDF 里给出了两条典型写法:

# 指定网关转发 route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 # 直接走本机 eth0 网卡出去,不指定网关 route add -net 10.0.0.0 netmask 255.0.0.0 dev eth0

两条命令的区别在于出口方式:gw 指定下一跳路由器地址,适合标准的三层路由环境,前提是网关地址必须和本机网卡在同一网段,否则网关不可达;dev eth0 直接从指定网卡把报文送出去,适合点到点链路或者目标网段与本机直连的场景。删除路由时只要把 add 改成 del,其它参数不变。PDF 里的另一种等价写法是 route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.0.1,也就是把默认路由写成一条 0.0.0.0/0 的静态路由,效果和 route add default gw 192.168.0.1 相同,但 default 关键字更不容易写错。

用 route 命令加的路由同样是临时生效,重启后丢失。要永久保留,常见做法是把命令写进 /etc/rc.local,或者在 /etc/sysconfig/network-scripts/ 下新建 route-ethX 文件。route-ethX 的内容格式很简单,比如 /etc/sysconfig/network-scripts/route-eth0 里写:

10.0.0.0/8 via 192.168.0.1

这种写法在 CentOS/RHEL 系里由 network 脚本自动加载,比 rc.local 更干净。配置完用 route -n 或 ip route show 验证,注意看 Destination 和 Gateway 两列是否符合预期。

4.2 Zebra 与 ripd:类 Cisco 命令的路由协议配置

PDF 里还介绍了一个老牌路由软件 Zebra,配置风格和 Cisco 设备几乎一致,适合在 Linux 上跑动态路由协议。先设置连接密码和特权密码:

# /etc/zebra/zebra.conf password abc # 连接 Zebra 时需要的密码 enable password 123 # 进入特权模式的密码

启动 Zebra 服务后,要为具体路由协议建配置文件。以 RIP 为例,先 touch 出 ripd.conf,再启动 ripd 服务:

service zebra start touch /etc/zebra/ripd.conf service ripd start

进入 Zebra 的配置界面有两种方式:本地执行 vtysh,或者远程 telnet 127.0.0.1 2601。vtysh 不需要密码也能进,有密码时会显示出来,它只适用于本机登录;telnet 方式默认不允许无密码连接,适合远程管理。进入后的命令格式和 Cisco 路由器一样,配置 OSPF 或 RIP 时先进入 configure terminal,再 router rip、network 宣告网段,这些操作在熟悉 Cisco 命令的人看来几乎零成本:

# /etc/zebra/ripd.conf 示例 hostname router1 router rip network 192.168.1.0/24

配置完退出之前一定要 write 保存,否则重启后配置丢失。Zebra 是较老的工具,现代发行版里对应的实现是 quagga 和 frr,命令风格一脉相承,理念没变。PDF 里的要点放在“Linux 也能跑动态路由协议”这个思路上:需要模拟多路由器网络实验、或者学习动态路由协议时,直接用 Linux 机器,不必非得用模拟器,配置方式与 Cisco 设备高度相似。

5. 避坑:五条网络配置翻车记录与排查套路

5.1 现象:service network restart 直接失败,网卡起不来

原因:ifcfg-eth0 里 BOOTPROTO=dhcp 却残留了 IPADDR、NETMASK、GATEWAY 这几个静态字段。老系统的 network 脚本启动时会校验 DHCP 模式下的地址字段,遇到静态地址残留就报错退出,表现为重启网络服务失败或某块网卡一直 down。解决:DHCP 模式的网卡配置里一个静态地址字段都不要留;要配静态 IP 就把 BOOTPROTO 改成 static。检查时用 cat -A 看文件里有没有看不见的特殊字符,有些配置从 Windows 编辑后拷过来会带 \r,会导致脚本语法错误,连报错信息都是乱的。遇到这种问题就先执行 dos2unix 转一遍格式,再去处理字段冲突。

5.2 现象:手动改了 resolv.conf,过一会儿内容又变回原样

原因:NetworkManager 或 dhclient 在后台接管了 resolv.conf 的生成,手写的内容会被覆盖。很多人在云服务器上遇到这个问题,改完 DNS 测试正常,几分钟后解析又变慢,一看文件内容被还原了。解决:NetworkManager 管理的环境,用 nmcli 修改连接的 DNS,例如 nmcli con mod 系统连接名 ipv4.dns "1.2.4.8 223.5.5.5" 再 nmcli con up 重连,这样 DNS 是持久化的且不会被还原。实验环境如果非要直接锁文件,可以用 chattr +i /etc/resolv.conf 加不可修改属性,但锁了之后系统工具也改不了,后续 NetworkManager 升级可能报错,用完后记得 chattr -i 解锁。判断是不是 NetworkManager 接管,先看 systemctl status NetworkManager 是否 active,再看 /etc/resolv.conf 头部有没有“Generated by”的字样。

5.3 现象:默认网关被“抢”,出口指向错误的网卡

原因:服务器有多块网卡,每块网卡的 ifcfg 文件里都写了 GATEWAY。network 脚本启动时会逐块激活网卡,每激活一块就把自己的 GATEWAY 写进路由表,最后启动的网卡覆盖了前面的默认路由,导致本应走 eth0 的流量从 eth1 出去了,表现为 ping 内网通、ping 外网不通,或者业务流量路径完全错误。解决:只在一张主网卡的 ifcfg 文件里写 GATEWAY,其它网卡文件全部不写;如果多网卡需要到特定网段走不同出口,用 /etc/sysconfig/network-scripts/route-ethX 文件加静态路由,而不是在多个文件里重复定义默认网关。排查时先 ip route show 看默认路由的 dev 指向哪块网卡,再对照 ifcfg 文件确认是哪块网卡把自己的 GATEWAY 写进去了。

5.4 现象:远程改 IP 把自己断在门外,重启后配置又还原

原因:远程 SSH 登录后直接敲 ifconfig eth0 新地址,而新地址和当前网段不互通,当前连接立刻断开,而且 ifconfig 不写配置文件,即使不断开,重启也会还原。最危险的是这类操作发生在没有带外管理(比如 IPMI 或控制台)的服务器上,断连后只能去机房。解决:远程改 IP 之前,先把改动写进配置文件,然后用 ifdown eth0 && ifup eth0 重载单个接口,不要用 network restart 这种全局重启方式。更稳妥的做法是加一道“后悔药”:用 at 命令在 5 分钟后执行一条恢复脚本,把配置文件改回原地址并重载网卡。如果 5 分钟内一切正常,手动 crontab -l 里找到该任务并删除;如果真掉线了,5 分钟脚本会自动把配置扳回原样,至少保住远程通道。从那以后我每次远程改 IP 都会强制走一遍这个流程。

5.5 现象:route add 执行成功,但路由表里没有预期条目

原因:route add -net 后面跟的是主机地址而不是网段地址。例如 route add -net 10.0.0.1 netmask 255.0.0.0 gw 192.168.0.1,10.0.0.1 配合 255.0.0.0 掩码,内核把它当成 10.0.0.0/8 段里的某个主机路由处理,和预期的“去 10.0.0.0/8 网段走指定网关”完全不是一回事。另一个常见原因是 gw 地址与本地网卡不在同一个二层网段,路由添加虽然没报错,但网关不可达,路由永不生效。解决:网段路由写成 route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1,net 后面跟网段号,不要跟主机 IP;只想给单台主机加路由就用 route add -host 10.0.0.1 gw 192.168.0.1。验证一律用 ip route show,看 Destination、Gateway、Iface 三列是否与自己预期一致。这条命令是 PDF 里出现过的原语法,也是最容易写错的地方。

6. 验证网络配置的三板斧:从 ip 命令到日志定位问题

改完网络配置,验证比配置本身更重要。我有一套固定验证流程,先跑三条只读命令确认内核当前状态:

ip addr # 查看接口 IP 是否生效 ip route show # 查看默认路由和静态路由 ip route get 8.8.8.8 # 查看去外网的实际出口

老系统没有 ip 命令时,等价的信息来源是 ifconfig、route -n。ip route get 这条命令很实用,它能告诉你发往某个目标地址的报文走哪块网卡、用哪个网关,改完路由后第一个跑它,比看整张路由表直观得多。

连通性测试由近到远逐步排查。先 ping 网关地址,通了说明本机到二层没问题;再 ping 一个外网 IP,比如 223.5.5.5,通了说明默认路由生效;然后 nslookup 一个域名,比如 nslookup www.baidu.com,确认 DNS 解析正常。这几步的定位逻辑是:网关不通查网线和交换机端口,外网 IP 不通查默认路由和防火墙规则,域名解析不了查 resolv.conf 和 DNS 服务器连通性。traceroute 在路径长时间不通时用来定位卡在哪一跳,能确认报文是被防火墙丢弃还是路由黑洞。

网络服务启动失败时,光看 systemctl 的报错往往信息太少,要翻日志:

grep -i network /var/log/messages | tail -50

老 CentOS/RHEL 系统的网络脚本执行日志都在这里,报错会具体到“ifcfg-eth0: line 5: command not found”这类级别,能直接看出是字段写错还是文件格式有问题。systemd 环境下配合 journalctl -u network 一起看,信息更全。

改配置前先备份是我的铁律,一条 cp 命令的事:

cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/backup/ifcfg-eth0.$(date +%F)

备份文件带日期,改坏了直接还原。远程环境再叠加一层 at 定时恢复,前面 5.4 里说的后悔药机制,实际执行就是把恢复脚本丢进 at 队列,给断连留条后路。从那以后我每次改网络配置都强制走完整套流程:备份、改文件、单接口重载、ip 命令验证、由近到远测连通。这套流程看着繁琐,但救过我太多次,希望帮到你。

本文还有配套的精品资源,点击获取

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

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

立即咨询