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