Linux route 指令
route 是 Linux 系统中一款经典的网络配置工具,用于查看和操作 IP 路由表。它通过管理内核路由表,控制数据包在网络中的转发路径,是系统管理员和网络工程师进行网络配置、故障排查和优化路由策略的核心工具之一。route 命令由 net-tools 软件包提供,尽管现代 Linux 发行版推荐使用 ip route(iproute2 工具集),route 因其简单直观仍广泛应用于脚本和传统环境。
📚 什么是 route 指令?
概述
route 命令是 Linux 系统中用于管理和配置 IP 路由表的工具,属于 net-tools 软件包。它允许用户查看当前路由表、添加或删除静态路由、设置默认网关,并调整路由优先级。路由表决定数据包从源主机到目标主机的转发路径,基于目标 IP 地址、网络掩码、网关和接口等信息。route 通过直接操作内核的路由表(存储在 /proc/net/route),实现对 IPv4 路由的动态管理。route 的设计注重简单性和兼容性,广泛支持于 Linux 发行版(如 Ubuntu、CentOS、Arch Linux),尽管在现代系统中逐渐被功能更强大的 ip route 替代。
核心概念
- 路由表:内核维护的表格,包含路由规则,决定数据包的转发路径。
- 路由类型:
- 直接路由:直连网络(如本地接口的子网)。
- 静态路由:手动配置的固定路径。
- 默认路由:当无匹配路由时使用的路径(默认网关)。
- 动态路由:由路由协议(如 RIP、OSPF)生成。
- 路由条目:
- 目标(Destination):目标 IP 或网段(如 192.168.1.0/24)。
- 网关(Gateway):下一跳 IP 地址。
- 网络掩码(Genmask):定义网段范围。
- 接口(Iface):数据包发送的网络接口(如 eth0)。
- 标志(Flags):如 U(路由可用)、G(网关路由)。
- 默认网关:处理未知目标的路由,通常指向路由器。
- 路由优先级:由度量值(Metric)决定,值越小优先级越高。
核心特点
- 简单直观:命令格式清晰,易于学习和使用。
- 动态管理:支持运行时添加或删除路由。
- 跨平台兼容:支持大多数 Unix-like 系统。
- 脚本友好:易于集成到 Shell 脚本和自动化任务。
- 轻量高效:资源占用低,适合嵌入式设备。
基本语法
route [选项] [命令] [参数]
参数说明
- 命令:
- add:添加路由。
- del:删除路由。
- 无命令:显示路由表。
- 选项:
- -n:显示数字 IP 地址,不解析主机名。
- -v:详细输出。
- -F:显示主路由表(默认)。
- -C:显示路由缓存(较少使用)。
- –help:显示帮助信息。
- 参数:
- -net NET/MASK:目标网络和掩码(如 -net 192.168.2.0/24)。
- -host HOST:目标主机 IP(如 -host 192.168.1.100)。
- gw GATEWAY:指定网关 IP。
- dev IFACE:指定接口(如 dev eth0)。
- metric M:设置路由优先级(度量值)。
- default:配置默认网关。
输出行为
- 默认:显示当前路由表,包含目标、网关、掩码、接口等。
- 修改:通过 add 或 del 更新路由表,立即生效。
- 错误:若参数无效或无权限,报错并退出。
注意事项
-
权限要求:
-
修改路由表需 root 权限:
sudo route add default gw 192.168.1.1
-
-
持久化配置:
- route 修改为临时,重启失效,需编辑配置文件(如 /etc/network/interfaces)。
-
接口状态:
-
目标接口必须启用:
ip link show eth0
-
-
替代工具:
-
现代系统推荐 ip route,功能更全面:
ip route show
-
-
路由冲突:
- 重复或冲突的路由可能导致网络问题。
🔧 route 的常见用途
应用场景
- 网络配置:设置默认网关或静态路由。
- 故障排查:检查路由表,定位数据包丢失或错误路径。
- 多网卡管理:配置多接口路由策略。
- VPN 设置:添加特定网络的路由。
- 负载均衡:通过度量值实现简单路由选择。
🛠️ 基础用法与示例
准备工作
以下示例假设运行在 Bash shell(如 Ubuntu 22.04 或 CentOS 8,当前时间为 2025-06-09 08:31 CST)。我们将在虚拟机或物理机上运行 route,网络环境包含接口 eth0(IP:192.168.1.100/24)和 eth1(IP:192.168.2.100/24),默认网关为 192.168.1.1。为确保修改权限,所有写操作以 sudo 运行。
安装 route
route 由 net-tools 提供,大多数发行版默认安装,检查:
route –version
若未安装:
-
Ubuntu:
sudo apt-get update
sudo apt-get install net-tools -
CentOS:
sudo dnf install net-tools
-
Arch Linux:
sudo pacman -S net-tools
检查网络
确认接口状态:
ip addr show
输出示例:
2: eth0: <BROADCAST,UP> mtu 1500
inet 192.168.1.100/24 brd 192.168.1.255
3: eth1: <BROADCAST,UP> mtu 1500
inet 192.168.2.100/24 brd 192.168.2.255
示例 1:查看路由表
命令
route
解释
- 默认显示内核路由表,包含目标、网关、掩码等。
输出示例
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 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
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
说明
- default:默认网关。
- 0.0.0.0:表示无网关(直连)。
- UG:表示网关路由。
示例 2:数字格式显示
命令
route -n
解释
- -n:不解析主机名,仅显示 IP 地址。
输出示例
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
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
示例 3:添加默认网关
命令
sudo route add default gw 192.168.1.1 dev eth0
解释
- 添加默认路由,网关为 192.168.1.1,通过 eth0。
输出示例
-
无输出,验证:
route -n
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
示例 4:添加静态路由
命令
sudo route add -net 10.0.0.0/24 gw 192.168.2.1 dev eth1
解释
- 为 10.0.0.0/24 网段添加路由,网关为 192.168.2.1,通过 eth1。
输出示例
-
验证:
route -n
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
10.0.0.0 192.168.2.1 255.255.255.0 UG 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
示例 5:删除路由
命令
sudo route del -net 10.0.0.0/24
解释
- 删除 10.0.0.0/24 的路由。
输出示例
-
验证:
route -n
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
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
示例 6:添加主机路由
命令
sudo route add -host 192.168.3.100 gw 192.168.2.1 dev eth1
解释
- 为单一主机 192.168.3.100 添加路由。
输出示例
-
验证:
route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.3.100 192.168.2.1 255.255.255.255 UGH 0 0 0 eth1
🚀 常用选项与功能
以下是 route 的常用选项,分类为路由管理、显示控制和高级配置。
🔍 路由管理
add | 添加路由 |
del | 删除路由 |
-net NET/MASK | 指定目标网段 |
-host HOST | 指定目标主机 |
gw GATEWAY | 指定网关 |
dev IFACE | 指定接口 |
示例
sudo route add -net 172.16.0.0/16 gw 192.168.1.2 dev eth0
📜 显示控制
-n | 不解析主机名 |
-v | 详细输出 |
-F | 显示主路由表 |
-C | 显示路由缓存 |
示例
route -vn
📁 高级配置
metric M | 设置路由优先级 |
reject | 拒绝路由 |
mod | 修改现有路由 |
示例
sudo route add -net 10.0.0.0/24 gw 192.168.1.1 metric 10
🌟 高级用法
概述
route 的高级用法涉及多网卡路由、VPN 配置、负载均衡、持久化路由和自动化脚本,适合复杂网络环境。
🛡️ 1. 多网卡路由配置
命令
sudo route add -net 10.0.0.0/24 gw 192.168.1.1 dev eth0 metric 10
sudo route add -net 10.0.0.0/24 gw 192.168.2.1 dev eth1 metric 5
解释
- 为同一网段配置两条路由,eth1 优先(度量值较低)。
输出示例
-
验证:
route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 192.168.2.1 255.255.255.0 UG 5 0 0 eth1
10.0.0.0 192.168.1.1 255.255.255.0 UG 10 0 0 eth0
🔍 2. VPN 路由配置
命令
sudo route add -net 192.168.100.0/24 gw 10.8.0.1 dev tun0
解释
- 为 VPN 网络 192.168.100.0/24 添加路由,通过 VPN 接口 tun0。
输出示例
-
验证:
route -n
🔄 3. 持久化路由
配置
-
Ubuntu(/etc/network/interfaces):
sudo nano /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/24 gw 192.168.1.2 -
CentOS(/etc/sysconfig/network-scripts/route-eth0):
sudo nano /etc/sysconfig/network-scripts/route-eth0
添加:
10.0.0.0/24 via 192.168.1.2 dev eth0
-
应用:
sudo systemctl restart networking
解释
- 确保路由重启后生效。
⚡ 4. 路由拒绝
命令
sudo route add -net 192.168.3.0/24 reject
解释
- 拒绝访问 192.168.3.0/24,返回不可达错误。
输出示例
-
测试:
ping 192.168.3.1
# Network is unreachable
🔐 5. 自动化路由脚本
脚本
#!/bin/bash
IFACE="eth0"
GW="192.168.1.1"
NET="10.0.0.0/24"
sudo route del -net "$NET" 2>/dev/null
sudo route add -net "$NET" gw "$GW" dev "$IFACE"
echo "Route for $NET added via $GW"
解释
- 自动删除旧路由并添加新路由。
输出示例
Route for 10.0.0.0/24 added via 192.168.1.1
⚠️ 使用 route 时的注意事项
权限问题:
-
非 root 用户无法修改路由:
route add default gw 192.168.1.1
# SIOCADDRT: Permission denied
接口状态:
-
确保接口启用:
sudo ip link set eth0 up
路由冲突:
-
检查现有路由,避免重复:
route -n
持久化配置:
-
使用配置文件保存路由:
sudo nano /etc/network/interfaces
现代替代:
-
优先考虑 ip route:
ip route add 10.0.0.0/24 via 192.168.1.2
🛠️ 高级技巧与实战案例
概述
以下是高级技巧和实战案例,展示 route 在复杂场景中的应用。
🖥️ 案例 1:双 ISP 负载均衡
脚本
#!/bin/bash
sudo route add default gw 192.168.1.1 dev eth0 metric 10
sudo route add default gw 192.168.2.1 dev eth1 metric 5
echo "Dual ISP routes configured"
解释
- 配置两个默认网关,eth1 优先。
- 实现简单负载均衡。
输出示例
Dual ISP routes configured
📦 案例 2:VPN 流量分流
脚本
#!/bin/bash
sudo route add -net 192.168.100.0/24 gw 10.8.0.1 dev tun0
sudo route add -net 0.0.0.0/1 gw 192.168.1.1 dev eth0
sudo route add -net 128.0.0.0/1 gw 192.168.1.1 dev eth0
echo "VPN split routing configured"
解释
- VPN 流量走 tun0,其他流量走 eth0。
输出示例
VPN split routing configured
🔒 案例 3:路由监控
脚本
#!/bin/bash
LOG="/tmp/route_monitor.log"
echo "Route check: $(date)" >> "$LOG"
route -n >> "$LOG"
if ! route -n | grep -q "192.168.1.1"; then
echo "Default gateway missing!" >> "$LOG"
fi
解释
- 定期检查路由表,记录异常。
输出示例
- /tmp/route_monitor.log 包含路由状态。
📈 案例 4:动态路由调整
脚本
#!/bin/bash
TARGET="10.0.0.0/24"
GW1="192.168.1.1"
GW2="192.168.2.1"
if ping -c 1 "$GW1" &>/dev/null; then
sudo route add -net "$TARGET" gw "$GW1" dev eth0
else
sudo route add -net "$TARGET" gw "$GW2" dev eth1
fi
解释
- 根据网关可用性动态选择路由。
输出示例
- 路由自动配置。
🔧 案例 5:批量路由管理
脚本
#!/bin/bash
ROUTES=(
"10.0.0.0/24 192.168.1.2 eth0"
"172.16.0.0/16 192.168.2.1 eth1"
)
for route in "${ROUTES[@]}"; do
NET=$(echo "$route" | awk '{print $1}')
GW=$(echo "$route" | awk '{print $2}')
DEV=$(echo "$route" | awk '{print $3}')
sudo route add -net "$NET" gw "$GW" dev "$DEV"
done
解释
- 批量添加路由。
输出示例
- 路由表更新。
🔗 结合其他工具
-
With ip:
route -n
ip route show -
With ping:
ping -c 4 10.0.0.1 && route -n
-
With cron:
0 * * * * route -n >> /tmp/route.log
📝 总结
route 是 Linux 系统中简单而强大的路由管理工具,适合网络配置、故障排查和策略优化。本文从基础到高级,结合详细示例和注意事项,全面介绍了 route 的功能。尽管 ip route 逐渐取代其地位,route 仍因其易用性在许多场景中不可或缺。
评论前必须登录!
注册