分享
 
 
 

Linux平台上之MultipathRouting应用

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

$Date: 2001/10/22 09:25:41 $

警告:

*****************************************************************************

您因使用或不能使用本文之教学而产生之任何软件、硬件损害(包括但不限

于直接或间接个人损害、营业利润之丧失、业务中断、营业信息之遗失、或

任何其它金钱损失),概不负任何损害赔偿责任。

The author has taken care in the preparation of this paper, but

make no expressed or implied warranty of any kind and assume no

responsibility for errors or omissions. No liability is assumed for

incidental or consequential damages in connection with or arising

out of the use of the information or programs contained herein.

Linux is a registered trademark of Linus Torvalds. Other product

and company names mentioned herein may be the trademarks of their

respective owners.

*****************************************************************************

撰稿/整理: Rex Tsai

此文件应有许多技术上得问题. 请熟悉的朋友来信指教.

[Introduction]

许多中小企业或是 Soho 甚至家庭, 会在家中装有一条以上宽频/宽带线路.

这篇 Tips 将介绍如何在 Linux 上, 好好的应用这些资源.

在你使用两家不同的 ISP 的时候, destination address-based load

balancing 将会是最好的解决方案. 你的封包可以实时透过不同的 ISP 线路

走出去. 当然这里所提的是从内部到外部, 如果你的专线提供不同的网络服

务提供给网络上得人存取, 那么接下来所说明的方式不适合您.

此篇文章只能提供内部网络对外的 load sharing.

以下文章以 GNU/Debian, Linux kernel 2.4.12, iproute-20001007-1 为

环境, 所有动作请在主机前面执行.

假设你有两条以上的网际网络数据线路 (xDSL, ISDN, Cable, whatever..),

想充分使用这些线路, 概观来看有三种方式

1. Multiplexing

2. Packet-wise load balancing

3. Destination address-based load balancing,

或称 Equal-Cost MultiPath Routing (ECMP)

稍微解释一下三种方式的不同

1. Multiplexing

Multiplexing, 这个方式提供某些路由器提供 offer-load balancing 或叫

做 load sharing. 这个方式可以让路由器将流量分给不同的外流 ports.

但是会造成每个 port 的传送上约有 30 % 的 overhead. 此外, 每家厂商的

实作都是独一的, 因次你会被锁在特定的解决方案上.

类似的技术是 "bonding" 或是 "multi-link". 这里所提得 Bonding 是一

个标准, 是由 Bandwidth on Demand Interoperability Group (一个大

概有四十个制造商的协会)所提. 已经提交给 American National Standards

Institute TR41.4 group. 这个通常的在于两条数据线路都是接在同一个

点(ISP)上的时候, 因此如果是两条不同 ISP 所提供的线路, 那么就没办法

达到这个目的. 当然, 如果你的 ISP 不提供此项技术服务, 那么也是没辙.

举个例子, 像是 stick multiple ISDN channels. 将几个慢速的线路合成为

快速的一条. 像是 ISDN H.221 规格即用到 inverse multiplexing. 但通常

用于视讯传输而不是电子资料.

2. Packet-wise load balancing:

这个在你可以得到所有的 ISP 协助的时候是可行的, 如果两家 ISP 都愿意

协助将其不同的路由器皆设定到同一个 IP 地址. 那么便可以这么作.

在这个方式中, 你会用到像是 sch_teql (the TEQL scheduler) 来创造一个

virtual device 将你的封包分散在不同的网络接口上.

一般来讲, 如果你是使用两家不同 ISP , 那么你不可以使用这个解决方案.

但, 你 "可以" 将所有的网络封包透过 IPIP or CIPE (Crypto IP Encapsu-

lation) 的方式来解决这个问题. 看看 Linux Kernel 中的 IP: tunneling.

3. Equal-Cost MultiPath:

在 Linux 核心中叫做 equal cost multipath (CONFIG_IP_ROUTE_MULTIPATH)

比较正确的说法应该是 "destination address-based load balancing". 一

般 Linux 想要为某个 IP 地址找到路由, 会因为效能的问题去查验暂存(cache)

中的资料, 如果目标 IP 并没有在暂存空间中, 那么他便会去查 routing table

来决定该 IP 地址的路由, 并将该路由放进 cache 中.

一般来讲核心中的路由功能只能为某个封包决定唯一的方向. 如果使用 ECMP 并

有机会让某个 package pattern 具有好几种不同的方向, 可以让某个符合路由条

件的封包透过 "equal" cost 或是自订的权重来选择该走的路由.

[Howto]

如果你有数台计算机想使用外部网络, 一条 ADSL 不够你使用(例如某人抓档太凶)

那么这是你正在找的解决方案. 你所能做的作好的方式就是每个 connection 可以

以 "non-deterministic fashion" 的方式选择路由, 将 connection 分散到不同的

Router 上, 注意: 这里所说的不是 packets, 这样 TCP/IP session 将无法连续.

但是这整个路由程序有两个部份四个问题要解决.

1a. How to get your packets to the outside world,

1b. How the outside world replies to you,

2a. How the outside world sends packets to you,

2b. How you reply to the outside world.

Multipath 可以解决 1a 出去的问题. 一般的路由设定可以解决 1b 与 2a. 而 2b

则必须使用 policy routing (multiple tables)才能解决, Multiple Tables 可以

让你加入以封包来源地址为依据来决定路由.

以下的范例, 在核心中, 务必加入编译以下选项

必备:

CONFIG_NETLINK=y

这个选项是 Kernel/User netlink socket

CONFIG_RTNETLINK=y

Routing messages

CONFIG_INET=y

TCP/IP networking

CONFIG_IP_ADVANCED_ROUTER=y

IP: advanced router

CONFIG_IP_MULTIPLE_TABLES=y

IP: policy routing

CONFIG_IP_ROUTE_MULTIPATH=y

IP: equal cost multipath

选用:

CONFIG_IP_ROUTE_LARGE_TABLES=y

一般来讲 IP: large routing tables 也会勾选, 一方面 routing

zones 可以大于 64 笔, 这些数据存在 hash 数据结构中, 也可以

加速 "the routing process".

而 iproute 套件也是必须的软件. 这个软件的安装方式与位置请洽询提供

您所使用套件之厂商/组织. (Red Hat, Debian, Mandrake, SuSE, etc...)

重头戏来了, 这里假设你有三块网络卡, 分别给内部网络与两家 ISP. eth0

是内部网络, eth1 与 eth2 是其它两家 ISP 线路.

eth0 是内部网络, 范围是 10.0.0.0/255.255.255.0

eth1 其中一家 ISP, IP 是 1.1.1.1, 网关器(gateway)是 1.1.1.253

eth2 另外一家 ISP, IP 是 2.2.2.2, 网关器(gateway)是 2.2.2.253

# 列出所有的 rule

ip rule list

# table 后的 "10" 是 table identifer, 为数字.

# 注: 可用英文代称取代请看 /etc/iproute2/rt_tables

#

# table 10 是给在 gateway 后面的内部网络使用, 10.0.0.x 是 LAN 使用的 IP.

#

# pref 后面指定的 "10" 是 priority. 为 policy routing database 搜寻的次序

ip rule add pref 10 to 10.0.0.0/24 table 10

ip route add 10.0.0.0/24 table 10 dev eth1

# table 20 给 ISP #1, IP 1.1.1.1, gateway 1.1.1.253

# pref 后面指定的 "20" 是 priority. 为 policy routing database 搜寻的次序

ip rule add pref 20 from 1.1.1.1 table 20

ip route add default table 20 via 1.1.1.253

# table 30 is for ISP #2, IP 2.2.2.2, gateway 2.2.2.253

ip rule add pref 20 from 2.2.2.2 table 30

ip route add default table 30 via 2.2.2.253

# 列出所有的 rule

ip rule list

# 列出 table 10 的 rule

ip route list table 10

# 列出 table 20 的 rule

ip route list table 20

# If your ISP's have servers that authenticate by originating IP address,

# (e.g. SMTP or NNTP servers) you will want to explicitly list them here.

# 这里是静态的 routing table 设定. 如果你的 ISP 有提供某些网络服务, 必须该

# ISP 的 IP 才能使用, 那么你会想将它设定在这里

# (e.g. Proxy, SMTP or NNTP Server)

ip route add 1.1.1.0/24 dev eth1

ip route add 2.2.2.0/24 dev eth2

# 如果上面所有的 rout

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有