1.路由器的原理
先說說路由是怎么一回事情。 TCP/IP通訊時, 使用IP和netmask來確定機器所在的子網(wǎng), 如果是同子網(wǎng)的機器間通訊, 就直接用廣播的方法傳過去。 具體情況是:
源地址發(fā)出arp廣播詢問目的地址的MAC
目的地址回應(yīng)arp廣播, 將MAC發(fā)會源地址
建立連接開始傳送(也是廣播的方式)
如果目的地址和源地址不在同一子網(wǎng)內(nèi)就需要把包傳送到路由器(網(wǎng)關(guān), 注意TCP/IP通訊中路由和網(wǎng)關(guān)是一個概念, 不過這并不適用于所有的通訊協(xié)議), 再由路由器一級級的發(fā)送, 直到送到目的地址所在子網(wǎng)的路由器, 再由此路由器在此子網(wǎng)內(nèi)用廣播的方式傳送。
路由分為動態(tài)路由和靜態(tài)路由。 其中靜態(tài)路由的是很簡單的, 就是在網(wǎng)絡(luò)中從源地址到任意的目的地址都只要一條固定的傳送路線。 動態(tài)路由也就是有好幾條傳送路線啦。動態(tài)路由的好處再于如果一條路線不通了還可以使用另外一條路線, 這時就有兩個很重要的問題: 如何選擇最合適的傳送路線? 如何傳遞路由信息?
不同的選擇方法和傳遞方式產(chǎn)生了不同的路由協(xié)議。 動態(tài)路由協(xié)議中最常用的是RIP協(xié)議和EGP協(xié)議, 其他的還有 Hello, BGP ( 好象是這個吧, :pp 反正我是沒有見過的) 等。 選擇傳遞路線的方法在配置路由器中不是重點, 這里就不說了。 下面重點講下路由信息的傳遞。
RIP 協(xié)議是通過主動的廣播是傳送路由表的。 它的實現(xiàn)方法很簡單, 路由器在啟動的時候發(fā)出一個請求, 收到請求的機器就把自己的路由表傳送給它。 也可以由路由器主動的廣播來發(fā)出自己的路由表。 RIP 協(xié)議常常用在不大的局域網(wǎng)中, 很多的Unix工作站都配置了 RIP 協(xié)議(由一個叫 routed 的 daemon 來完成)。 這樣作的好處在于方便了網(wǎng)絡(luò)管理員, 可以不用每臺機器或者路由器都配置的路由表(網(wǎng)關(guān))。 實際上, 中科院的網(wǎng)絡(luò)用的就是RIP。 按我的意見, RIP 是最弱的, 如果有人搗亂一下, 胡亂廣播路由表, 結(jié)果一定會很好看 :)
EGP 協(xié)議在傳送自己的路由表前要通過一個"找鄰居"的方法來確定不會收到不相干的路由表, 其具體方法是路由器要先配置幾個鄰居, 也就是其他的路由器, 由這些路由器來傳遞給它的路由表。 這樣, 路由器就安全多了。
上面簡單的談了一些在配置路由器中可能用到的原理, 很多地方可能講得不是很正確和完整, 希望各位看官不吝賜教。 :)
2.用 Linux 做路由的方法
Linux 做路由是很容易的, 不過要分清不同的情況, 很多人在配置路由時弄錯了情況,以至于費了很大勁也弄不出來。 我把常見的情況分為3種:
1。 只有有限的 ip 資源, 希望通過一個合法 ip 代理出多個內(nèi)部 ip 的情況這個使用 Ip Masquerade 就可以了, 具體方法可以參看 Ip Masquerade的中文How-To 或 raner 寫的 Linux做路由器(精華區(qū)中)
2。 為了減輕局域網(wǎng)的負擔, 把幾個合法 ip 單獨割出來, 做一個小子網(wǎng)的情況。
這種情況, 就是精華區(qū)中那篇最老的 Linux做路由器 的文章了, 是那個臺灣人寫的那篇。 這種情況是最簡單的, 只要在內(nèi)核中編譯上網(wǎng)卡的驅(qū)動和Ip Forwarding 再正確算出 netmask , 寫靜態(tài)路由表和arp表即可。
想補充兩句的是關(guān)于靜態(tài)路由表和arp表的問題, 一般人只是照者去做了沒有想為什么, 其實弄清為什么還是對配置路由器和處理故障很有幫助的這里增加的靜態(tài)路由表的作用是告訴從外面來要進子網(wǎng)的包路由的方向增加靜態(tài)arp表是因為這個子網(wǎng)本來是從大的子網(wǎng)劃出去的, 所以本子網(wǎng)內(nèi)傳送包以及從大子網(wǎng)的外面來包的時候, 包的源地址廣播發(fā)出的arp申請需要回應(yīng), 這個工作本來是由那個IP的機器來完成的, 可是現(xiàn)在隔了個路由器, arp請求傳不過去,而且也需要路由器來應(yīng)答, 以使得源地址把數(shù)據(jù)傳送到路由器上。
3。 想用linux來替代以前的正常的路由器。這種情況大多是因為, 硬件路由價格昂貴,軟路由的功能上或性能上不能滿足要求。 這種情況以前沒有文章提到過, 其實這倒是最簡單的一種情況。
這時只要問清楚運行的路由協(xié)議就可以了,如果是靜態(tài)路由的話, 先設(shè)置好你的網(wǎng)卡, 使得你做路由的機器可以ping通外面和里面子網(wǎng),這部分slackware和redhat的設(shè)置各不相同, redhat比較簡單, 只要用 netconfig 加上就可以, 而slackware對第一塊網(wǎng)卡用netconfig命令, 對后面的網(wǎng)卡則要手工寫一下
ifconfig $IF1 $IPADDR1 netmask $NETMASK1 broadcast $BROADCAST1
route add -net $NETWORK1 netmask $NETMASK1 gw $IPADDR1
命令。 這時候路由就算配置好了, 不過要注意的是, redhat 上的 Ip Forwarding的開關(guān)缺省是關(guān)上的, 需要在 netconfig 里面設(shè)為打開。如果沒有裝 X 的東西,那么也可以手工修改/etc/sysconfig/network 文件和/etc/sysconfig/network-script目錄下的 if-eth? 等文件如果是動態(tài)路由的話要分情況, rip 是最好弄的, 只要起個 routed 就可以了, 如果不行就給 routed 加上 -g -s參數(shù)讓routed去廣播路由表就可以了。
如果是其他的情況就要配置 gated 了, gated 是一個專用的, 支持多路由協(xié)議的高效的路由軟件, 其缺點是配置麻煩,如果我再寫下去就會吃了中午飯了, 所以呢有能力的就去看man和文檔,沒有時間和精力去看的呢先推薦一本書《TCP/IP Administration》有中文譯本, 內(nèi)容是老點, 不過還值得收藏, 里面對路由問題講得很清楚。 如果連書都不想買, 那只好等我有空再寫啦……
選擇什么發(fā)行版本來實現(xiàn)路由器呢? 通常的可以使用 slackware 和 redhat,基本上對redhat不是非常清楚的用戶不要使用redhat, 因為要用得好還是很麻煩的, 選擇要安裝的軟件就是很討厭的事情, redhat 的東西常常會有hole如果對系統(tǒng)不熟還是不要用。 slackware 很簡單( 甚至可以說很單純 :), 很適合對系統(tǒng)不太熟悉的用戶使用。
當然這些大的distribution拿來做route當然是可以的啦, 不過呢, 我可以給大家推薦一個很小很小的東西, 就是 LRP( Linux Route Project ), 這個東西還是很酷的, 是一個微型的debian, 到底有多小呢? 只有一張軟盤!!! 不要看它小, 可是功能很全, 而且設(shè)置很簡單, 基本上不懂 linux 也可以設(shè)置 。