基于Linux内核实现IP层流量均衡的方法

2022-10-25

一、现状介绍

IP层流量均衡需要路由协议功能和IP包转发处理功能配合实现, 其中路由协议负责获取网络中所有的可用路径信息, 传统路由器通过开启等价多路径功能后能够实现业务流量在多个传输质量相同的路径上传输的功能, 但这种实现方式对网络环境的要求较高, 业界提出了很多多路径路由协议的解决方案。IP包转发处理方面, 业界主要有基于包、基于流和基于连接的流量均衡方案, 从目前主流的解决方案看, 基于流 (连接) 的流量均衡方案更多的获得了通用网络设备厂商的支持, 而基于包的流量均衡更多的用于一些专用的终端设备上。此外传统的IP包转发只维护一个路由转发表, 无法满足现在网络对流量进行精细化控制的Qos要求, 为了实现这种功能, 路由器在进行IP包转发时不仅仅依靠目的地址, 还需要能够通过识别IP包中更多的信息, 通过定制各种转发策略来控制不同业务流量的走向, 实现分流的效果。

二、基于连接的IP层流量均衡实现

(一) Linux的Netfilter框架

Netfilter/IPTables是Linux内核的一个子系统, 允许使用者对数据报进行过滤、地址转换、处理等操作。其主要功能包括数据报过滤模块、连接跟踪模块 (Conntrack) 、网络地址转换模块 (NAT) 、数据报修改模块 (mangle) 及其它高级功能模块, 本方法中主要用到了连接跟踪模块。该模块通过分析流进流出的IP包首部中的源、目的地址, 源端口、目的端口确定IP包是否属于同一业务流, 并建立连接跟踪。Linux系统的连接跟踪对IP流维护四种状态, 它们分别是NEW, ESTABLISHED, RELATED和INVALID。

(二) Linux的策略路由系统

Linux的策略路由是在路由功能的基础上结合IP包策略功能实现的。linux系统中, 维护了多个路由表, 其中4个路由表由系统维护, 其余的路由表由用户根据需要自己定义。一般情况下, 常见的路由协议软件只会把路由结果写入default table中, 为了实现全部的路由流量均衡功能, 需要对路由协议进行修改, 能够将多条路由结果写入多个用户自定义路由表中。如果仅对转发功能进行原理验证, 可以通过使用IP route命令创建自定义路由表中的路由信息。

IP包策略功能主要对IP包进行条件匹配, 满足条件的则执行后续动作, IP包策略的条件可以使用IProute2的IP rule命令集进行设置, 设置的条件可以是IP地址、TOS字段、fwmark等, 其中fwmark是linux系统提供的一个特殊标记, 只在内核的软件中有效, 正是该标记使得路由系统可以和IPtables联动, 后续动作可以是丢弃IP包、转发IP包、或者查找某一个用户自定义路由表, 这样就实现了匹配系统和路由系统的联动, 实现了高级的策略路由功能。

(三) 实现原理

本文介绍的基于连接的流量均衡实现方法, 如图所示, 本方法包括路由协议、流识别、策略匹配和路由转发四个部分功能, 其中路由协议能够发现满足不同类型业务传输的路径, 并维护多个路由表的内容。IP包处理功能主要实现流识别及连接跟踪, 确定不同的连接后根据连接中的业务服务类型匹配不同路由表中的转发内容, 实现流量均衡。Linux系统中的Netfilter模块和策略路由系统恰恰满足本方法设计的需要, 因此选择Linux系统作为实现平台。系统收到IP包后, 首先建立连接状态并跟踪, 然后按照设置好的过滤条件对IP包进行过滤, 对符合条件的IP包进行打标, 最后根据设置好的路由策略查找对应的路由表, 确定IP包转发的出口。

三、试验平台

使用两台服务器搭建试验平台, 对原理进行验证, 操作系统使用centos6.9 (linux内核2.6.32) , 包含netfilter的以下模块:nat、conntrack、connmark、CONNMARK、mark、MARK、statistic。另外用到iproute2工具包, 内核在编译时必须开启策略路由和连接跟踪。使用流量产生工具发送多条数据流, 抓包确定流量是否按照不同的连接分别从不同出口发出。试验结果显示能够在不同的出口上捕获到不同的数据流, 表明使用Linux的netfilter和策略路由系统实现基于连接的IP层流量均衡是可行的。

摘要:IP网络规模的快速增长和业务流量的迅速增加, 网络流量的不均衡分布引发的网络拥塞或者网络资源利用率不足的问题日趋严重, 优化流量分布, 提高网络资源利用率成为业内的研究热点。在IP层, 链路层等不同层面提出了很多流量均衡的方法。本文介绍一种基于Linux内核的Netfilter框架配合策略路由系统实现IP层流量均衡方法。

关键词:IP层,Linux内核,流量均衡

参考文献

[1] iptables的conntrack连接跟踪模块https://awen.me/post/59062.html.

[2] IPROUTE2 Utility Suite Howtohttp://www.policyrouting.org/iproute2.doc.html.

[3] 尧有平, 李士丹.基于Linux策略路由实现多WAN网关[J].电脑知识与技术, 2009, 5 (18) :4695-4696.

[4] 樊亮.Linux核心下高性能策略路由的实现[D].大连:大连海事大学, 2006.

上一篇:政府新闻发布方略探析下一篇:输卵管结扎术后腹痛16例原因分析