FreeBSD 路由详解
在同一個局域網上的計算機是直接連通的,但是不同的網絡上的計算機并沒有直接相連,只能通過一臺特殊的專用計算機 -路由器來完成連通。路由器連接有多個網絡界面,每一個網絡界面連接到一個相應的網絡上,具有一個這個網絡上的IP地址,因此,網絡內部的計算機可以和路 由器本身相互通信。
當網絡內部的計算機要向外連接的時候,數據包實際是交給路由器的,路由器再將數據包從連接外部網絡的網絡界面上轉發出去,數據包經過這 樣一個一個的轉發過程,直到到達目的地。對于網絡內部的計算機來講,沒有必要了解數據包的整個轉發的路徑和經過的所有路由器的信息,只需要知道第一步需要 將數據包交給哪一個路由器就可以了。因此,計算機必須知道與它直接相連接的路由器的有關信息,這個過程就是路由配置的過程。
進行路由配置有兩種途徑,一種是由管理員設置所有的路由信息,由于數據是手工設置,因此稱為靜態路由設置。另一個是啟動一個支持路由交換協議的進程,自動偵測網絡上的所有路由器及其相關信息,這稱為動態路由設置。
在 FreeBSD系統不用做專門路由器的情況下,一般地說使用靜態路由設置足夠滿足網絡通信的需要。
1) 缺省網關
在最簡單的情況下,一個網絡向外通過一個路由器完成向外連接,這個路由器被稱為缺省網關,它負責幾乎所有的向外連接任務。假設缺省網關的地址為 192.168.1.254,則設置缺省網關的命令為:
# route add default 192.168.1.254
add net default: gateway 192.168.1.254
在 route指令中,使用default來代表全部網絡,那么通向全部網絡的路由器就是缺省網關,而 ” 0.0.0.0 ” 和 default有同樣的含義。
如果系統已經設置了缺省網關,那么系統會報告錯誤,如果要改變缺省網關的設置,就需要首先清除原有配置數據。
# route add default 192.168.1.254
rotue: writing to routing socket: File exists
add net default: gateway 192.168.1.254: File exists
# route delete default
delete net default
顯然 ” delete ” 參數的意思和 ” add ” 參數的意思相反,用于清除已經設置的路由數據。除了使用 ” delete ” 一個一個的刪除路由之外,如果所有的靜態路由設置都不再需要,可以使用 ” flush ” 清除所有設置。
# route flush
default 192.168.1.254 done
上述命令執行之后立即生效,因此,可能會影響已經建立的連接。為了保存缺省網關的配置,同樣也需要將配置寫入系統配置文件 rc.conf。
defaultrouter= “ 192.168.1.254 ”
僅僅配置缺省網關的大部分情況是在計算機處于整個互聯網的邊緣,網絡中僅僅需要一個路由器接入互聯網就可以了。
2) 其他靜態路由設置
更復雜的情況下,計算機所處的網絡與多個網絡相連接,網絡中存在多個路由器,每個路由器負責到一些網絡的轉發任務,而不負責到全部網絡的轉 發任務。這種情況下,如果將所有的數據都發給一個路由器,那么原則上它只能正確轉發目的是它自己負責的網絡的數據。實際使用當中,路由器將使用 ICMP協議,向發送數據的主機報告路由錯誤。
因此,應該在計算機中配置這個網絡上所有路由器及這些路由器負責的相應網絡的路由數據,以便計算機選擇正確的路由器轉發數據包。同樣,也必須使用 route命令增加到各個網絡的靜態路由數據。 [page]
# route add 192.168.10.0/24 192.168.1.253
# route add 192.168.20.0 192.168.1.253
# route add 192.168.30.0/25 192.168.1.253
# route add 192.168.30.128 192.168.1.253
# route add 192.168.40.0 -netmask 255.255.255.0 192.168.1.253
上面指令給出了幾種不同的情況, IP地址之后的 ' /24 ' 指明子網掩碼的長度是 24位,它代表二進制方式的網絡掩碼前面非0位的長度,24個非0位的掩碼等價于255.255.255.0,也可以忽略這個部分,系統使用網絡地址的缺 省掩碼,例如192.168.20.0屬于一個C類地址,因此網絡掩碼是255.255.255.0。但是,如果不是標準的A、B、C類地址,而是一個被 劃分過的子網,就必須指明子網掩碼,例如192.168.30.0/25,必須指明掩碼長度是25位,否則系統使用缺省的掩碼。如果不使用掩碼長度的形 式,則可以使用 ' -netmask ' 參數的形式指明網絡掩碼。
即便如此,上面的指令也不是沒有問題。對于標準的網絡地址, route指令能確定網絡地址和掩碼,但是對于象192.168.30.128這樣的地址,在通常情況下,它屬于一個計算機的普通IP地址,route指 令也能設置通向單獨計算機的路由,因此上面的命令將設置一個通向192.168.30.128這一個主機的路由。系統將返回:
# route add 192.168.30.128 192.168.1.253
add host 192.168.30.128: gateway 192.168.1.253
而其他情況下將返回 ” add net ...” ,表明地址代表一個網絡而不是一個單獨的計算機。然而,很多情況下,這個地址被用作一個網絡地址,是一個代表從 192.168.30.128到192.168.30.255整個網絡的網絡地址,它的掩碼為25位長的255.255.255.128。
甚至在一些極端的情況下,地址 192.168.10.0也可以用來代表一個具體的計算機的IP地址,而不是一個網絡地址。
為了指定這些非標準情況,必須使用額外的參數。
# route add -net 192.168.10.0/24 192.168.1.253
# route add -net 192.168.20.0 192.168.1.253
上面指令中的 -net參數是一個可選參數,它明確指出這個路由是通向一個網絡的路由數據,否則[page]route只能從所給予的IP地址中判斷它是網絡還是計算 機,就有可能發生與管理員想法并不一致的設置。同樣可以指定-host參數為一個單獨的遠程計算機指定路由。
# route add -host 192.168.20.0 192.168.1.253
非缺省網關的靜態路由設置同樣也需要保存在 rc.conf中,以備下次啟動時自動配置。
static_routes= “ static1 static2 ”
route_static1= “ -net 192.168.10.0/24 192.168.1.253 ”
route_static2= “ -net 192.168.20.0/24 192.168.1.253 ”
保存靜態路由的方法略為復雜,這是因為靜態路由的數量并不確定,因此首先給靜態路由確定一個名字,例如 static1、static2等,使static_routes變量中包含這些名字,然后將具體的路由設置保存在route_static1等類似的由 靜態路由的名字組成的變量中。
需要注意的是,一些舊版本的 FreeBSD系統直接使用靜態路由的名字作變量名字,具體設置如下:
static_routes= “ static_route1 static_route2 ”
static_route1= “ -net 192.168.10.0/24 192.168.1.253 ”
static_route2= “ -net 192.168.20.0/24 192.168.1.253 ”
3) 查看路由信息
設置完路由表之后,可以使用 netstat -r命令來查看當前的路由表的內容。
# netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.1.254 UGSc 1 941 xl0
127.0.0.1 127.0.0.1 UH 1 644 lo0
192.168.1 link#1 UC 0 0 xl0
192.168.1.254 0:e0:1e:ce:85:a9 UHLW 2 0 xl0
192.168.1.64 0:90:27:4e:f6:67 UHLW 1 6 lo0
192.168.1.253 link#1 UHLW 2 0 xl0
192.168.10 192.168.1.253 UGSc 0 0 xl0
192.168.20 192.168.1.253 UGSc 0 0 xl0
該命令執行結果的第一列顯示的是路由的目的,可以是一個網絡地址,也可以是一個主機地址;而第二列則顯示了到達該目的應使用網關地址,可以 有三種形式,對于不能直接到達的網絡地址和主機地址來講,通常使用網關的 IP地址形式,對于與本機直接相連接的網絡,通常使用網絡界面的來表示,如 ' link#1 ' 表示第一個網絡界面,而對于可以直接到達的主機地址,則使用該地址的 MAC地址來表示網關;
第三列則為該路由屬性的一些標志, ' U ' 表示路由當前可以使用, ' G ' 表示到達目的需要對 IP數據包進行專發, ' S ' 表示是手工添加的靜態路由,而不是系統自動產生的路由數據, ' C ' 和 ' c ' 表示在使用中會產生新的路由,通常對網絡的路由帶有這個標志,因為一旦產生具體的連接,則會添加到達具體主機的路由數據, ' H ' 表示是針對獨立主機地址的路由數據, ' L ' 表示使用網關地址中的 MAC地址發送數據, ' W ' 表示路由是由 ' C ' 或 ' c ' 標志指定的路由生成的。
第四列和第五列是表示該路由數據在路由處理中被引用或使用的一些數據,而第六列標識了該路由使用的網絡界面,第七列則標識該路由數據的有效時間,當路由數據達到有限時間的時候,該路由數據就被自動撤消。
從這些結果來看,系統自動將可以直接達到的網絡加入路由表中,就是說 ifconfig執行更改地址的同時也更改了路由,這也就解釋了前面章節中使用ifconfig配置同網絡IP地址帶來的執行錯誤的問題。
同樣,直接可以連接的主機也被系統自動加入路由表中,路由信息記錄了詳細的連接方式,包括與該地址通信的是哪個網絡界面和該地址的 MAC地址。
事實上,使用 route指令也完全可以手工指定該地址應該用哪個網絡界面進行通信,通信目標的MAC地址是多少。
# route add -host 192.168.30.122 -iface -link xl0:0:12:3f:2:3:4
上述指令將設置通向 192.168.30.122為通過xl0網絡界面,目的MAC地址為0:12:3f:2:3:4。顯然,正常情況下不需要如此設置,除非某些特殊情況 下,例如對于ATM網絡界面用來設置PVC等等,這種作法也能用來支持所謂MAC地址與IP地址綁定,然而由于計算機的MAC地址可以隨意改變,因此這種 使用綁定來增加網絡安全的思路顯然是沒有什么太大的用處的。
4) 保存配置
要想讓系統重起之后配置仍然有效,就必須將上面的配置保存到配置文件 /etc/rc.conf中,通常情況下設置好了網絡的這個文件應該與下面的例子相似:
hostname="wb.example.com.cn"
ifconfig_xl0="inet 192.168.1.64 netmask 255.255.255.0"
ifconfig_lo0="inet 127.0.0.1"
defaultrouter= “ 192.168.1.1 ”
static_routes= “ static1 static2 ”
route_static1= “ -net 192.168.10.0/24 192.168.1.253 ”
route_static2= “ -net 192.168.20.0/24 192.168.1.253 ”
總結
以上是生活随笔為你收集整理的FreeBSD 路由详解的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 中班教案《小车迷》
 - 下一篇: Synergy软件的基本配置/使用(详细