这篇 Tips 将介绍如何在 Linux 上, 好好的应用这些资源.
原作者:jingle_mj
在您使用两家不同的 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, 为数字.
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




