`
biaoming
  • 浏览: 272189 次
  • 性别: 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参数来控制连接的源地址,也就选择了这个连接所使用的网关。
分享到:
评论

相关推荐

    基于单片机的无线视频监控系统解决方案及实现.doc

    Mjpg-streamer软件包Mjpg-streamer是一个命令行应用软件,可以从一个输入端拷贝JPG格式的数据到多个输出端,可以将从摄像头采集的JPEG视频流通过网络传输到像Firefox、Cambozola、Videolanclient或者是运行有TCPM-...

    闪讯拨号器2.0

    "闪讯拨号器2.0"是一款专为网络连接设计的应用程序,它主要用于通过宽带、ADSL或者无线网络进行快速、便捷的网络拨号。该软件的主要功能是帮助用户建立、管理和维护互联网连接,确保稳定的上网体验。作为"闪讯拨号...

    避开10大常见坑:DeepSeekAPI集成中的错误处理与调试指南.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    前端分析-2023071100789

    前端分析-2023071100789

    基于kinect的3D人体建模C++完整代码.cpp

    基于kinect的3D人体建模C++完整代码.cpp

    搞机工具箱10.1.0.7z

    搞机工具箱10.1.0.7z

    GRU+informer时间序列预测(Python完整源码和数据)

    GRU+informer时间序列预测(Python完整源码和数据),python代码,pytorch架构,适合各种时间序列直接预测。 适合小白,注释清楚,都能看懂。功能如下: 代码基于数据集划分为训练集测试集。 1.多变量输入,单变量输出/可改多输出 2.多时间步预测,单时间步预测 3.评价指标:R方 RMSE MAE MAPE,对比图 4.数据从excel/csv文件中读取,直接替换即可。 5.结果保存到文本中,可以后续处理。 代码带数据,注释清晰,直接一键运行即可,适合新手小白。

    性价比革命:DeepSeekAPI成本仅为GPT-4的3%的技术揭秘.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    基于ANSYS LSDyna的DEM-SPH-FEM耦合模拟滑坡入水动态行为研究,基于ANSYS LSDyna的DEM-SPH-FEM耦合的滑坡入水模拟分析研究,基于ansys lsdyna的滑坡入水

    基于ANSYS LSDyna的DEM-SPH-FEM耦合模拟滑坡入水动态行为研究,基于ANSYS LSDyna的DEM-SPH-FEM耦合的滑坡入水模拟分析研究,基于ansys lsdyna的滑坡入水模拟dem-sph-fem耦合 ,基于ANSYS LSDyna; 滑坡入水模拟; DEM-SPH-FEM 耦合,基于DEM-SPH-FEM耦合的ANSYS LSDyna滑坡入水模拟

    auto_gptq-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

    auto_gptq-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

    复件 复件 建设工程可行性研究合同[示范文本].doc

    复件 复件 建设工程可行性研究合同[示范文本].doc

    13考试真题最近的t64.txt

    13考试真题最近的t64.txt

    Microsoft Visual C++ 2005 SP1 Redistributable PackageX86

    好用我已经解决报错问题

    嵌入式开发入门:用C语言点亮LED灯的全栈开发指南.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

    auto_gptq-0.4.2-cp38-cp38-win_amd64.whl

    auto_gptq-0.4.2-cp38-cp38-win_amd64.whl

    自动立体库设计方案.pptx

    自动立体库设计方案.pptx

    手把手教你用C语言实现贪吃蛇游戏:从算法设计到图形渲染.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

    性能对决:DeepSeek-V3与ChatGPTAPI在数学推理场景的基准测试.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    从零到一:手把手教你用Python调用DeepSeekAPI的完整指南.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    为什么你的switch总出bug?90%新手不知道的break语句隐藏规则.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

Global site tag (gtag.js) - Google Analytics