路由器的作用是將封包從一個網絡繞送到另外一個網絡,但要做到這個功能,需要路由器學習遠程的網絡,而學習遠程網絡的方式按大類分主要有兩種,一種是靜態路由設定,另外一種是動態路由設定(比如RIP、EIGRP、OSPF),本文介紹的是靜態路由設定。
圖1是本文的主要架構圖,PC0、PC1以及各路由器的IP地址已經設定好。
設定好 R1、R2、R3的接口IP地址,以及PC0、PC1的IP地址、子網掩碼以及網關之后,我們來試一下PC0能否順利與遠方的PC1溝通。
使用PC0(192.168.11.10) ping PC1(192.168.33.10),發 現 是 ping不 通的,而且響應的是192.168.11.1,也就是PC0的網關地址,為什么呢?
接下來,為了知道PC0的封包去到哪個階段出問題,可以使用tracert指令查看一下,在PC0上輸入“tracert 192.168.33.10”,發現封包只去到192.168.11.1,然后就傳不下去了,為什么呢?
要了解原因,我們需要了解路由表,可以看到,目前有2條路由信息分別是網絡192.168.11.0以及192.168.12.0在路由表上,因為這兩個網絡是與R1直接的,所以不用網管人員設定什么也會自動學習到,如圖2所示。
我們用圖3中的信息對上面的路由信息做解釋。

圖1 網絡架構圖

圖2 路由表上有2條路由信息

圖3 通過此圖來解釋以上路由信息
現在可以來探討一下為什么PC0 ping不通PC1以及為什么封包只去到192.168.11.1。這是因為R1一開始只能學習到直連的網絡,對于PC1來說,它的網絡是192.168.33.0,這是一個遠程網絡,R1無法學習到,因此,當封包去到R1時,R1的路由表里根本沒有這條路由信息,也就無法給封包指明路徑。因此,R1的做法是丟棄該封包,并“禮貌”地給PC0回傳一條信息。
為解決這個問題,我們可以在R1中手動加入一條192.168.33.0的路由信息,讓R1學習到遠程的網絡。方式是在R1中輸入“ip route 192.168.33.0 255.255.255.0 fa0/1”。
這條指令的解讀是192.168.33.0/24這個網絡可以通過fa0/1這個方向送出去。由于這種設定路由的方式是手動的,因此叫做靜態路由設定。
設定好之后我們再來查看一下R1的路由表,可以看到192.168.33.0這條路由信息,并且是通過S(static)的靜態方式學習進來的,如圖4所示。
同樣的,我們要在R2設定192.168.33.0這條路由信息,如圖5所示。

圖4 查看R1路由表信息

圖5 設定R2路由信息

圖6 在R2和R3上設定路由信息
設定好之后,再來嘗試一下用PC0 ping PC1,發現依舊沒有成功,為什么呢?
其實PC0的封包是有成功送到PC1的,只是PC1回傳信息給PC0時,由于R3沒有192.168.11.0的路由信息,R2也沒有這條路由信息,才導致PC1雖然成功收到來自PC0的封包,但回傳的時候卻因為R3、R2路由信息不足而無法回傳給PC0,所以,我們要在R3和R2上設定192.168.11.0的路由信息,如圖6所示。
設定好之后,再使用PC0 ping PC1,發現現在可以成功溝通了。
有一點需要留意的是,比如我們在R3設定192.168.11.0這條路由信息,用的指令是“ip route 192.168.11.0 255.255.255.0 fa0/0”,需要特別留意的是這個fa0/0是指192.168.11.0這個網絡可以從fa0/0這個接口送出去,這叫做出口接口,在設定路由信息時,除了用出口接口,還可以用“next hop ip”,舉個例子,R3要去192.168.11.0除了可以指定出口接口為fa0/0之外,還可以設定它的下一站IP,R3的下一站IP是192.168.23.1,所以,我們也可以用“ip route 192.168.11.0 255.255.255.0 192.168.23.1”這種 next hop ip 來替代出口界面。那么可以兩種方式混搭嗎?答案是可以的,我們也可以通過“ip route 192.168.11.0 255.255.255.0 fa0/0 192.168.23.1”這種既指定出口接口,又指明next hop ip的方式來設定路由,有興趣的讀者請自行做實驗。
但是,什么時候用出口接口,什么時候用next hop ip好呢?一般來說,對于多重網絡,一般建議使用next hop ip 或者next hop ip混搭出口接口。
如圖7所示,PC2要跟PC3溝通,封包可以走R2那條路徑或者走R3那條路徑,也就是說,到達PC3的路徑有兩條,在這種情況下,如果我們用的是出口接口,則無法保證封包是走上面那條還是下面那條路徑,所以在這種多重網絡的情況下,如果要指定封包走上面或者下面那條路徑,較好的方式是使用next hop ip或者next hop ip混搭出口接口。

圖7 多重網絡下選擇路徑

圖8 設定預設路由

圖9 R1、R2、R3的路由設定
最后,需要特別說明的是,在公司內,一般情況下所有的路由器都應該知道公司內其他網絡的情況,也就是路由表中應該儲存著所有關于公司內的網絡,如此才有可能做到不管封包的目的地是哪里,都可以幫忙繞送。
但是,公司內的終端設備不一定只在公司內通信,也有可能要到互聯網,如果要公司內的路由器上的路由表學習到互聯網上所有的網絡是不太實際的行為,但如果不學習的話由于路由表中缺乏相關路由信息又會把封包丟棄,解決方法是在路由器中設定預設路由,所謂預設路由就是當路由表中沒有的通通往預設路由送去,做法類似于計算機上設定網關。
以圖8為例,一般的做法是R1的預設網關設定為R2的方向,R2設定為R3的方向,而R3設定為Internet的方向。
具體來說,在R1、R2、R3上分別作如圖9的設定,“ip route 0.0.0.0 0.0.0.0”是設定默認路由的指令,設定好之后,以后 R1、R2、R3遇到路由表上沒有的路由信息,都會往R3送去,通過R3把封包送到Internet上,由ISP幫忙做轉發,從而把封包送到目的地,做到可以與公司外的設備通信的目的。