最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux使用-route命令查看与修改IP路由表
时间:2026-07-13 09:20:46 编辑:袖梨 来源:一聚教程网
route 命令用于查看与操作 Linux 内核的 IP 路由表。它起源于 BSD 系统,在 net-tools 工具包中,是 Linux 早期管理网络路由的事实标准。但 从 2009 年起,net-tools 被标记为 deprecated,官方推荐使用 iproute2 套件中的 ip route 命令。尽管如此,由于历史脚本和老教材的影响,route 命令仍在生产环境中大量使用,值得掌握以便兼容维护。

RHEL 8 / CentOS 8 / Ubuntu 18.04+ 已不再默认安装 net-tools,需手动 yum install net-tools 或 apt install net-tools。
简介
| 项目 | 说明 |
|---|---|
| 命令全称 | route(已废弃) |
| 所属包 | net-tools(RHEL/CentOS 默认 / Ubuntu 新版需手动装) |
| 现代替代 | ip route(iproute2 套件) |
| 配置文件 | /etc/sysconfig/network-scripts/route-IFACE(RHEL)
|
| 操作对象 | Linux 内核的 路由表(Routing Table) |
| 默认行为 | 显示路由表(route 等价于 route -n 配合 netstat -rn) |
| 权限 | 查看普通用户即可,修改需 root |
为什么会有多个路由表?
Linux 内核支持 多路由表(默认 0~255 共 256 张),由 /etc/iproute2/rt_tables 定义。默认有:
local(255):本机地址main(254):默认主表default(253):默认兜底
route 命令只能操作 main 表;要操作其他表需 ip route show table 100 或策略路由 ip rule。
语法
# 查看路由表 route [-nNnee] # 显示 route -6 # IPv6 等价于 route -A inet6 # 修改路由 route add [-net|-host] TARGET [netmask MASK] [gw GW] [metric M] [mss M] [window W] [irtt I] [reject] [mod] [dyn] [reinstate] [[dev] Iface] route del [-net|-host] TARGET [netmask MASK] [gw GW] [metric M] [[dev] Iface]
route 旧版语法需在最后写 dev eth0;现代也可 -iface eth0。参数顺序对新旧版有差异,建议显式使用 -net/-host 区分。
选项
| 选项 | 简写 | 说明 |
|---|---|---|
--numeric | -n | 数字格式显示(不解析 DNS) |
--net | 目标为网络(route add -net 10.0.0.0/8 ...) | |
--host | 目标为主机(route add -host 192.168.1.5 ...) | |
--netmask MASK | 配合 -net 指定掩码(route add -net 10.0.0.0 netmask 255.0.0.0) | |
gw GW | 指定网关(gw 192.168.1.1) | |
metric M | 路由度量值(越小越优) | |
mss M | TCP MSS 限制 | |
window W | TCP 窗口大小(KB) | |
irtt I | 初始 RTT(ms) | |
reject | 拒绝路由(blackhole) | |
mod / dyn / reinstate | 动态路由标志(已被 BGP/OSPF 取代) | |
dev Iface | 指定出口网卡(关键参数) | |
-A FAMILY | 地址族:inet(默认 IPv4)、inet6(IPv6)、ax25 等 | |
-v / --verbose | 详细输出 | |
-e | 用 netstat 格式显示(更详细) | |
-F | 显示 FIB 转发信息库(默认) | |
-C | 显示内核路由缓存(已废弃,内核 3.6+ 移除) | |
-V / --version | 版本 | |
-h / --help | 帮助 |
实战示例
示例 1:route -n 查看路由表(最常用)
# 显示路由表(数字形式,不解析 DNS) $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 10.0.0.0 10.0.0.1 255.0.0.0 UG 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
字段详解:
| 字段 | 含义 | 示例解读 |
|---|---|---|
Destination | 目标网络/主机 | 0.0.0.0 = 默认路由(catch-all) |
Gateway | 下一跳网关 | 0.0.0.0 = 直连(不需要网关) |
Genmask | 子网掩码 | 0.0.0.0 用于默认路由 |
Flags | 标志位 | U(up启用) G(网关) H(主机) D(动态) M(修改) A(已被 arp) C(缓存) !(拒绝) |
Metric | 距离度量 | 多路由同目标时,越小越优先 |
Ref | 引用次数 | 已弃用(net-tools 已无意义) |
Use | 查找计数 | 此路由被查找过的次数 |
Iface | 出口网卡 | 实际数据包走哪张网卡 |
示例路由解析:
0.0.0.0 → 192.168.1.1 UG:默认路由,所有非本地流量走192.168.1.110.0.0.0/8 → 10.0.0.1 UG:去内网 10.x.x.x 走eth1出口192.168.1.0/24 → 0.0.0.0 U:直连eth0网段169.254.0.0/16 → 0.0.0.0 U:link-local 地址(DHCP 失败时自动分配)
小技巧:如果不加 -n,route 会尝试 DNS 反查 Gateway 字段,在网络隔离环境会卡顿数秒。永远记得加 -n。
示例 2:添加与删除路由
# ========== 添加主机路由(单 IP) ==========
# 目标:到达 192.168.2.100 这台主机,走 192.168.1.254 网关,从 eth0 出
$ sudo route add -host 192.168.2.100 gw 192.168.1.254 dev eth0
# 验证
$ route -n | grep 192.168.2.100
192.168.2.100 192.168.1.254 255.255.255.255 UGH 0 0 0 eth0
# Flags 是 UGH(Up + Gateway + Host)
# ========== 添加网络路由(子网) ==========
# 目标:到达 172.16.0.0/16 网段
$ sudo route add -net 172.16.0.0 netmask 255.255.0.0 gw 192.168.1.1 dev eth0
# 等价简化写法(用 CIDR,net-tools 新版支持)
$ sudo route add -net 172.16.0.0/16 gw 192.168.1.1 dev eth0
# 验证
$ route -n | grep 172.16
172.16.0.0 192.168.1.1 255.255.0.0 UG 0 0 0 eth0
# ========== 设置默认路由 ==========
$ sudo route add default gw 192.168.1.1 dev eth0
# 等价
$ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.1.1 dev eth0
# ========== 带 metric 的多路由 ==========
# 同一目标两条路由,metric 小者优先
$ sudo route add -net 10.10.0.0/16 gw 192.168.1.2 metric 100
$ sudo route add -net 10.10.0.0/16 gw 192.168.1.3 metric 200
# 10.10.x.x 优先走 192.168.1.2;它挂了才走 .3
$ ip route get 10.10.5.5
10.10.5.5 via 192.168.1.2 dev eth0 src 192.168.1.100 uid 0
cache
# ========== 删除路由 ==========
$ sudo route del -net 172.16.0.0/16 gw 192.168.1.1
# 注意:删除的网关和目标要匹配
$ sudo route del default gw 192.168.1.1
# ========== 添加黑洞路由(丢弃包) ==========
$ sudo route add -host 10.1.2.3 reject
$ ping 10.1.2.3
connect: Network is unreachable
示例 3:route 与 ip route 对比
# 同一个操作,net-tools vs iproute2 # 1. 查看路由表 $ route -n # net-tools(旧) $ ip route show # iproute2(新,等价) $ ip -4 route # 仅 IPv4 $ ip -6 route # 仅 IPv6 $ ip route show table main # 查看 main 表 # 2. 查看默认路由 $ route -n | grep ^0.0.0.0 $ ip route show default default via 192.168.1.1 dev eth0 # 3. 添加默认路由 $ route add default gw 192.168.1.1 $ ip route add default via 192.168.1.1 # 4. 添加网络路由 $ route add -net 10.0.0.0/8 gw 192.168.1.1 $ ip route add 10.0.0.0/8 via 192.168.1.1 # 5. 删除路由 $ route del -net 10.0.0.0/8 $ ip route del 10.0.0.0/8 # 6. 添加黑洞路由 $ route add -host 10.1.2.3 reject $ ip route add blackhole 10.1.2.3 # 7. 查看路由来源(OSPF/BGP/静态) $ ip route show proto static # route 不支持 # 8. 添加策略路由 $ echo "100 custom" >> /etc/iproute2/rt_tables $ ip route add 10.20.0.0/16 dev eth1 table custom $ ip rule add from 192.168.1.100/32 lookup custom # route 完全不支持策略路由
为什么推荐迁移到 ip route?
| 维度 | route (net-tools) | ip route (iproute2) |
|---|---|---|
| 维护 | 已停止维护(2009) | 持续维护,netlink 接口 |
| 策略路由 | ❌ 不支持 | ✅ 支持多表(ip rule) |
| 高级特性 | ❌ 无 | ✅ 黑洞、均衡、ECMP、tunnel |
| 性能 | 解析慢、需重启 net | 实时生效,异步更新 |
| 推荐 | 仅作兼容 | 生产首选 |
示例 4:持久化路由配置
重要:route add 是临时修改,重启网络或系统后会丢失。生产环境必须持久化。
方法 1:RHEL/CentOS - /etc/sysconfig/network-scripts/route-IFACE
# 文件名必须与网卡名对应:route-eth0, route-bond0 $ sudo vim /etc/sysconfig/network-scripts/route-eth0 # 格式 1(传统 net-tools 风格): 10.10.0.0/16 via 192.168.1.1 dev eth0 172.16.0.0/12 via 192.168.1.1 dev eth0 # 格式 2(iproute2 风格,RHEL 7.4+ 推荐): 10.10.0.0/16 via 192.168.1.1 172.16.0.0/12 via 192.168.1.1 # 重新加载网络 $ sudo nmcli connection reload # 或 $ sudo systemctl restart NetworkManager
方法 2:Debian/Ubuntu - /etc/network/interfaces
# 旧版 /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
up route add -net 10.10.0.0/16 gw 192.168.1.1 dev eth0
down route del -net 10.10.0.0/16 gw 192.168.1.1 dev eth0
# up/down 钩子在网卡启停时执行
方法 3:Netplan(Ubuntu 18.04+ 推荐)
# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
routes:
- to: 10.10.0.0/16
via: 192.168.1.1
- to: 172.16.0.0/12
via: 192.168.1.1
方法 4:NetworkManager 命令行
# 添加永久路由(NM 自动写入配置) $ sudo nmcli connection modify eth0 +ipv4.routes "10.10.0.0/16 192.168.1.1" $ sudo nmcli connection up eth0 $ ip route show
示例 5:诊断网络不可达(实战案例)
# 问题:能 ping 通网关 192.168.1.1,但 ping 不到外网 8.8.8.8 # 1. 查看路由表 $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 # ⚠️ 没有默认路由!或者默认路由网关不对 # 2. 修复:添加正确默认路由 $ sudo route add default gw 192.168.1.1 dev eth0 # 3. 验证 $ ping -c 2 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=12.3 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=119 time=11.8 ms # ====== 进阶案例:多网卡路由冲突 ====== # 两张网卡都接 0.0.0.0 默认路由,metric 一样 → 流量乱跳 # 解决:调整 metric $ sudo route add default gw 192.168.1.1 dev eth0 metric 100 $ sudo route add default gw 10.0.0.1 dev eth1 metric 200 # 优先走 eth0
示例 6:配合 traceroute 验证路由生效
# 修改路由后,验证包实际走的路径 $ traceroute -n 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max 1 192.168.1.1 0.512 ms 2 10.0.0.1 5.234 ms 3 202.96.209.1 12.456 ms ... # 添加一条到 8.8.8.8 的特殊路由(测试用) $ sudo route add -host 8.8.8.8 gw 10.0.0.1 dev eth1 # 走 eth1(备用线路) $ traceroute -n 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max 1 10.0.0.1 1.234 ms # ← 走了新路由 2 ... # 测试完删除 $ sudo route del -host 8.8.8.8 gw 10.0.0.1 dev eth1
注意事项
1. 修改路由的影响
错误的 route del default 会立刻断网(SSH 中执行小心),强烈建议在 物理/控制台 或带超时 情况下操作。
2. route 命令在主流新发行版缺失
RHEL 8+ / Ubuntu 18.04+ 默认不安装 net-tools,route 命令找不到。新脚本直接用 ip route,如需兼容旧系统:
command -v route >/dev/null || alias route='ip route' # 简易兼容
3. route add 不带 dev 可能选错网卡
系统有多个接口时(如 eth0 公网 + eth1 内网),务必显式 dev IFACE,避免选错出口。
4. 内核路由缓存已移除
早期 route -C(内核缓存)已被内核 3.6+ 移除,改用 ip route show cache(如可用)或 ss -r。
5. 路由与策略路由的取舍
简单场景 route add 够用;多 ISP 出口、内外网隔离、源地址控制 → 必须用 ip rule + ip route table 策略路由。
6. ECMP 负载均衡
route 只能一条一条加;ip route add ... nexthop 才能做多路径等价负载:
ip route add 0.0.0.0/0 nexthop via 192.168.1.1 dev eth0 nexthop via 10.0.0.1 dev eth1
7. 防火墙联动
添加路由后包仍被 iptables -j DROP 拦截是常见误区。路由只管"去哪",防火墙管"让不让过",排错两步都要看。
总结
route 是 Linux 网络的"历史教科书",虽然不再推荐新写,但维护老脚本时必须会看、能临时操作。本节重点:
- 核心参数:
-n(数字显示,永远加)、add/del -net/-host、gw、dev - 现代替代:
ip route/ip rule,net-tools 已 deprecated - 持久化:临时
route add,永久写/etc/sysconfig/network-scripts/route-IFACE(RHEL)或 Netplan(Ubuntu 18.04+) - 故障排查:先
route -n看默认网关,再traceroute验证路径 - 安全提示:修改默认路由前确认控制台可达,别让 SSH 自 杀
最终建议:新服务器、新脚本统一使用 ip route;遇到 route 命令报错 command not found 时,yum install net-tools 或 apt install net-tools 临时补齐。
相关命令
| 命令 | 用途 |
|---|---|
ip route | 现代推荐命令(iproute2) |
ip rule | 策略路由规则(多表) |
ip addr | 管理 IP 地址 |
ip link | 管理网卡链路层 |
ip neigh | ARP/ND 表(替代 arp) |
netstat -rn | 早期路由表查看(也属 net-tools) |
traceroute | 追踪包路径 |
ss -r | 显示路由缓存(推荐用 ip route get) |
arp / ip neigh | ARP 表管理 |
NetworkManager / nmcli | 高层网络管理 |
以上就是Linux使用-route命令查看/修改IP路由表的详细内容,更多关于Linux -route查看/修改IP路由表的资料请关注本站其它相关文章!
您可能感兴趣的文章:- Linux网络诊断工具ping、traceroute等命令实战指南
- Linux使用traceroute来进行网络诊断分析
- Linux利用traceroute命令发现负载均衡的实战案例
- 如何在Linux中route add命令添加路由(Linux route)
- Linux命令之网络命令route详解
相关文章
- 《和平精英》绿色伏地魔衣服怎么获得-雪山精英套装介绍 07-13
- 《和平精英》小团团和平小店入口指南-直播间限时抢购详解 07-13
- 曲奇云盘注销后多久可以重新注册 07-13
- 耐玩的打枪的游戏有哪些 2026流行的射击游戏下载 07-13
- 新手购买绿植避坑清单如何用 Kimi 整理 07-13
- 如何借助DeepSeek生成新手晒被子正确方法 07-13