经过一周的摸索,实现了双ad.sl链路冗.余互备及流量分担,整理如下:电脑 
目的:实现双ad.sl的冗余热备和流量分担(广告)
功能:
双adsl同时连线;
当两条adsl同时连线时,流量经策略路由分流到两.条链路.上;--- 印刷 
当其中.一条adsl掉线时,所有流量自动.分配另一条可用连接;(广告)
可以扩展到多条ppp连接.
http://upload.bbs.csuboy.com/Mon_1004/126_7054_fb15e496e2cf7bb.jpg[/img]    健康
1.添加网卡
  插入网卡,启动机器,修改/etc./mod.ules.conf并加入虚拟主机
  alias eth2 d.river.o.
2.配置adsl拨号
  通过adsl-setup程序.创建ppp0和ppp1的拨号配.置文件,并保存配置。域名
  修改./etc/sysconfig/network-scripts/ifcfg-ppp*文件,将其.中的PIDFILE参数设为:(广告)
  P.IDFILE.=/var/run/ppp-adsl*.pid.
   其中*对应0、1等
  如果不修改此参数将无法启动第二个ppp接口.。--- 印刷 
3.启动ppp接口
  因为adsl-start 命令.缺省只能启动第一.的ppp接口。所以要启动两个接口,必须指定配置文件。           女人
  adsl-start /etc/sysconfig/network.-scripts/ifcfg-.ppp0.
   adsl-start /etc/sysc.onfig/network-scripts/.ifcfg-ppp1.
4.添加路由表
  缺省情况下,系统只有3个路由表,local、main、default,路由规..则为所有进入的数据报都参照main、defaul来决策路由,这可以通过ip rule ls来查看。其输.出如下:电脑 
[
root@linuxrou.ter root]# ip rule ls.             电子
0:.      from all lookup loc.al           建材 
32766:  from .all. lookup main    美容 
32767: . from al.l lookup 253             电子
[.root@linuxrouter root]#(广告)
复制代码
   要实现策略路由,添加额.外的路由表是必须的。教育
  下面两条命令分别.添加名为p.pp0和ppp1的路由表。[成人用品]
echo 201 ppp0 >;>; /etc/iproutes/rt_.tab.les.
echo 202 ppp1 >;>; /etc/iprou.te.s/rt_tables(广告)
5.创建路由表项
  上面创建.的两个路由表都是空表,需要在其.中注入路由表项。            杀毒 
  本人编.写了如下脚本用于注入路由表项:             电子
#!/bin/bash
# Name: cprt
# This program copy the route from $1 route table to .$2 .route table,    健康
# exclud.e the d.efault route entry.(        游戏          )
if [ -z "$1" -o.. -z "$2" ]; then服务器
 .   echo $"usage: cprt <source_table>; <d.est_table>;"             电子
    exit 1
fi
SOURCE=$1
DEST=$2
# Clea..r the destination route table虚拟主机
echo $"Clearing ro.ute table .$DEST ......".
echo
/sbin/.ip r.oute flush table $DEST            杀毒 
# Inject routes from source to desti..nation              乙肝 
echo $"Injecting route from $SOURCE to .$DEST ......."域名
/sbin/ip route ls table $SOURCE |. .grep -v default >; /tmp/route-tmp教育
whi.le read line; do(广告)
  .    /sbin/ip route add table $DEST $lin.e.
done < "/tm.p/route-tmp"           女人
复制代码
   把main表中的.路由表项复制到ppp0和ppp1.中。虚拟主机
  .将下.面命令加入到/etc/rc.d/rc.local中。           建材 
  cprt m.ain ppp0.
   cprt. main ppp1域名
  此时,两个路由表中都有相同的路由表项了,除了default路由以外。缺省.路由的添加要通过另外的途径添加。当ppp激活,或者掉线时,pppd守护进程会调用/etc/ppp/目录下的i.p-up、ip-down脚本.,这些教本又分别调用ip-up..local、ip-down.local。在此我们利用这两个脚本来对路由表和流量控.制策略进行维护,此脚本需要人工创建。.
下面时本例中的脚本:
/etc/pp.p/ip-up.local(广告)
#!/bin/bash
# Name.: ip-up.local    美容 
# Created by. lyking@CU             汽车
# If the if-down is not completed, this .script can't be ex.cute.教育
while [ -e /var/lock/subsys./if-d.own.$IFNAME ] ; do.
       . sleep 3<性病> 
done
# Creat a lock file to prevent the if-down f.rom runni.ng on my turn学习
touch /var/l.ock/subs.ys/if-up.$IFNAME.
# Determin device he.re--------------彩票 
# We should use IFNAME as the interface name.For some reason, the IFN.AME maybe no..t    美容 
# same as the LINKNAME. And t.he route table should as.s.ociate with the IFNAME. For           女人
# some. conveniency, I name the route table .as "ppp0" and "ppp1".学习
RT_TABLE=$I.FNAME学习
# Add or chang.e static route here,.including default route..
# Check .if a .default is exist..
RS=""
ip route ls table. $RT_TABLE | grep .default电影 
RS=$?
if [ $RS -eq 0 ] ; th.en<性病> 
        ip route change default de.v. $IFNAME table $RT_TABLE.
else
        ip route add d.efault dev $IFNAME ta.ble $RT_TABLE.
fi
echo >;>.; /var/log/ifch.ang.log              乙肝 
echo "$0: $IFNAME going up. at `date`.." >;>; /var/log/ifchang.log           女人
echo "$0: $IFNAME got a.ddress: $IPLOCAL, peer address i.s $IPREMOTE." >;>; /var/log./ifchang.log           女人
echo "$0: Table $RT_TABLE. default route change to. `ip route ls table $RT_TABLE | grep default`." >;>; /var./log/ifchang.log.
# Refresh routing cache to .activating the. routing immediately.    美容 
ip route. flush cache--- 印刷 
# Add traffic. cont.rol policy here域名
tc. qdisc. add dev $IFNAME root handle 1: prio.
## This *instantly* creates ..classes 1:1, 1:2, 1:3服务器
tc qdisc add dev $IFNAME .parent 1:1 handle 10 sf.q perturb 20.
tc qdisc add dev $IFNAME pa.rent 1:2 handle 20 sfq perturb .20    美容 
tc qdisc add dev $IF.NAME parent 1:3. handle 30 sfq.
# Remove th.e lock file           鲜花
rm -f /var/l..ock/subsys/if-up.$IFNAME.
复制代码
/etc/ppp/.ip-down.local.
#!/bin/bash
# Name: ip-.down.local服务器
# Created by lyk.ing@CU教育
while [ -..e /var/lock/subsys/if-up.$IFNAME ] ; do健康 
 .       sleep 3外贸
done
to.uch /.var/lock/subsys/if-down.$IFNAME             汽车
cd /.etc./sysconfig/network-scripts             汽车
. network-functio.ns.
# .Determin device here
# We should use IFN.AME as the. interface name.For some .reason, the IFNAME maybe not.
# s.ame as the LINKNAME.. And the. route table should associate with the IFNAME. For            杀毒 
# some .conveniency, I name the route table .as "ppp0" and "ppp1"..
RT_TABLE=$IFNAM.E--------------彩票 
# Looking for a valide connection. to I.nternet.
DEFAULT_RT=""
PPPS='pp.p0 ppp1'[成人用品]
for i .in $PPPS ; do健康 
if.config | grep $i    美容 
RS=$?
 .  .     if [ $RS -eq 0 ] ; then--- 印刷 
            DE.FAULT_RT=$i学习
     .       break              乙肝 
        fi
done
# Update defa.ult route here as nese.ssary           建材 
if [ $DEFAULT_RT != $IFN.AME ] ; th.en            杀毒 
        if [ $DEF.AULT_RT != "" .] ; then服务器
                ip route add default dev $DEFAULT_RT .tab.le $RT_TABLE            杀毒 
        else
      .          for i in. $PPPS ; do.
                        ip route del default dev $i ta.b.le $i.
                .done.
      .          echo >;.>; /var/log/ifchang.log.
                echo "$0: All connection is down, .remove .all d.efault route from all branch tables" >;>; /var/log/ifchang.log.
        fi
      .  echo >;>;. /var/log/ifchang.log             汽车
        ech.o "$0: $IFNAME going d.own at `date`." >;>; /var/log/ifchang.log学习
        echo "$0: Connection las.t.ed $CONNECT_TIME seconds." >;>; /var/.log/ifchang.log.
        echo "$0: $BYTES_.SENT bytes se.nt, $BYTES_RCVD bytes received." >;>; /var/log/if.chang.log             电子
        echo "$0: $.DEFAULT_RT is avai.lable." >;>; /var/log/ifchang.log.
        ech.o "$0: Table $RT_TABLE default route .changed to `ip route ls tab.le $RT_TABLE | grep default`. " >;>; /var/log./ifchang.log健康 
fi
# Refresh rou.ting cache to activating the routing imm.ediately..
ip rou.te flush cache            杀毒 
rm -f ./var/lock/subsys/if-down.$IFNAM.E<性病> 
复制代码
注意,创建完脚本后.必须将其属性改为可执行,否则不.会被执行。.
6.路由策略的选择
  策略路由可以通过源地址、目标地址、ToS或者fw.mark标记来进行选择。在此,为了利.用iptables的强大的过滤功能采用.fwmark标记来决策路由。<性病> 
  在/etc/rc..d/rc.local.中添加如下命令:           鲜花
  /s.bin/ip rule add fwmark 1 table. ppp0.
   /sbin/ip rule .add fwmark 2 table pp.p1学习
7.防火墙规则的添加
  这里利用的iptables的强大.过滤功能来对流.量.进行标记。本例中仅根据ip地址的奇偶性来拆分流量,根据具体需求,你还可以根据第4层端口号、ToS等来拆分流量。防火墙需要添加如下命令:服务器
# Divid traffic .to differ.ent mark教育
i.ptables -t mangle -A PREROUTING -.s 10.0..0.0/255.255.255.1 -j MARK --set-mark 0x1(广告)
iptab.les -t mangle -A PRER.OUTING .-s 10.0.0.1/255.255.255.1 -j MARK --set-mark 0x2教育
# NAT
/sb.in/iptables. -t nat -A POSTROUTING -o ppp0 -j MASQUERADE.
/sbi.n/iptabl.es -t nat -A POSTROUTING -o ppp1 -j MASQUERADE.
复制代码
至此,双adsl链路的热互备及负载分担基本.完成。外贸
下面是一些运行结果
A.ifconfig显示结果
ppp0      Link encap:Point-to-Point Pr.otoco.l[成人用品]
          ine.t add.r:220.163.38.208  P-t-P:220.163.38.1 . Mask:255.255.255.255.
      . .   UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1--- 印刷 
  .        RX packets:100295 errors:0 dr.opped:0 overruns:0 frame:0           鲜花
    .      TX packets:67.817 errors:0 dropped:0 overruns:0 carrier:0
        .  collisions.:0 txqueuelen:3           鲜花
          RX b.y.tes:108844271 (103.8 Mb)  TX bytes:6073206 (5.7 Mb)             汽车
ppp1    .  Link encap:Point-.to-Point Protocol    外汇 
          inet addr:220.163.36.57  P.-t-P:220.163..36.1  Mask:255.255.255.255(广告)
 .  .       UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1学习
       .   RX .packets:150583 errors:0 dropped:0 overruns:0 frame:0              乙肝 
      .    TX packets:125136 errors:0 dropped:0 overruns:0 .carrier:0--------------彩票 
          co..llisions:0 txqueuelen:3          婚庆
          RX bytes:132921157 (126.7 Mb)  TX bytes:874958.5. (8.3 Mb)电脑 
复制代码
B./var/log/.ifchang.log.部分内容<性病> 
/etc/ppp/i.p-down.local: ppp0 going down at Tue Aug 10 08:05:45 CS.T 2004.              乙肝 
/etc/ppp/ip-down.local: Connection l.asted 22 .seconds..
/etc/ppp/ip-down.lo.cal: 30 bytes sent, 30 bytes .received..
/etc/ppp/ip-down.local:. p.pp1 is available..
/etc/ppp/ip-down.local: Table p.pp0 default route changed. to defaul.t dev ppp1  scope link .    美容 
/etc/ppp/ip-up.local: ppp0 going up .at Tue Aug 10 08:05:53. CST 2004.(        游戏          )
/etc/ppp/ip-up.local: ppp0 go.t address: 61.1.59.254..30, peer address is 61.159.254.1.外贸
/etc/ppp/ip.-up.local: T.able ppp0 def.ault route change to default dev ppp0  scope link .    健康
/etc/ppp/ip-down.local: ppp1 goi.ng down at Tue Aug 10 08:12:45 CST 2004..健康 
/etc/ppp/i.p-down.local: Connection lasted. 853 seconds.(广告)
/.etc/ppp/ip-down.lo.cal: 9313 bytes sent, 116181 bytes received.(广告)
/etc/ppp/ip-down.lo.cal: ppp0 is avail.able..
/etc/ppp/ip-down.local: Ta.ble p.pp1 default route changed to default dev ppp0  scope link. .    美容 
/.etc/ppp/ip-up.local: ppp1 going up at Tue Aug 10 08:12.:53 CST 2004..
/etc/ppp/ip-up.local: pp.p1 got a.ddress: 220.163.38.20, peer address i.s 220.163.38.1..
/etc/ppp/ip-up.lo.cal: Tabl.e ppp1 default route chan.ge to default dev ppp1  scope link .[list=]               乙肝 
http://upload.bbs.csuboy.com/Mon_1004/126_7054_2f6847d7b2ab14e.jpg[/img].