Netfilter: 利用iptables进行负载均衡

目的

1. 实现多个网络接口同时运作,完成多连接的真正并发,多个连接正在的同时访问网络

2. 实现负载均衡,有效扩展带宽增加吞吐量

场景

1. 路由器有2个接口连接2个网络,可以制定相关的策略,将网络流量均分到2个网络中,可以均分,也可以不均分...

2. 手机上有个新潮的功能Download booster(三星),WIFI和4G网络可以同时打开,下载大型文件的时候,可以加速下载,不过这个很烧流量的,闲时流量还可以考虑.. 如下图

应用技术

1. 策略路由:这里主要是通过数据包的MARK值来进行路由选择

2. iptables相关的rule:这里主要是利用iptables的规则,给相关的连接打mark,并将连接的标记保存到对应的每一个数据包中。

思路

假设目前主机有两个interface eth0和eth1,在下载或者上网的过程中,我要每个链接都按照一定的比率被标记成两种mark,比如说一半的概率被标记成5,一半的概率被标记成6,在策略路由选择的时候,标记5的去寻找eth0对应的路由表,然后标记6的数据包去寻找eth1的路由表。这样在上网或者下载过程中,对应连接的数据包,就被分配到不同的网络接口中去了。

实现

1. 解决策略路由的问题 ,  使用iproute2进行配置路由,操作如下:

生成2个路由表,eth0,eth1,并增加对应的默认路由

ip route add table eth1 default via 10.1.1.1 dev eth0
ip route add table eth1 default via 10.2.2.2 dev eth1

生成路由选择的策略,MARK为5 去查找table eth0, MARK为6去查找table eth1

ip rule add fwmark 0x5 table eth0
ip rule add fwmark 0x6 table eth1

2.解决给连接打MARK的问题,使用iptables的相关模块:

首先给对链接进行均分,这个比率也可以修改...

iptables -t mangle -A  OUTPUT -m state --state NEW -j ETH1
iptables -t mangle -A  OUTPUT -m state --state NEW -m statisti --mode random --probability 0.5 -j ETH2
方法二,也可以利用NTH模块公平分发数据包

iptables -t mangle -A OUTPUT -m state --state NEW -m statistic --mode nth --every 2 --packet 0 -j ETH0
iptables -t mangle -A OUTPUT -m state --state NEW -m statistic --mode nth --every 2 --packet 1 -j ETH1
这里NEW状态,一般是指一个链接的第一个包,对于TCP来讲基本就是SYN包,UDP的话,相同端口的第一个封包为NEW状态

其次是要对链接进行打MARK,要在ETH0/ETH1这两个chain中实现

ETH0标记 5到链接

iptables -t mangle -N ETH0
iptables -t mangle -A ETH0 -j MARK --set-mark 5  //标记数据包
iptables -t mangle -A ETH0 -j CONNMARK --save-mark //把数据包的MARK设置到整个连接

ETH1标记6到链接

iptables -t mangle -N ETH1
iptables -t mangle -A ETH1 -j MARK --set-mark 6  //标记数据包
iptables -t mangle -A ETH1 -j CONNMARK --save-mark //把数据包的MARK设置到整个连接

最后要给每一个数据包进行标记

iptables -t mangle -A OUTPUT -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark

这样基本就实现了负载分流功能,让两个网卡同时存在,不过这个只是简单的使用命令进行配置,如果写code的话,可能要借助一些三方的工具比如iptables,iproute2来做这些事情。






  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值