配置電信網(wǎng)通雙線雙IP的解決辦法

2010-09-02 17:13:23來源:西部e網(wǎng)作者:

做互聯(lián)網(wǎng)網(wǎng)站,最頭疼的事情之一就是電信和網(wǎng)通的互聯(lián)互不通了,為了能夠讓北方網(wǎng)通和南方電信用戶都可以快速的訪問網(wǎng)站,解決辦法就是托管到雙線機(jī)房。雙線機(jī)房有兩類,一類是通過BGP技術(shù)實(shí)現(xiàn)互聯(lián)互通,服務(wù)器只需

做互聯(lián)網(wǎng)網(wǎng)站,最頭疼的事情之一就是電信和網(wǎng)通的互聯(lián)互不通了,為了能夠讓北方網(wǎng)通和南方電信用戶都可以快速的訪問網(wǎng)站,解決辦法就是托管到雙線機(jī)房。雙線機(jī)房有兩類,一類是通過BGP技術(shù)實(shí)現(xiàn)互聯(lián)互通,服務(wù)器只需要一個(gè)網(wǎng)卡一個(gè)IP地址就可以了,由機(jī)房進(jìn)行路由的智能判斷,選擇合適的路由訪問,這樣對(duì)于網(wǎng)站來說是很方便的,比方說上海移動(dòng)的怒江機(jī)房,上海地面通的自建機(jī)房,科技網(wǎng)的機(jī)房,但BGP機(jī)房一般帶寬都比較少,流量高一些的話可能就沒有辦法了。另外一種就是雙線雙IP的機(jī)房,帶寬可能更高一些,但是路由配置極其復(fù)雜,比方說上海電信的市北機(jī)房。

因?yàn)楹椭C的原因,JavaEye網(wǎng)站服務(wù)器最近被迫從原來的移動(dòng)怒江雙線機(jī)房當(dāng)中搬了出去,由托管商推薦到了上海市北雙線機(jī)房,市北雙線機(jī)房實(shí)際上是電信機(jī)房,但是從天津網(wǎng)通拉了2G專線過來,因此服務(wù)器需要至少兩個(gè)網(wǎng)卡,一個(gè)網(wǎng)卡接電信網(wǎng)關(guān),一個(gè)網(wǎng)卡接網(wǎng)通網(wǎng)關(guān),來實(shí)現(xiàn)互聯(lián)互通。如果多臺(tái)服務(wù)器的話,還需要第3個(gè)網(wǎng)卡組建內(nèi)網(wǎng)進(jìn)行內(nèi)網(wǎng)通訊。

對(duì)于雙線雙IP的服務(wù)器來說,要解決兩個(gè)問題:

一、你的網(wǎng)站用戶究竟走那個(gè)IP來訪問你的服務(wù)器
二、你的網(wǎng)站內(nèi)容究竟走那個(gè)IP返回給用戶

對(duì)于第1個(gè)問題,可以使用智能DNS解析來解決,即DNS服務(wù)器判斷用戶所在IP地址,如果用戶是電信接入,就把服務(wù)器的電信IP解析給他;如果用戶是網(wǎng)通接入,就把服務(wù)器的網(wǎng)通IP解析給他。

智能DNS可以自己基于開源的DNS軟件來定制,不過國(guó)內(nèi)有一個(gè)很好的免費(fèi)智能DNS服務(wù)器提供商:DNSPod,推薦使用DNSPod的服務(wù)。他就可以實(shí)現(xiàn)上述的智能DNS解析。

對(duì)于第2個(gè)問題,則需要在服務(wù)器上面配置路由規(guī)則,來決定究竟如何處理數(shù)據(jù)的返回路徑問題。

1、填寫靜態(tài)路由表

因?yàn)榉⻊?wù)器有兩個(gè)IP,分別在不同的網(wǎng)段,你使用電信IP的網(wǎng)關(guān)做路由,那么網(wǎng)通的IP地址用戶壓根就訪問不到,反之亦然。目前流行的解決辦法,就是使用電信網(wǎng)關(guān)做默認(rèn)的路由,然后自己手工填寫所有網(wǎng)通IP地址段的路由規(guī)則。這個(gè)辦法可以Google搜索到一大把,不展開了。

這種辦法的缺點(diǎn)是添加規(guī)則太多太麻煩,而且難免掛一漏萬,如果你漏了一些網(wǎng)段,那這些網(wǎng)段的用戶就訪問不了你的網(wǎng)站了。況且網(wǎng)段地址的分布總是在不斷變化的,你還必須定期更新路由表。

2、根據(jù)用戶訪問進(jìn)來的路徑設(shè)定動(dòng)態(tài)路由

就是說如果用戶是通過電信IP地址訪問過來的話,那么使用電信網(wǎng)關(guān)做路由,返回內(nèi)容走電信網(wǎng)關(guān);如果用戶通過網(wǎng)通IP地址訪問過來的話,那么使用網(wǎng)通網(wǎng)關(guān)做路由,返回內(nèi)容走網(wǎng)通的網(wǎng)關(guān),這樣就不必那么麻煩的維護(hù)路由表了。以JavaEye網(wǎng)站服務(wù)器為例,具體配置方法如下:

JavaEye網(wǎng)站服務(wù)器電信IP:114.80.66.199,電信網(wǎng)關(guān):114.80.66.1
JavaEye網(wǎng)站服務(wù)器網(wǎng)通IP:60.29.231.190,網(wǎng)通網(wǎng)關(guān):60.29.231.1

1) 默認(rèn)網(wǎng)關(guān)使用電信網(wǎng)關(guān)作為路由

在Linux上面配置默認(rèn)網(wǎng)關(guān),如果是RedHat,應(yīng)該是在/etc/sysconfig/network文件里面添加一行:GATEWAY=114.80.66.1,如果是SuSE,應(yīng)該是在/etc/sysconfig/network/routes里面添加一行:default 114.80.66.1 - - 或者可以直接使用YaST2來配置。

2)添加路由表

修改/etc/iproute2/rt_tables,添加內(nèi)容:

252 tel 電信路由表
251 cnc 網(wǎng)通路由表

 

然后手工添加路由規(guī)則,在Console里面執(zhí)行如下命令:

#添加原路返回路由
ip route flush table tel
ip route add default via 114.80.66.1 dev eth0 src 114.80.66.199 table tel
ip rule add from 114.80.66.199 table tel

ip route flush table cnc
ip route add default via 60.29.231.1 dev eth1 src 60.29.231.190 table cnc
ip rule add from 60.29.231.190 table cnc

 

即讓從電信IP過來的請(qǐng)求按照電信路由返回,從網(wǎng)通IP過來的請(qǐng)求從網(wǎng)通路由返回。這樣就搞定了,是不是很簡(jiǎn)單?這個(gè)辦法是bobo同學(xué)提供的,感謝他。

3) 把路由規(guī)則寫入啟動(dòng)腳本

如果服務(wù)器重啟,或者網(wǎng)絡(luò)服務(wù)重啟,上述的路由規(guī)則就失效了,所以你需要把上面這段命令寫入系統(tǒng)啟動(dòng)腳本和網(wǎng)絡(luò)啟動(dòng)腳本

如果是RedHat,系統(tǒng)啟動(dòng)腳本是/etc/rc.d/rc.local
如果是SuSE,可以自己寫一個(gè)啟動(dòng)腳本,鏈接到S99上,比方說/etc/init.d/rc.local

如果是RedHat,網(wǎng)絡(luò)啟動(dòng)腳本是/etc/rc.d/init.d/network
如果是SuSE,網(wǎng)絡(luò)啟動(dòng)腳本是/etc/init.d/network

關(guān)鍵詞:雙線網(wǎng)絡(luò)

贊助商鏈接: