路由基础概念
什么是路由
路由是网络中数据包从源地址到目标地址的路径选择过程。路由器根据路由表中的信息决定数据包的转发方向。
路由表结构
每个路由表条目包含以下信息:
– 目标网络:数据包要到达的网络地址
– 子网掩码:定义网络部分的位数
– 下一跳:数据包的下一个转发地址
– 接口:数据包从哪个网络接口发出
– 跃点数/度量值:到达目标的代价
路由匹配原则
- 最长前缀匹配:选择与目标地址匹配位数最多的路由
- 管理距离优先:相同目标的路由中,选择管理距离最小的
- 度量值比较:相同协议的路由中,选择度量值最小的
路由类型详解
1. 静态路由
概念
管理员手动配置的固定路由条目,不会自动适应网络拓扑变化。
特点
- ✅ 配置简单,资源消耗少
- ✅ 路径可控,安全性高
- ❌ 不能自动适应网络变化
- ❌ 大网络中维护困难
配置示例
# Linux系统
ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0
# 永久生效(CentOS/RHEL)
echo "192.168.2.0/24 via 192.168.1.1 dev eth0" >> /etc/sysconfig/network-scripts/route-eth0
2. 默认路由
概念
当没有特定路由匹配时使用的路由,通常指向Internet网关。
配置示例
# 添加默认路由
ip route add default via 192.168.1.1
# 查看默认路由
ip route show default
3. 动态路由
概念
动态路由是指路由器之间通过路由协议自动交换路由信息,并根据网络拓扑变化自动更新路由表的技术。与静态路由不同,动态路由能够自适应网络环境的变化。
动态路由的工作原理
- 邻居发现:路由器启动后发现相邻的路由器
- 拓扑学习:通过协议消息了解网络拓扑结构
- 路径计算:使用算法计算到达目标网络的最佳路径
- 路由更新:当网络拓扑发生变化时自动更新路由表
- 收敛过程:网络中所有路由器达到一致的路由信息状态
动态路由的优缺点
优点:
– ✅ 自动适应网络拓扑变化
– ✅ 减少管理员的配置工作量
– ✅ 提供网络冗余和故障恢复
– ✅ 支持负载均衡
缺点:
– ❌ 消耗更多的CPU和内存资源
– ❌ 占用网络带宽传输协议消息
– ❌ 配置和故障排查相对复杂
– ❌ 收敛时间可能较长
动态路由协议分类
按算法分类:
– 距离矢量协议:基于距离和方向选择路径(如RIP)
– 链路状态协议:基于链路状态数据库计算最短路径(如OSPF)
– 路径矢量协议:基于AS路径属性选择路径(如BGP)
按应用范围分类:
– IGP(内部网关协议):在自治系统内部使用(RIP、OSPF、EIGRP)
– EGP(外部网关协议):在自治系统之间使用(BGP)
主要协议对比
| 协议 | 类型 | 适用范围 | 收敛速度 | 复杂度 | 最大跳数 | 度量值 |
|---|---|---|---|---|---|---|
| RIP | 距离矢量 | 小型网络 | 慢 | 低 | 15 | 跳数 |
| OSPF | 链路状态 | 中大型网络 | 快 | 中 | 无限制 | 带宽 |
| BGP | 路径矢量 | 互联网 | 慢 | 高 | 无限制 | 多属性 |
| EIGRP | 混合型 | 思科设备 | 快 | 中 | 255 | 复合度量 |
Linux路由管理
路由查看命令
# 查看路由表
ip route show # 推荐使用
route -n # 传统命令
netstat -rn # 网络统计信息
# 查看特定路由
ip route get 8.8.8.8 # 查看到达特定地址的路由
ip route show table main # 查看主路由表
ip route show table all # 查看所有路由表
路由操作命令
# 添加路由
ip route add 10.0.0.0/8 via 192.168.1.1
ip route add 172.16.0.0/16 dev eth1
# 删除路由
ip route del 10.0.0.0/8
ip route del default
# 修改路由
ip route change default via 192.168.1.2
# 替换路由
ip route replace 10.0.0.0/8 via 192.168.1.3
多路径路由(ECMP)
# 添加等价多路径路由
ip route add 10.0.0.0/8 \
nexthop via 192.168.1.1 weight 1 \
nexthop via 192.168.1.2 weight 1
# 查看多路径路由详情
ip route show 10.0.0.0/8
路由配置文件
# /etc/sysconfig/network-scripts/route-eth0
192.168.2.0/24 via 192.168.1.1 dev eth0
10.0.0.0/8 via 192.168.1.1 dev eth0
策略路由技术
策略路由概念
策略路由(Policy-Based Routing,PBR)允许基于多种条件进行路由决策,而不仅仅是目标IP地址。
传统路由 vs 策略路由
| 特性 | 传统路由 | 策略路由 |
|---|---|---|
| 决策依据 | 目标IP地址 | 源地址、协议、端口等多种条件 |
| 灵活性 | 低 | 高 |
| 配置复杂度 | 简单 | 相对复杂 |
| 资源消耗 | 低 | 中等 |
| 应用场景 | 通用场景 | 流量工程、QoS、负载均衡 |
Linux 策略路由
路由表管理
# 查看路由表定义
cat /etc/iproute2/rt_tables
# 添加自定义路由表
echo "100 telecom" >> /etc/iproute2/rt_tables
echo "200 unicom" >> /etc/iproute2/rt_tables
# 向路由表添加路由
ip route add default via 202.96.1.1 dev eth0 table telecom
ip route add default via 221.5.1.1 dev eth1 table unicom
# 查看特定路由表
ip route show table telecom
策略规则管理
# 查看策略规则
ip rule list
# 基于源地址的策略路由
ip rule add from 192.168.1.0/24 table telecom priority 100
ip rule add from 192.168.2.0/24 table unicom priority 101
# 基于目标地址的策略路由
ip rule add to 10.0.0.0/8 table internal priority 200
# 基于接口的策略路由
ip rule add iif eth0 table table1 priority 300
ip rule add oif eth1 table table2 priority 301
# 基于标记的策略路由
ip rule add fwmark 1 table highprio priority 400
# 删除策略规则
ip rule del from 192.168.1.0/24 table telecom
实际应用案例
案例1:双线负载均衡
场景:企业有电信和联通两条线路,需要实现负载均衡
#!/bin/bash
# 双线负载均衡配置脚本
# 定义变量
TELECOM_GW="202.96.1.1"
UNICOM_GW="221.5.1.1"
TELECOM_DEV="eth0"
UNICOM_DEV="eth1"
INTERNAL_DEV="eth2"
# 创建路由表
echo "100 telecom" >> /etc/iproute2/rt_tables
echo "200 unicom" >> /etc/iproute2/rt_tables
# 配置路由表
ip route add default via $TELECOM_GW dev $TELECOM_DEV table telecom
ip route add default via $UNICOM_GW dev $UNICOM_DEV table unicom
ip route add 192.168.0.0/16 dev $INTERNAL_DEV table telecom
ip route add 192.168.0.0/16 dev $INTERNAL_DEV table unicom
# 配置策略路由
ip rule add from 192.168.1.0/24 table telecom priority 100
ip rule add from 192.168.2.0/24 table unicom priority 101
# 配置默认路由负载均衡
ip route add default scope global \
nexthop via $TELECOM_GW dev $TELECOM_DEV weight 1 \
nexthop via $UNICOM_GW dev $UNICOM_DEV weight 1
# 刷新路由缓存
ip route flush cache
echo "双线负载均衡配置完成"
案例2:基于应用的流量分流
场景:HTTP/HTTPS流量走高带宽链路,其他流量走标准链路
#!/bin/bash
# 基于应用的流量分流
# 创建路由表
echo "110 highbw" >> /etc/iproute2/rt_tables
echo "120 standard" >> /etc/iproute2/rt_tables
# 配置路由表
ip route add default via 10.1.1.1 dev eth0 table highbw
ip route add default via 10.2.1.1 dev eth1 table standard
# 使用iptables标记HTTP/HTTPS流量
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1
# 配置基于标记的策略路由
ip rule add fwmark 1 table highbw priority 100
ip rule add table standard priority 200
echo "基于应用的流量分流配置完成"
动态路由协议
OSPF 协议
基本概念
- 链路状态协议:每个路由器维护整个网络拓扑
- 分层设计:支持区域划分,减少路由信息
- 快速收敛:网络变化时快速重新计算路由
配置示例(Quagga/FRR)
# 安装FRR
yum install frr -y
# 配置OSPF
vtysh
configure terminal
router ospf
network 192.168.1.0/24 area 0
network 10.0.0.0/8 area 1
area 1 stub
exit
BGP 协议
基本概念
- 路径矢量协议:基于AS路径进行路由选择
- 策略丰富:支持复杂的路由策略
- 互联网核心:是互联网的核心路由协议
配置示例
# BGP基本配置
router bgp 65001
bgp router-id 1.1.1.1
neighbor 192.168.1.2 remote-as 65002
neighbor 192.168.1.2 update-source loopback0
network 10.0.0.0/8
路由故障排查
故障排查流程
graph TD
A[网络连接问题] --> B[检查物理连接]
B --> C[检查接口状态]
C --> D[检查IP配置]
D --> E[检查路由表]
E --> F[测试连通性]
F --> G[检查防火墙]
G --> H[抓包分析]
常用诊断命令
基础连通性测试
# Ping测试
ping -c 4 8.8.8.8 # 基本连通性
ping -I eth0 8.8.8.8 # 指定接口
ping -s 1472 8.8.8.8 # 测试MTU
# 路径跟踪
traceroute 8.8.8.8 # 跟踪路由路径
traceroute -I 8.8.8.8 # 使用ICMP
mtr 8.8.8.8 # 综合网络诊断工具
路由诊断
# 路由测试
ip route get 8.8.8.8 # 查看路由选择
ip route get 8.8.8.8 from 192.168.1.100 # 指定源地址
# 接口状态
ip link show # 查看接口状态
ip addr show # 查看IP地址
ethtool eth0 # 查看接口详情
高级诊断
# 网络统计
netstat -i # 接口统计信息
ss -tuln # 端口监听状态
iftop # 实时流量监控
# 抓包分析
tcpdump -i eth0 host 8.8.8.8 # 抓取特定主机流量
tcpdump -i any -w capture.pcap # 保存抓包文件
常见问题解决
问题1:路由不可达
# 检查路由表
ip route show
# 添加缺失路由
ip route add 10.0.0.0/8 via 192.168.1.1
# 检查ARP表
arp -a
ip neighbor show
问题2:默认网关问题
# 检查默认路由
ip route show default
# 删除错误的默认路由
ip route del default
# 添加正确的默认路由
ip route add default via 192.168.1.1
问题3:策略路由不生效
# 检查策略规则
ip rule list
# 检查路由表内容
ip route show table all
# 测试策略路由
ip route get 8.8.8.8 from 192.168.1.100
# 刷新路由缓存
ip route flush cache
最佳实践与优化
路由设计原则
1. 分层设计
- 核心层:高性能骨干网络
- 汇聚层:路由策略和安全控制
- 接入层:终端设备连接
2. 冗余设计
- 多路径冗余:避免单点故障
- 设备冗余:关键节点双设备
- 链路冗余:重要链路备份
3. 性能优化
- 路由汇总:减少路由表大小
- 负载均衡:充分利用带宽资源
- QoS集成:保证关键业务质量
监控与维护
路由监控脚本
#!/bin/bash
# 路由监控脚本
LOG_FILE="/var/log/route_monitor.log"
EMAIL="admin@company.com"
# 检查默认路由
check_default_route() {
if ! ip route show default | grep -q "default"; then
echo "$(date): 默认路由丢失" >> $LOG_FILE
echo "默认路由丢失,请立即检查" | mail -s "路由告警" $EMAIL
fi
}
# 检查关键路由
check_critical_routes() {
ROUTES=("10.0.0.0/8" "172.16.0.0/12" "192.168.0.0/16")
for route in "${ROUTES[@]}"; do
if ! ip route show | grep -q "$route"; then
echo "$(date): 关键路由 $route 丢失" >> $LOG_FILE
fi
done
}
# 检查网络连通性
check_connectivity() {
HOSTS=("8.8.8.8" "114.114.114.114")
for host in "${HOSTS[@]}"; do
if ! ping -c 1 -W 3 $host >/dev/null 2>&1; then
echo "$(date): 无法到达 $host" >> $LOG_FILE
fi
done
}
# 执行检查
check_default_route
check_critical_routes
check_connectivity
性能优化建议
- 路由表优化
“`bash
# 清理无用路由
ip route flush cache
# 优化路由表大小
echo ‘net.ipv4.route.max_size = 16777216’ >> /etc/sysctl.conf
“`
- 内核参数优化
“`bash
# 启用IP转发
echo ‘net.ipv4.ip_forward = 1’ >> /etc/sysctl.conf
# 优化路由缓存
echo ‘net.ipv4.route.gc_timeout = 300’ >> /etc/sysctl.conf
# 应用配置
sysctl -p
“`
- 日志配置
“`bash
# 启用路由日志
echo ‘net.ipv4.conf.all.log_martians = 1’ >> /etc/sysctl.conf
# 配置rsyslog
echo ‘kern.warning /var/log/route.log’ >> /etc/rsyslog.conf
“`
安全考虑
路由安全加固
# 防止IP欺骗
echo 'net.ipv4.conf.all.rp_filter = 1' >> /etc/sysctl.conf
# 忽略ICMP重定向
echo 'net.ipv4.conf.all.accept_redirects = 0' >> /etc/sysctl.conf
# 不发送ICMP重定向
echo 'net.ipv4.conf.all.send_redirects = 0' >> /etc/sysctl.conf
# 忽略源路由
echo 'net.ipv4.conf.all.accept_source_route = 0' >> /etc/sysctl.conf
总结
本文档提供了Linux路由技术的完整指南,涵盖了从基础概念到高级应用的各个方面:
- 基础路由:静态路由、默认路由的配置和管理
- 策略路由:灵活的流量控制和负载均衡方案
- 动态路由:OSPF、BGP等协议的应用
- 故障排查:系统化的问题诊断方法
- 最佳实践:性能优化和安全加固建议
掌握这些技术和方法,能够帮助运维人员更好地管理和优化网络路由,确保网络的稳定性和性能。