Linux route 命令
一、route 命令概述
route 命令是 Linux 系统中用于查看和操作 IP 路由表的强大工具。作为网络配置的基础命令,它允许管理员:
- 显示当前路由表信息
- 添加/删除静态路由
- 修改现有路由规则
- 管理网络数据包的传输路径
基本语法
route [选项] [操作] [目标] [命令参数]
二、路由表基础概念
1. 什么是路由表
路由表是操作系统内核维护的一个数据结构,它决定了网络数据包如何从源地址传输到目标地址。可以将其类比为:
"城市交通导航系统:当你想去某个目的地时,系统会告诉你应该走哪条路最快最有效"
2. 路由表关键字段
通过 route -n
查看路由表时,会显示以下重要列:
列名 | 说明 | 示例值 |
---|---|---|
Destination | 目标网络或主机 | 192.168.1.0 |
Gateway | 下一跳网关 | 192.168.1.1 |
Genmask | 网络掩码 | 255.255.255.0 |
Flags | 路由标志 | U (路由已启用) |
Metric | 路由成本 | 0 |
Iface | 出口接口 | eth0 |
三、route 命令常用操作
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 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
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 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2. 添加路由
实例
# 添加到特定主机的路由
route add -host 192.168.1.100 dev eth0
# 添加到网络的路由
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1
# 添加默认网关
route add default gw 192.168.1.1
route add -host 192.168.1.100 dev eth0
# 添加到网络的路由
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1
# 添加默认网关
route add default gw 192.168.1.1
3. 删除路由
实例
# 删除特定路由
route del -net 192.168.2.0 netmask 255.255.255.0
# 删除默认网关
route del default gw 192.168.1.1
route del -net 192.168.2.0 netmask 255.255.255.0
# 删除默认网关
route del default gw 192.168.1.1
四、命令选项详解
route 命令支持以下常用选项:
选项 | 说明 |
---|---|
-n | 以数字形式显示地址(不解析主机名) |
-e | 使用 netstat 格式显示路由表 |
-v | 显示详细操作信息 |
-A family | 指定地址族(inet, inet6等) |
-F | 显示内核 FIB 路由表 |
-C | 显示路由缓存 |
特殊命令参数:
add
:添加路由del
:删除路由-host
:操作针对特定主机-net
:操作针对整个网络gw
:指定网关dev
:指定网络接口
五、实际应用场景
场景1:多网卡路由配置
当服务器有多个网络接口时,需要指定不同网络的出口:
实例
# 让发往10.0.0.0/24的数据走eth1接口
route add -net 10.0.0.0 netmask 255.255.255.0 dev eth1
route add -net 10.0.0.0 netmask 255.255.255.0 dev eth1
场景2:VPN路由设置
连接VPN后,需要添加特定路由:
实例
# 只让特定网段走VPN隧道
route add -net 172.16.0.0 netmask 255.240.0.0 dev tun0
route add -net 172.16.0.0 netmask 255.240.0.0 dev tun0
场景3:临时测试路由
实例
# 临时添加路由进行测试(重启后失效)
route add -host 8.8.8.8 gw 192.168.1.254
ping 8.8.8.8 # 测试路由是否生效
route del -host 8.8.8.8 # 测试完成后删除
route add -host 8.8.8.8 gw 192.168.1.254
ping 8.8.8.8 # 测试路由是否生效
route del -host 8.8.8.8 # 测试完成后删除
六、持久化路由配置
通过route命令添加的路由在重启后会丢失,要实现永久生效:
1. Debian/Ubuntu 系统
编辑 /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.0.0.0 netmask 255.0.0.0 gw 192.168.1.2
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
up route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.2
2. RHEL/CentOS 系统
创建路由配置文件 /etc/sysconfig/network-scripts/route-eth0
:
10.0.0.0/8 via 192.168.1.2
七、常见问题排查
1. 路由不生效检查步骤
2. 典型错误解决
错误1:"SIOCADDRT: Network is unreachable"
- 原因:网关不在本地网络的直接广播域内
- 解决:先确保能ping通网关地址
错误2:"RTNETLINK answers: File exists"
- 原因:尝试添加已存在的路由
- 解决:先删除旧路由再添加,或使用
replace
选项
八、替代命令:ip route
现代Linux系统推荐使用ip route
命令:
实例
# 显示路由表
ip route show
# 添加路由
ip route add 10.0.0.0/8 via 192.168.1.2
# 删除路由
ip route del 10.0.0.0/8
ip route show
# 添加路由
ip route add 10.0.0.0/8 via 192.168.1.2
# 删除路由
ip route del 10.0.0.0/8
虽然ip route
更强大,但route
命令因其简单直观仍被广泛使用。
通过本指南,您应该已经掌握了route命令的核心用法。建议在实际环境中多练习这些命令,观察路由变化对网络连接的影响。遇到复杂路由问题时,可以结合traceroute
和ping
等工具进行综合诊断。
点我分享笔记