歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 基於Linux實現多個ADSL捆綁

基於Linux實現多個ADSL捆綁

日期:2017/2/27 9:32:11   编辑:更多Linux
  現在很多公司,為了節約成本,往往會放棄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參數來控制連接的源地址,也就選擇了這個連接所使用的網關。




Copyright © Linux教程網 All Rights Reserved