ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Linux路由配置笔记:IP、DNS与路由修改的临时与永久生效

Linux路由配置笔记:IP、DNS与路由修改的临时与永久生效 简介面向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 eth0route 命令同样只改当前运行状态。添加默认网关的本质是往路由表里写一条 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 的 BOOTPROTOdhcp按配置文件获取修改配置文件之后需要重启网络服务或重启接口来让配置生效。常见的三条指令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 DEVICEeth0 # 网络接口名称必须与文件名后缀一致 ONBOOTyes # 开机时自动激活此接口 BOOTPROTOstatic # 静态地址方式不向 DHCP 请求 IPADDR192.168.1.10 # 本机 IP NETMASK255.255.255.0 # 子网掩码 GATEWAY192.168.1.1 # 默认网关逐字段说清楚DEVICE 必须和文件名里的 eth0 一致写错会导致脚本找不到接口ONBOOT 决定系统启动时要不要激活这块网卡生产服务器如果这里写 no开机后网卡是 down 的业务自然全断BOOTPROTO 可取 static、dhcp、none 三种值多数老系统里 none 和 static 等价但最稳妥的写法是 static。IPADDR、NETMASK、GATEWAY 只在静态模式下生效如果 BOOTPROTOdhcp 却残留了这些字段网络脚本很可能启动失败这是后面避坑章节的重点。改用 DHCP 获取网络配置时文件精简成三行# /etc/sysconfig/network-scripts/ifcfg-eth0DHCP 方式 DEVICEeth0 ONBOOTyes BOOTPROTOdhcp这里有个很容易忽略的细节DHCP 模式下千万不要再写 IPADDR、NETMASK、GATEWAY否则部分系统网络脚本会检测到字段冲突。需要一块网卡配多个 IP 时除改主文件外还可以新建 ifcfg-eth0:1 的虚拟接口文件字段内容和主文件相同IPADDR 写第二个地址这和命令行的 ifconfig eth0:1 是一一对应的关系。另一个配置文件是 /etc/sysconfig/network它管的是全局网络行为和主机名# /etc/sysconfig/network NETWORKINGyes # 是否启用网络no 会禁用全部网络 HOSTNAMEAaron # 设置的主机名 GATEWAY192.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.confDNS 写法、优先级与覆盖问题DNS 的永久配置文件是 /etc/resolv.confPDF 里给出了完整样例# /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 当路由器转发、静态路由与 Zebra4.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 -psysctl -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 里 BOOTPROTOdhcp 却残留了 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.110.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.1net 后面跟网段号不要跟主机 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 命令验证、由近到远测连通。这套流程看着繁琐但救过我太多次希望帮到你。本文还有配套的精品资源点击获取
返回列表