TEL:
在Linux下配置多线路ADSL的方法
| 发布时间: 2021-06-08 13:16:06 | 2017 次浏览

 Linux配置多线路ADSL的方法   

   此文档可以说明双adsl及多adsl增加线路的配置过程.   

  实验环境:   

  操作系统: RedHat7.3   

  两条adsl,长期观察线路稳定,动态ip,带宽2M,   

  三块网卡: eth0 tulip,接内网   

  eth1 3c59x,接第一条adsl   

  eth2 8139too,接第二条adsl   

  ethn xxxx,(如果还有的话....)   

  目的:用两条adsl共同上网,分担负载,实现一般的简单负载平衡,带动内网上网.   

  1.添加网卡   

  插入网卡,启动机器,如果需要双线路上网,就要三块网卡了,配置网卡也可以参考其他资料.  

  配置为找到相应的型号模块,例如:eth2是8139的网卡   

  [root@kindgeorge root]# vi /etc/modules.conf 

  alias parport_lowlevel parport_pc 

  alias eth0 tulip 

  alias eth1 3c59x 

  alias eth2 8139too 

  把新的线路插在eth2上  

  2.配置adsl  

  方法一:  

  (1)运行adsl-setup程序,会一步一步的提示你完成配置过程.    

  创建ppp0和ppp1的拨号配置文件,并保存配置,一般保存在/etc/sysconfig/network-script..s/ifcfg-ppp1  

  (2)确定/etc/sysconfig/network-script..s/ifcfg-ppp0文件,其中sIDFILE参数设为:   

  PIDFILE=/var/run/ppp-adsl.pid   

  修改/etc/sysconfig/network-script..s/ifcfg-ppp1文件,将其中的PIDFILE参数设为:   

  PIDFILE=/var/run/ppp-adsl1.pid   

  如果你有更多的线路,可以继续增加0,1,2,3....等   

  这是为了使不同的拨好用不同的pid,如果不修改此参数将无法启动第二条线路接口。  

  (3)配置文件一般是:  

  USERCTL=no 

  BOOTPROTO=dialup 

  NAME=DSLppp1 

  DEVICE=ppp1 

  TYPE=xDSL 

  ONBOOT=yes 

  PIDFILE=/var/run/pppoe-adsl1.pid 

  FIREWALL=NONE 

  PING=. 

  PPPOE_TIMEOUT=20 

  LCP_FAILURE=3 

  LCP_INTERVAL=20 

  CLAMPMSS=1412 

  CONNECT_POLL=6 

  CONNECT_TIMEOUT=60 

  DEFROUTE=yes 

  SYNCHRONOUS=no 

  ETH=eth2 (对应新线路的网卡) 

  PROVIDER=DSLppp1 

  USER=isp提供的新用户名字2 

  PEERDNS=no 
方法二:

  (1)直接拷贝

  cp /etc/sysconfig/network-script..s/ifcfg-ppp0 /etc/sysconfig/network-script..s/ifcfg-ppp1

  (2)修改其中的ppp0为ppp1,

  修改PIDFILE=/var/run/pppoe-adsl.pid 为PIDFILE=/var/run/pppoe-adsl1.pid

  修改采用的新接线路的网卡,例如:改ETH=eth1 为ETH=eth2

  (3)增加新线路的帐号和密码. 帐号密码一般是保存在/etc/ppp/chap-secrets 和pap-secrets

  我们只需要在最后增加新的用户名2和密码2即可.

  /etc/ppp/chap-secrets文件一般是这样的:

  # Secrets for authentication using CHAP

  # client server secret IP addresses

  "用户名1" * "密码1"

  "用户名2" * "密码2"

  "用户名n" * "密码n"

  3.启动ppp接口

  因为adsl-start 命令缺省只能启动第一的ppp接口。所以要启动两个接口,必须指定配置文件。

  可以用:方法一:

  ifup ppp0

  ifup ppp1

  (ifup pppn...)

  或方法二:

  adsl-start /etc/sysconfig/network-script..s/ifcfg-ppp0

  adsl-start /etc/sysconfig/network-script..s/ifcfg-ppp1

  (adsl-start /etc/sysconfig/network-script..s/ifcfg-pppn)

  4.查看新设置是否启动:

  方法一:执行: ifconfig

  出现ppp0 和ppp1 ,并且均得到ip了.说明成功了,结果象这样:

  ppp0 Link encap:Point-to-Point Protocol

   inet addr:218.114.37.137 P-t-P:61.142.110.30 Mask:255.255.255.255

   UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1

   RX packets:165721 errors:0 dropped:0 overruns:0 frame:0

   TX packets:123673 errors:0 dropped:0 overruns:0 carrier:0

   collisions:0 txqueuelen:3

   RX bytes:157324193 (150.0 Mb) TX bytes:14068892 (13.4 Mb)

   ppp1 Link encap:Point-to-Point Protocol

   inet addr:218.114.35.62 P-t-P:61.142.110.30 Mask:255.255.255.255

   UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1

   RX packets:560055 errors:0 dropped:0 overruns:0 frame:0

   TX packets:439711 errors:0 dropped:0 overruns:0 carrier:0

   collisions:0 txqueuelen:3

   RX bytes:530025378 (505.4 Mb) TX bytes:80895162 (77.1 Mb)

  方法二: 执行ip高级命令: ip link ls

  也可以检验ppp0和ppp1,结果象这样:

  1: lo: mtu 16436 qdisc noqueue

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   2: eth0: mtu 1500 qdisc pfifo_fast qlen 100

   link/ether 00:50:bf:07:4e:32 brd ff:ff:ff:ff:ff:ff

   3: eth1: mtu 1500 qdisc pfifo_fast qlen 100

   link/ether 00:01:02:9a:31:b9 brd ff:ff:ff:ff:ff:ff

   4: eth2: mtu 1500 qdisc pfifo_fast qlen 100

   link/ether 00:e0:4c:79:44:71 brd ff:ff:ff:ff:ff:ff

   268: ppp1: mtu 1492 qdisc pfifo_fast qlen 3

   link/ppp

   273: ppp0: mtu 1492 qdisc cbq qlen 3

   link/ppp

  方法三: 用命令测试反应

  ping -I ppp0 202.96.134.133 (测试ppp0的线路状况)

  ping -I ppp1 202.96.134.133 (测试ppp1的线路状况)

  ping -I ppp2 ......n (如果还有多条的话)

 5.如果单单是要实现链路负载平衡,让ppp0和ppp1分担负载,那么我们象以下设置一下配置: 

  (1)启动路由,允许转发echo 1 > /proc/sys/net/ipv4/ip_forward 

  (2)进行伪装: 

  iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ppp0 -j MASQUERADE 

  iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ppp1 -j MASQUERADE 

  iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o pppn -j MASQUERADE (如果还有多条的话) 

  (3)修改网关 

  ip route replace default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1 

  说明: 用replace的原因是当原来没有网关时会增加这个网关,当已经存在网关时,会修改原来的网关. 

  用add 也可以,但是当已经存在默认网关时就要先delete再add. 

  两个weight 1的意思是这两条链路的权值是相等的,两条链路承担的网络流量是相等的。 

  有一点是需要说明的,因为路由表是基于缓存的,所以在实际中两条链路并不能100%的平分流量 

  nexthop NEXTHOP 设置多路径路由的下一跳地址。NEXTHOP比较复杂,它的语法和以下高层参数类似: 

  via ADDRESS--表示下一跳路由器; 

  dev NAME--表示输出设备; 

  weight NUMBER--在多路由路径中,这个元素的权重。表示相对带宽或者服务质量。 

  如果你有多条线路,那么继续在其中增加 nexthop dev ppp2(ppp3......)即可 

  (4) 刷新路由 

  ip route flush cache 

  6.即时检查数据的方向 

  用tcpdump 分别监察两条线路,用下面命令: 

  tcpdump -i ppp0 

  tcpdump -i ppp1 

  tcpdump -i ppp2......n (有多条的话) 

  7.为了每次启动时自动启动,把命令写在启动脚本里面,在 /etc/rc.local 后面增加: 

  ifup ppp0 

  ifup ppp1 

  echo 1 > /proc/sys/net/ipv4/ip_forward 

  iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ppp0 -j MASQUERADE 

  iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ppp1 -j MASQUERADE 

  ip route replace default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1 

  ip route flush cache 

  结果:运行数月,效果稳定良好。