Bootstrap

linux 路由表详解

Linux 路由表是系统网络堆栈中的核心组件之一,用于决定数据包的传输路径。通过理解路由表的结构和配置,可以精确地控制流量的转发和分流。


Linux 路由表的结构

通过命令 ip route showroute -n 查看路由表。输出示例如下:

# ip route show
default via 192.168.1.1 dev eth0 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 
10.0.0.0/8 via 192.168.1.2 dev eth1
路由表字段说明

每条路由规则包含以下关键字段:

字段含义
目标地址 (prefix)数据包的目的网络或 IP,例如 192.168.1.0/24
网关 (via)下一跳地址,表示数据包要先发送到网关再转发。
网络设备 (dev)用于发送数据包的网络接口,例如 eth0tun0
协议 (proto)路由条目的来源(如 kernel 表示内核生成,static 表示手动配置)。
作用域 (scope)路由的范围,例如 link 表示直接连接。
源地址 (src)数据包从该源 IP 地址发送(通常在多网卡或多 IP 场景下使用)。
权重 (metric)路由优先级,数字越小优先级越高。

Linux 路由表中的路由类型

1. 默认路由 (Default Route)
default via 192.168.1.1 dev eth0
  • 匹配所有未明确指定目标地址的流量。
  • 通常指向网关(如路由器或上层交换机)。
2. 主机路由 (Host Route)
192.168.1.100 dev eth0 scope host
  • 仅匹配一个具体的 IP 地址(/32)。
  • 用于本地通信或特定流量控制。
3. 子网路由 (Subnet Route)
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
  • 匹配一个子网范围(如 /24 表示 256 个 IP)。
  • 常见于 LAN 环境。
4. 策略路由

结合多路由表和规则,允许基于条件(如源地址、协议类型)指定路由。


Linux 路由表的管理

可以使用 ip route 命令动态配置路由表。

1. 查看路由
ip route show

或简写:

ip r
2. 添加路由

添加静态路由

ip route add <网络地址>/<子网掩码> via <网关> dev <接口>

示例:

ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0

添加默认路由

ip route add default via 192.168.1.1 dev eth0
3. 删除路由
ip route del <网络地址>/<子网掩码>

示例:

ip route del 192.168.2.0/24
4. 修改路由

实际上是删除旧路由并添加新路由:

ip route del 192.168.2.0/24 
ip route add 192.168.2.0/24 via 192.168.1.2 dev eth0
5. 清空路由

清空某个接口的路由:

ip route flush dev <接口>

清除缓存:

ip route flush cache

路由的高级用法

1. 配置多路由表

Linux 支持多路由表,可以为特定流量设置不同的路由。

添加一个新路由表

echo "200 mytable" >> /etc/iproute2/rt_tables

为新表添加路由

ip route add 192.168.3.0/24 via 192.168.2.1 table mytable

设置规则使用新表

ip rule add from 192.168.2.100 table mytable
2. 设置路由优先级

通过 metric 字段设置优先级(数字越小,优先级越高):

ip route add default via 192.168.1.1 dev eth0 metric 100
ip route add default via 192.168.1.2 dev eth1 metric 200

路由表的工作机制

  1. 匹配规则

    • 路由表按照最长前缀匹配原则工作,即选择最具体的路由规则。
    • 例如,192.168.1.0/24 会优先于 192.168.0.0/16
  2. 路由优先级

    • 如果多条路由规则有相同的匹配范围,则根据 metric 字段选择优先级较高的规则。
  3. 路由缓存

    • Linux 会缓存路由查询结果以提高性能,但动态更改路由表时可能需要清空缓存。

常见场景

1. VPN 路由

让 VPN 流量走专用隧道:

ip route add 10.0.0.0/8 dev tun0
2. 分流多网卡流量

为特定网络绑定特定网卡:

ip route add 192.168.2.0/24 dev eth1 
ip route add 192.168.3.0/24 dev eth2
3. 配置多出口

设置两条默认路由,实现简单的负载均衡:

ip route add default nexthop via 192.168.1.1 weight 1 nexthop via 192.168.1.2 weight 2

总结

Linux 路由表通过 ip route 提供强大的网络流量控制能力。其灵活性和可扩展性可以满足从简单的单网卡配置到复杂的多网卡、多出口、多策略的需求。如果需要进一步应用到具体环境或场景,可以提供更多细节,我可以帮你定制路由解决方案。

;