`
biaoming
  • 浏览: 270272 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Linux实现多个ADSL捆绑

阅读更多
  现在很多公司,为了节约成本,往往会放弃E1 等等这样高价的链路,选择廉价的ADSL作为基本接入方式。单条ADSL带宽有限,动态ip,链路连接也不很稳定。多条ADSL可以满足一定的带宽需求,但是一般情况下,都是内网设置多个网关,内网用户手动指定网关选择ADSL出口,管理维护比较繁琐。部分ADSL接入商通过支持MPPP来提供ADSL多链路带宽捆绑服务,但是同样会收取比较高的费用。这里将介绍一个方法,通过Linux网关实现多个ADSL链路的捆绑。
  
  必要条件,是有一台外部的Linux主机,并且通过ADSL能快速访问。一般情况下可以选择本地IDC提供的主机托管服务。这里可以做一个简单的速度测试,用FlashGet通过ADSL下载主机上的文件,能占慢ADSL带宽即可。
  
  先简单介绍一下原理。首先是通过ppp over ssh建立一条基本tunnel。然后通过Linux对mppp的支持,将多个tunnel聚集到一起。剩下来的问题,就是如何充分利用多个存在的 ADSL网关,答案就是依靠ssh -b参数指定source ip,然后再利用linux的source routing来选择具体网关。
  
  --------------------|-ADSL1-GW-- ..................-|
  --------------------|-ADSL2-GW-- ..................-|
  LinuxGW(LG) ---|-ADSL3-GW-- (MPPP Link) --- External Linux Host(LE)
  --------------------|-ADSL4-GW-- ..................-|
  --------------------|-ADSL5-GW-- ..................-|
  
  配置基本的ppp over ssh tunnel
  
  首先是在LE上建立一个普通的用户,并且配置好ssh key验证
  # groupadd adslin
  # useradd -g adslin -m adslin
  
  在LG上使用ssh-key建立一对key文件
  # ssh-key -t dsa -f /etc/ppp/peers/adsl-out-key
  然后将/etc/ppp/peers/adsl-out-key.pub复制到LE上~adslin/.ssh/authorized_keys文件里面。需要注意一下这个文件的属性,owner必须是adslin:adslin.
  
  做一下测试,保证ssh可以在不输入口令的情况下,登录到LE上
  # ssh -i /etc/ppp/peers/adsl-out-key adslin@LE
  确定一切无误之后,我们继续
  
  下面的工作在LE上完成:
  
  1.复制系统的pppd到adslin HOME目录中,并且设这正确属性
  # cp /usr/sbin/pppd ~adslin
  # chmod u+s ~adslin/pppd
  
  2.准备密码验证文件,在/etc/ppp/chap-secrets文件中添加两行
  adslin adslout 123456 *
  adslout adslin 123456 *
  (实际应该只要一行,我也不确定到底哪行是起作用的)
  
  3.在/etc/ppp/peers目录中建立一个adslin文件,内容如下
  -- BEGIN --
  endpoint phone:144145
  name adslin
  remotename adslout
  netmask 255.255.255.0
  1.2.3.4:4.3.2.1
  multilink
  nodetach
  +chap
  require-chap
  -- END --
  其中endpoint, multilink是为了支持mppp的.netmask以及ip需要更具具体需要修改。
  
  下面工作在LG上完成
  
  1.与上面LE上的操作相同,给/etc/ppp/chap-secerts添加相同的两行。
  
  2.在/etc/ppp/peers/目录中建立adslout文件,内容如下
  -- BEGIN -- endpoint phone:144145
  name adslout
  remotename adslin
  netmask 255.255.255.0
  4.3.2.1:1.2.3.4
  multilink
  nodetach
  +chap
  require-chap
  pty "ssh -t -i /etc/ppp/peer/adsl-out-key adslin@LE ./pppd call adslin"
  -- END --
  可以看出来,这个文件和LE上的adslin基本相同,除了name/remotename以及ip对调了一下。同时增加了pty这个option,pppd将利用这个option提供的命令行来建立连接管道。
  
  最后我们来测试一下,在LG上运行
  # pppd call adslout
  看看是否能基于ssh链路建立正常的ppp连接。
  
  现在的工作,就是准备策略路由。我们都知道,标准IP的路由规则,都是根据目的地址来选择路由的,对于一个相同的目的地址,我们如何实现控制TCP连接选择不同的网关喃?先看一下下面的例子。
  
  # ip addr add 192.168.1.201/24 dev eth0
  # ip rule add pref 12001 from 192.168.1.201 table 101
  # ip route add default via 192.168.1.1 table 101
  
  # ip addr add 192.168.1.202/24 dev eth0
  # ip rule add pref 12002 from 192.168.1.202 table 102
  # ip route add default via 192.168.1.2 table 102
  
  简单的解释一下,第一句ip addr add,是给eth0这个interface新增加一个ip。ip rule add是增加一个策略,所有源地址是192.168.1.201的IP包,都使用table 101这个route表,而不是使用缺省的系统路由表。ip route add是添加了一条缺省路由(default route),仔细看最后的参数,table 101,意思就是说这条路由是加在table 101中,而不是缺省的系统路由表中。
  
  言下之意,如果源地址为192.168.1.201的IP包,会匹配12001(pref 12001)这个规则去查询101这个路由表。而101这个路由表的网关就是192.168.1.1。同样的道理,如果源地址为 192.168.1.202的话,就会选择192.168.1.2作为网关。现在我们明白了,我们可以通过控制源地址来控制具体的网关选择。可是我们又如何来控制IP包的源地址喃?
  
  man ssh,我们可以看到-b这个选项,bind address,right,就是这个选项。ssh -b 192.168.1.201 ...将会使用1.1这个网关,ssh -b 192.168.1.202 ...就会通过1.2网关建立连接。我们可以通过-b参数来控制连接的源地址,也就选择了这个连接所使用的网关。
分享到:
评论

相关推荐

    基于Linux的ADSL实现.pdf

    基于Linux的ADSL实现.pdf

    Linux操作系统下ADSL拨号上网详细步骤

    在Linux操作系统中,特别是Ubuntu 6.06 LTS (Dapper Drake)环境下,ADSL拨号上网的过程可以通过PPPoE协议实现。PPPoE(Point-to-Point Protocol over Ethernet)是一种将PPP协议封装在以太网帧中的技术,用于通过...

    简述基于Linux的网络设计.pdf

    基于Linux的网络设计为企业提供了一个灵活、高效且安全的网络环境。通过规范业务流程、加速文件流转、提升办公效率,以及确保信息安全,它为企业的健康发展提供了有力的信息服务和决策支持。Linux的开源特性使得网络...

    ROS多ADSL分流

    在ROS系统中实现多ADSL分流,我们需要完成以下步骤: 1. 安装和配置ROS:首先,你需要下载并安装winbox.exe,这是一个图形化的管理工具,用于远程控制和配置ROS设备。通过WinBox登录到你的ROS路由器,进行基本的...

    pppoe 移植rp-pppoe到s3c2440(linux系统)实现ADSL拨号上网

    本文档详细介绍了如何将 rp-pppoe 软件移植到基于 S3C2440 的 Linux 系统上,以实现 ADSL 拨号上网的功能。该过程主要分为四个关键步骤: 1. **ARM Linux 内核支持 PPP**:确保 Linux 内核包含了对 PPP (Point-to-...

    在SUSELinux系统下通过ADSL网络实现地震波形浏览.pdf

    在SUSELinux系统下通过ADSL网络实现地震波形浏览.pdf

    基于Linux平台的虚拟智能网关.pdf

    而这个基于Linux的虚拟智能网关方案则可以保持移动设备的原始配置不变,实现全透明的使用体验。这意味着用户在接入不同网络时,无需担心因网络环境变化而需要频繁调整设备设置。 实现这个方案的关键在于对Linux内核...

    鸟哥的 Linux 与 ADSL 私房菜

    鸟哥的 Linux 与 ADSL 私房菜

    实现两条ADSL合并

    综上所述,实现两条ADSL合并是一个涉及硬件选择、软件配置、网络管理和故障排查等多个环节的过程。FNET Gateway Soho提供了这样的解决方案,通过集成的软路由功能,使得家庭和小型办公室用户能够有效地利用多条ADSL...

    中兴通讯自主研发成功基于Linux的操作系统平台.pdf

    总之,中兴通讯基于Linux的操作系统平台研发成功,不仅彰显了其在通信行业技术上的领先地位,还预示着未来在操作系统定制化、网络融合以及市场战略上的更多可能性。这一进步对于提升我国通信产业的整体技术水平和...

    鸟哥的Linux与ADSL私房菜(CHM)

    鸟哥的Linux与ADSL私房菜(CHM)

    基于Linux内核模式的PPPoE优化与实现.pdf

    标题中的"基于Linux内核模式的PPPoE优化与实现"指的是在Linux操作系统中,对PPPoE(Point-to-Point Protocol over Ethernet)协议的一种改进策略,即将其核心功能移植到内核空间,以提高性能和效率。PPPoE是一种在以太...

    鸟哥的 Linux 与 ADSL 私房菜(part3)

    鸟哥的 Linux 与 ADSL 私房菜(part3)

    基于Linux IP策略路由的多路由分配技术.pdf

    【基于Linux IP策略路由的多路由分配技术】 随着Internet的发展,多条互联网连接在很多组织中变得常见。传统的IP路由机制在处理多个出口时存在局限性,无法满足特定的流量管理和优化需求。针对这一问题,Linux操作...

    鸟哥的Linux与ADSL私房菜 html

    这些只是《鸟哥的Linux与ADSL私房菜》部分涵盖的知识点,实际教程中还会涉及更多高级主题,如shell脚本、系统管理、服务器配置等。学习这个教程有助于提升Linux操作技能,理解和应用ADSL技术,以及进一步理解开源...

    易语言多线程adsl拨号演示例程

    在这个"易语言多线程ADSL拨号演示例程"中,我们可以深入学习如何利用易语言实现多线程技术以及ADSL拨号功能。 多线程是并发编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的执行效率。在易语言中,...

    Linux环境下ADSL拨号上网

    对于在Linux环境下如何进行ADSL拨号上网进行了详细讲解。

    Linux+ADSL宽带网.pdf

    描述中的信息进一步指出,随着ADSL服务价格的下降,越来越多的人开始申请使用,而电信运营商并未提供针对Linux的ADSL拨号软件,因此文档旨在帮助Linux用户解决这一问题。 标签中提到的"Linux 操作系统 系统开发 ...

    USB ADSL 拨号上网 Linux 下

    而USB ADSL modem则是一个设备,它通过USB接口与计算机连接,实现与ADSL服务提供商的通信。在Linux中,这个过程通常涉及到内核驱动、PPP协议以及网络管理工具。 要配置USB ADSL拨号上网,你需要以下关键组件: 1. ...

Global site tag (gtag.js) - Google Analytics