day3-路由

路由基础概念

什么是路由

路由是网络中数据包从源地址到目标地址的路径选择过程。路由器根据路由表中的信息决定数据包的转发方向。

路由表结构

每个路由表条目包含以下信息:
目标网络:数据包要到达的网络地址
子网掩码:定义网络部分的位数
下一跳:数据包的下一个转发地址
接口:数据包从哪个网络接口发出
跃点数/度量值:到达目标的代价

路由匹配原则

  1. 最长前缀匹配:选择与目标地址匹配位数最多的路由
  2. 管理距离优先:相同目标的路由中,选择管理距离最小的
  3. 度量值比较:相同协议的路由中,选择度量值最小的

路由类型详解

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. 动态路由

概念

动态路由是指路由器之间通过路由协议自动交换路由信息,并根据网络拓扑变化自动更新路由表的技术。与静态路由不同,动态路由能够自适应网络环境的变化。

动态路由的工作原理

  1. 邻居发现:路由器启动后发现相邻的路由器
  2. 拓扑学习:通过协议消息了解网络拓扑结构
  3. 路径计算:使用算法计算到达目标网络的最佳路径
  4. 路由更新:当网络拓扑发生变化时自动更新路由表
  5. 收敛过程:网络中所有路由器达到一致的路由信息状态

动态路由的优缺点

优点
– ✅ 自动适应网络拓扑变化
– ✅ 减少管理员的配置工作量
– ✅ 提供网络冗余和故障恢复
– ✅ 支持负载均衡

缺点
– ❌ 消耗更多的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

性能优化建议

  1. 路由表优化
    “`bash
    # 清理无用路由
    ip route flush cache

# 优化路由表大小
echo ‘net.ipv4.route.max_size = 16777216’ >> /etc/sysctl.conf
“`

  1. 内核参数优化
    “`bash
    # 启用IP转发
    echo ‘net.ipv4.ip_forward = 1’ >> /etc/sysctl.conf

# 优化路由缓存
echo ‘net.ipv4.route.gc_timeout = 300’ >> /etc/sysctl.conf

# 应用配置
sysctl -p
“`

  1. 日志配置
    “`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等协议的应用
  • 故障排查:系统化的问题诊断方法
  • 最佳实践:性能优化和安全加固建议

掌握这些技术和方法,能够帮助运维人员更好地管理和优化网络路由,确保网络的稳定性和性能。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇