FreeBSD 路由详解
在同一個(gè)局域網(wǎng)上的計(jì)算機(jī)是直接連通的,但是不同的網(wǎng)絡(luò)上的計(jì)算機(jī)并沒(méi)有直接相連,只能通過(guò)一臺(tái)特殊的專用計(jì)算機(jī) -路由器來(lái)完成連通。路由器連接有多個(gè)網(wǎng)絡(luò)界面,每一個(gè)網(wǎng)絡(luò)界面連接到一個(gè)相應(yīng)的網(wǎng)絡(luò)上,具有一個(gè)這個(gè)網(wǎng)絡(luò)上的IP地址,因此,網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)可以和路 由器本身相互通信。
當(dāng)網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)要向外連接的時(shí)候,數(shù)據(jù)包實(shí)際是交給路由器的,路由器再將數(shù)據(jù)包從連接外部網(wǎng)絡(luò)的網(wǎng)絡(luò)界面上轉(zhuǎn)發(fā)出去,數(shù)據(jù)包經(jīng)過(guò)這 樣一個(gè)一個(gè)的轉(zhuǎn)發(fā)過(guò)程,直到到達(dá)目的地。對(duì)于網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)來(lái)講,沒(méi)有必要了解數(shù)據(jù)包的整個(gè)轉(zhuǎn)發(fā)的路徑和經(jīng)過(guò)的所有路由器的信息,只需要知道第一步需要 將數(shù)據(jù)包交給哪一個(gè)路由器就可以了。因此,計(jì)算機(jī)必須知道與它直接相連接的路由器的有關(guān)信息,這個(gè)過(guò)程就是路由配置的過(guò)程。
進(jìn)行路由配置有兩種途徑,一種是由管理員設(shè)置所有的路由信息,由于數(shù)據(jù)是手工設(shè)置,因此稱為靜態(tài)路由設(shè)置。另一個(gè)是啟動(dòng)一個(gè)支持路由交換協(xié)議的進(jìn)程,自動(dòng)偵測(cè)網(wǎng)絡(luò)上的所有路由器及其相關(guān)信息,這稱為動(dòng)態(tài)路由設(shè)置。
在 FreeBSD系統(tǒng)不用做專門路由器的情況下,一般地說(shuō)使用靜態(tài)路由設(shè)置足夠滿足網(wǎng)絡(luò)通信的需要。
1) 缺省網(wǎng)關(guān)
在最簡(jiǎn)單的情況下,一個(gè)網(wǎng)絡(luò)向外通過(guò)一個(gè)路由器完成向外連接,這個(gè)路由器被稱為缺省網(wǎng)關(guān),它負(fù)責(zé)幾乎所有的向外連接任務(wù)。假設(shè)缺省網(wǎng)關(guān)的地址為 192.168.1.254,則設(shè)置缺省網(wǎng)關(guān)的命令為:
# route add default 192.168.1.254
add net default: gateway 192.168.1.254
在 route指令中,使用default來(lái)代表全部網(wǎng)絡(luò),那么通向全部網(wǎng)絡(luò)的路由器就是缺省網(wǎng)關(guān),而 ” 0.0.0.0 ” 和 default有同樣的含義。
如果系統(tǒng)已經(jīng)設(shè)置了缺省網(wǎng)關(guān),那么系統(tǒng)會(huì)報(bào)告錯(cuò)誤,如果要改變?nèi)笔【W(wǎng)關(guān)的設(shè)置,就需要首先清除原有配置數(shù)據(jù)。
# 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 ” 參數(shù)的意思和 ” add ” 參數(shù)的意思相反,用于清除已經(jīng)設(shè)置的路由數(shù)據(jù)。除了使用 ” delete ” 一個(gè)一個(gè)的刪除路由之外,如果所有的靜態(tài)路由設(shè)置都不再需要,可以使用 ” flush ” 清除所有設(shè)置。
# route flush
default 192.168.1.254 done
上述命令執(zhí)行之后立即生效,因此,可能會(huì)影響已經(jīng)建立的連接。為了保存缺省網(wǎng)關(guān)的配置,同樣也需要將配置寫入系統(tǒng)配置文件 rc.conf。
defaultrouter= “ 192.168.1.254 ”
僅僅配置缺省網(wǎng)關(guān)的大部分情況是在計(jì)算機(jī)處于整個(gè)互聯(lián)網(wǎng)的邊緣,網(wǎng)絡(luò)中僅僅需要一個(gè)路由器接入互聯(lián)網(wǎng)就可以了。
2) 其他靜態(tài)路由設(shè)置
更復(fù)雜的情況下,計(jì)算機(jī)所處的網(wǎng)絡(luò)與多個(gè)網(wǎng)絡(luò)相連接,網(wǎng)絡(luò)中存在多個(gè)路由器,每個(gè)路由器負(fù)責(zé)到一些網(wǎng)絡(luò)的轉(zhuǎn)發(fā)任務(wù),而不負(fù)責(zé)到全部網(wǎng)絡(luò)的轉(zhuǎn) 發(fā)任務(wù)。這種情況下,如果將所有的數(shù)據(jù)都發(fā)給一個(gè)路由器,那么原則上它只能正確轉(zhuǎn)發(fā)目的是它自己負(fù)責(zé)的網(wǎng)絡(luò)的數(shù)據(jù)。實(shí)際使用當(dāng)中,路由器將使用 ICMP協(xié)議,向發(fā)送數(shù)據(jù)的主機(jī)報(bào)告路由錯(cuò)誤。
因此,應(yīng)該在計(jì)算機(jī)中配置這個(gè)網(wǎng)絡(luò)上所有路由器及這些路由器負(fù)責(zé)的相應(yīng)網(wǎng)絡(luò)的路由數(shù)據(jù),以便計(jì)算機(jī)選擇正確的路由器轉(zhuǎn)發(fā)數(shù)據(jù)包。同樣,也必須使用 route命令增加到各個(gè)網(wǎng)絡(luò)的靜態(tài)路由數(shù)據(jù)。 [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 ' 指明子網(wǎng)掩碼的長(zhǎng)度是 24位,它代表二進(jìn)制方式的網(wǎng)絡(luò)掩碼前面非0位的長(zhǎng)度,24個(gè)非0位的掩碼等價(jià)于255.255.255.0,也可以忽略這個(gè)部分,系統(tǒng)使用網(wǎng)絡(luò)地址的缺 省掩碼,例如192.168.20.0屬于一個(gè)C類地址,因此網(wǎng)絡(luò)掩碼是255.255.255.0。但是,如果不是標(biāo)準(zhǔn)的A、B、C類地址,而是一個(gè)被 劃分過(guò)的子網(wǎng),就必須指明子網(wǎng)掩碼,例如192.168.30.0/25,必須指明掩碼長(zhǎng)度是25位,否則系統(tǒng)使用缺省的掩碼。如果不使用掩碼長(zhǎng)度的形 式,則可以使用 ' -netmask ' 參數(shù)的形式指明網(wǎng)絡(luò)掩碼。
即便如此,上面的指令也不是沒(méi)有問(wèn)題。對(duì)于標(biāo)準(zhǔn)的網(wǎng)絡(luò)地址, route指令能確定網(wǎng)絡(luò)地址和掩碼,但是對(duì)于象192.168.30.128這樣的地址,在通常情況下,它屬于一個(gè)計(jì)算機(jī)的普通IP地址,route指 令也能設(shè)置通向單獨(dú)計(jì)算機(jī)的路由,因此上面的命令將設(shè)置一個(gè)通向192.168.30.128這一個(gè)主機(jī)的路由。系統(tǒng)將返回:
# route add 192.168.30.128 192.168.1.253
add host 192.168.30.128: gateway 192.168.1.253
而其他情況下將返回 ” add net ...” ,表明地址代表一個(gè)網(wǎng)絡(luò)而不是一個(gè)單獨(dú)的計(jì)算機(jī)。然而,很多情況下,這個(gè)地址被用作一個(gè)網(wǎng)絡(luò)地址,是一個(gè)代表從 192.168.30.128到192.168.30.255整個(gè)網(wǎng)絡(luò)的網(wǎng)絡(luò)地址,它的掩碼為25位長(zhǎng)的255.255.255.128。
甚至在一些極端的情況下,地址 192.168.10.0也可以用來(lái)代表一個(gè)具體的計(jì)算機(jī)的IP地址,而不是一個(gè)網(wǎng)絡(luò)地址。
為了指定這些非標(biāo)準(zhǔn)情況,必須使用額外的參數(shù)。
# route add -net 192.168.10.0/24 192.168.1.253
# route add -net 192.168.20.0 192.168.1.253
上面指令中的 -net參數(shù)是一個(gè)可選參數(shù),它明確指出這個(gè)路由是通向一個(gè)網(wǎng)絡(luò)的路由數(shù)據(jù),否則[page]route只能從所給予的IP地址中判斷它是網(wǎng)絡(luò)還是計(jì)算 機(jī),就有可能發(fā)生與管理員想法并不一致的設(shè)置。同樣可以指定-host參數(shù)為一個(gè)單獨(dú)的遠(yuǎn)程計(jì)算機(jī)指定路由。
# route add -host 192.168.20.0 192.168.1.253
非缺省網(wǎng)關(guān)的靜態(tài)路由設(shè)置同樣也需要保存在 rc.conf中,以備下次啟動(dòng)時(shí)自動(dòng)配置。
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 ”
保存靜態(tài)路由的方法略為復(fù)雜,這是因?yàn)殪o態(tài)路由的數(shù)量并不確定,因此首先給靜態(tài)路由確定一個(gè)名字,例如 static1、static2等,使static_routes變量中包含這些名字,然后將具體的路由設(shè)置保存在route_static1等類似的由 靜態(tài)路由的名字組成的變量中。
需要注意的是,一些舊版本的 FreeBSD系統(tǒng)直接使用靜態(tài)路由的名字作變量名字,具體設(shè)置如下:
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) 查看路由信息
設(shè)置完路由表之后,可以使用 netstat -r命令來(lái)查看當(dāng)前的路由表的內(nèi)容。
# 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
該命令執(zhí)行結(jié)果的第一列顯示的是路由的目的,可以是一個(gè)網(wǎng)絡(luò)地址,也可以是一個(gè)主機(jī)地址;而第二列則顯示了到達(dá)該目的應(yīng)使用網(wǎng)關(guān)地址,可以 有三種形式,對(duì)于不能直接到達(dá)的網(wǎng)絡(luò)地址和主機(jī)地址來(lái)講,通常使用網(wǎng)關(guān)的 IP地址形式,對(duì)于與本機(jī)直接相連接的網(wǎng)絡(luò),通常使用網(wǎng)絡(luò)界面的來(lái)表示,如 ' link#1 ' 表示第一個(gè)網(wǎng)絡(luò)界面,而對(duì)于可以直接到達(dá)的主機(jī)地址,則使用該地址的 MAC地址來(lái)表示網(wǎng)關(guān);
第三列則為該路由屬性的一些標(biāo)志, ' U ' 表示路由當(dāng)前可以使用, ' G ' 表示到達(dá)目的需要對(duì) IP數(shù)據(jù)包進(jìn)行專發(fā), ' S ' 表示是手工添加的靜態(tài)路由,而不是系統(tǒng)自動(dòng)產(chǎn)生的路由數(shù)據(jù), ' C ' 和 ' c ' 表示在使用中會(huì)產(chǎn)生新的路由,通常對(duì)網(wǎng)絡(luò)的路由帶有這個(gè)標(biāo)志,因?yàn)橐坏┊a(chǎn)生具體的連接,則會(huì)添加到達(dá)具體主機(jī)的路由數(shù)據(jù), ' H ' 表示是針對(duì)獨(dú)立主機(jī)地址的路由數(shù)據(jù), ' L ' 表示使用網(wǎng)關(guān)地址中的 MAC地址發(fā)送數(shù)據(jù), ' W ' 表示路由是由 ' C ' 或 ' c ' 標(biāo)志指定的路由生成的。
第四列和第五列是表示該路由數(shù)據(jù)在路由處理中被引用或使用的一些數(shù)據(jù),而第六列標(biāo)識(shí)了該路由使用的網(wǎng)絡(luò)界面,第七列則標(biāo)識(shí)該路由數(shù)據(jù)的有效時(shí)間,當(dāng)路由數(shù)據(jù)達(dá)到有限時(shí)間的時(shí)候,該路由數(shù)據(jù)就被自動(dòng)撤消。
從這些結(jié)果來(lái)看,系統(tǒng)自動(dòng)將可以直接達(dá)到的網(wǎng)絡(luò)加入路由表中,就是說(shuō) ifconfig執(zhí)行更改地址的同時(shí)也更改了路由,這也就解釋了前面章節(jié)中使用ifconfig配置同網(wǎng)絡(luò)IP地址帶來(lái)的執(zhí)行錯(cuò)誤的問(wèn)題。
同樣,直接可以連接的主機(jī)也被系統(tǒng)自動(dòng)加入路由表中,路由信息記錄了詳細(xì)的連接方式,包括與該地址通信的是哪個(gè)網(wǎng)絡(luò)界面和該地址的 MAC地址。
事實(shí)上,使用 route指令也完全可以手工指定該地址應(yīng)該用哪個(gè)網(wǎng)絡(luò)界面進(jìn)行通信,通信目標(biāo)的MAC地址是多少。
# route add -host 192.168.30.122 -iface -link xl0:0:12:3f:2:3:4
上述指令將設(shè)置通向 192.168.30.122為通過(guò)xl0網(wǎng)絡(luò)界面,目的MAC地址為0:12:3f:2:3:4。顯然,正常情況下不需要如此設(shè)置,除非某些特殊情況 下,例如對(duì)于ATM網(wǎng)絡(luò)界面用來(lái)設(shè)置PVC等等,這種作法也能用來(lái)支持所謂MAC地址與IP地址綁定,然而由于計(jì)算機(jī)的MAC地址可以隨意改變,因此這種 使用綁定來(lái)增加網(wǎng)絡(luò)安全的思路顯然是沒(méi)有什么太大的用處的。
4) 保存配置
要想讓系統(tǒng)重起之后配置仍然有效,就必須將上面的配置保存到配置文件 /etc/rc.conf中,通常情況下設(shè)置好了網(wǎng)絡(luò)的這個(gè)文件應(yīng)該與下面的例子相似:
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 ”
總結(jié)
以上是生活随笔為你收集整理的FreeBSD 路由详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 中班教案《小车迷》
- 下一篇: Synergy软件的基本配置/使用(详细