云计算百科
云计算领域专业知识百科平台

Linux route 指令

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 仍因其易用性在许多场景中不可或缺。

    更多技术分享,关注公众号:halugin

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux route 指令
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!