Linux網路管理員手冊(5) 第五章 配置TCP/IP網路 proc檔案系統 設定主機名 分配IP地址 IP的介面配置 乙太網介面 (轉)

worldblog發表於2007-12-08
Linux網路管理員手冊(5) 第五章 配置TCP/IP網路 proc檔案系統 設定主機名 分配IP地址 IP的介面配置 乙太網介面 (轉)[@more@]管理員手冊(5)
2000-07-28 17:01
釋出者:tobull@21cn.com">netbull 閱讀次數:2706 翻譯:趙炯
gohigh@shtdu.edu.cn


第五章 網路


在本章中,我們將討論在機器上設定TCP/IP網路所要經歷的所有步驟。我們將從的分配開始,逐步描述TCP/IP網路介面的配置過程,並且介紹幾個在解決網路問題時非常有用的工具。
本章所述的大多數工作通常你只需要做一次。而後,僅當你要向網路中增加新時,或者當你完全重新配置你的系統時,你才會接觸許多配置。然而,有些用於配置TCP/IP的命令必須在系統每次引導時都要之。這通常是透過在系統的/etc/rc指令碼中它們來做的。
一般地,這個過程的網路專有部分包括在稱為rc.net或rc.inet的指令碼中。有時,你也會看到名為rc.inet1和rc.inet2的兩個指令碼檔案,前一個用於初始化網路的核心部分,而後者啟動基本的網路服務和應用。在本章下面,我將注重討論後者的概念。
下面,我將討論執行rc.inet1的作用結果,而應用程式將在後面章節中討論。在讀完本章以後,你將建立起在上正確配置TCP/IP的一個命令順序。然後,你應該替換計算機上rc.inet1裡的任何例子命令、確信rc.inet1在系統引導時被執行,並重新引導你的機器。隨著你中意的Linux版本而來的網路rc指令碼會給你一個很好的例子。

5.1 安裝proc檔案系統
有些Net-2版本的配置工具要依賴proc檔案系統來與核心進行通訊。這是一個使用像檔案系統似的機制以允許對核心執行時資訊進行訪問的介面。當載入時,你可以象使用任何其它檔案系統一樣地列出檔案、或顯示它們的內容。典型的項包括含有系統平均負載的loadavg檔案、或顯示當前核心以及使用情況的meminfo。
對於此,網路程式碼新增了net目錄。它含有許多檔案,這些檔案顯示象核心表格、TCP連線狀態,以及[選擇]表。許多網路管理工具從這些檔案中取得它們的資訊。
Proc檔案系統(或者也以procfs而著稱)通常在系統引導時被載入到/proc目錄上。最好的辦法是將下面幾行增加到/etc/fstab之中:

# procfs mont point:
none /proc proc defaults

並且從你的/etc/rc指令碼中執行“mount /proc” 。
預設地,現在procfs被配置進大多數的核心中。如果procfs不在你的核心中,你會得到象這樣的訊息:“mount: fs type procfs not supported by kernel”(“載入:核心不支援檔案系統型別procfs”)。你就必須重新編譯核心並且在問及procfs支援時回答“yes”。

5.2 安裝執行檔案
如果你正在使用一個打包之前的(未打包的)Linux釋出版本,它將很可能包括主要的網路應用程式以及實用工具和附帶的一組例子檔案。你可能必須得到和安裝新工具的唯一情況是當你安裝了一個新的核心版本。由於它們有時在核心的網路層中含有更改的情況,你將需要基本配置工具。這起碼包括重新編譯,但有時也可能需要獲得最新的執行檔案組。這些通常和核心一起發行,以文件的形式打包並切稱為net-XXX.tar.gz,這裡XXX是版本號。與Linux 1.0相匹配的是0 .32b,在本書寫作時的最新核心(1.1.12及以後)需要0.32d。
如果你想自己編譯並且安裝標準TCP/IP網路應用程式的話,你可以從許多Linux 上獲得原程式。這些是或多或少從Net-或其它原程式經過大量修正的程式版本。其它的應用程式,比如Xmosaic、xarchie、或Gopher以及IRC客戶程式必須分別地獲得。其中大多數程式如果按照說明編譯,則與盒裝版本的一樣。
官方的Net-3的FTP站點是sunacm.swan.ac.uk,鏡象站點在sunsite.unc.edu下的system/Network/sunacm。最新的Net-2e程式以及執行程式在ftp.aris.com。Matthias Urlichs的起源於BSD網路程式碼的程式在ftp.ira.uka.de.in /pub/system/linux/上有。

5.3 另一個例子

在本書的餘下部分,讓我介紹一個新的例子,這個例子要比Groucho Marx大學的例子簡單,並且可能更加接近你實際要遇到的問題。考慮虛擬釀酒廠(Virtual Brewery),一個小型的釀造—正如名稱指出的那樣--虛擬啤酒的公司。為了更有效地管理好他們的生意,虛擬釀酒人想要將他們的計算機連網,這些正好都是執行bright and shiny 1.0(明亮與閃耀1.0)的PC機。
在同一樓層上恰好穿過大廳的地方,有一家工作與之相近的葡萄釀酒廠。他們有一個自己的乙太網。很自然地,一旦他們的網路開始正常運作時,這兩家公司就想將他們的網路連線起來。作為第一步,他們想要設定一臺用於在這兩個子網之間轉發資料包的閘道器主機。接下來,他們也想有一個與外界世界聯絡的UUCP連結,透過這個連線,他們就能交換和news了。最後,他們也希望安裝一個SLIP連線以便有時能連線到Internet上。

5.4 設定主機名(hostname)
絕大多數情況下—如果不是全部的話,網路應用程式要依賴於合理地設定本地主機名。這通常是在引導過程透過執行hostname命令來完成的。如要將主機名設定成name的話,它的呼叫如

# hostname name

使用一個與任何域名都無關的任意的主機名也是常有的事。例如,虛擬釀酒廠的主機可能叫做vale.vbrew.com、vlager.vbrew.com等等。這些是它們正式的、全資域名。它們的本地主機名將是這個名字的第一部分,如vale。然而,由於本地主機名常常用來查詢主機的IP地址,你就必須確信解析庫能夠查詢到該主機的IP地址。這通常意味著你必須將這個名字寫入/etc/hosts中(見下面)。
有些人建議使用ainname命令來設定核心意義上的域名為FQDN的餘下部分。這樣的話,你可以組合hostname和domainname的輸出來再次得到FQDN。然而,這最多對了一半。Domainname一般用來設定主機的NIS域,這可能與你的主機所屬的域完全不同。NIS將在第十章中討論。

5.5 分配IP地址
如果在你的主機上為單機操作配置連網(例如,為了能夠執行INN網路新聞軟體),你可以地跳過本節,因為你只需要為回送(lback)介面分配一個介面,它總是127.0.0.1。
而對於象乙太網那樣的真實網路來說,事情就有一些複雜。如果你想將你的主機連線到一個現成的網路上,你就必須要求該網的管理員給你一個這個網路的IP地址。當整個網路都是由你自己來設定時,你就必須按如下描述自己來分配IP地址。
在一個本地網路內的主機通常應該有相同的邏輯IP網路地址。因此,你必須分配一個IP網路地址。如果你有幾個物理網路,你或者必須給它們分配不同的網路號(網路地址),或者使用子網技術將你的IP地址範圍分割成幾個子網。
如果你的網路沒有連線到Internet上,你可以自由地選擇任何(合法的)網路地址。你只須確信選擇了A類、B類或C類中的一種,否則的話事情可能會工作得不正常。然而,如果你打算近期連線Internet,你現在就得獲取一個正式的(官方的)IP地址。進行的最佳方法是是請求你的網路服務提供商幫助你。如果你想獲取一個網路地址只是因為萬一某天你可能連上Internet,從hostmaster@internic.net要一張網路地址申請表。
為了操作幾個乙太網(或其它網路,一旦有了程式),你必須將你的網路分隔成子網。注意,只有當你有多個廣播網路(broadcast network)時,你才需要應用子網技術;點對點的連線不算在內。例如,如果你有一個乙太網,並且有一個或多個SLIP連結到外部世界,你無需分割你的網路。其理由將在第7章中給出。
作為一個例子,釀酒廠的網路管理人員向NIC申請了一個B類網路號,得到191.72.0.0。為適應兩個乙太網,她決定使用主機部分的8個位元作為額外的子網位元位。主機部分剩餘的8個位元,允許每個子網有254臺主機。然後,她將子網號1給了釀酒廠、子網號2給了葡萄酒廠。這樣他們的網路地址分別為191.72.1.0和191.72.2.0。子網掩碼是255.255.255.0。
在兩個網路之間的閘道器vlager,在它們兩邊都分配給它主機號1,這分別給了它IP地址191.72.1.1和191.72.2.1。圖5.1 示出了這兩個子網和閘道器。
注意,在這個例子中,我使用了一個B類網路來使得事情簡單化;而一個C類網路將更現實些。有了新的網路程式碼,子網的分割並不限於位元組邊界,所以,即使是一個C類網路也可以分割成幾個子網。例如,你可以使用2位元的主機部分作為網路掩碼,就可得到四個可能的子網,每個子網可以有64臺主機。[1]

5.6 編寫hosts和networks檔案
在把你的網路分成子網以後,你應該使用/etc/hosts檔案為某些簡單的主機名解析作些準備。如果你不打算使用DNS或NIS來作地址解析,你就必須將所有的主機名寫入hosts檔案中。


圖5.1 虛擬釀酒廠和虛擬葡萄酒廠—兩個子網。

即使你在正常操作期間想執行DNS或NIS,你仍然會將一些主機名寫入/etc/hosts檔案中。一個原因是,即使沒有網路介面正在執行,你還是會想有一些名字解析功能,例如,在系統引導期間。這不但是為了方便,而且也允許你在rc.inet指令碼中使用符號主機名。這樣,當更改IP地址時,你只需將更新過的hosts檔案複製到所有機器上並且重新啟動機器即可。而無需去分別編輯大量的rc檔案。通常,你應該將所有本地主機名和地址放入hosts,加入用到的任何閘道器和NIS伺服器的名稱和地址。[2]
同樣,在最初的測試階段,你應該確信你的解析器只使用到hosts檔案中的資訊。你的DNS或NIS軟體可能附帶有樣本檔案,當使用這些檔案時就可能產生奇怪的結果。為了讓所有的應用程式在查詢一個主機的IP地址時只使用/etc/hosts檔案,你必須編輯/etc/host.conf檔案。用井字元註釋掉以關鍵字order開始的所有行,並插入一行

order hosts

解析器庫的配置將在第六章中詳細討論。
Hosts檔案中每一行包含一項,每項由一個IP地址、一個主機名、和任選的該主機的一個別名列表組成。各個域用空格或製表符分開,並且地址域必須從第一列開始。任何以井字元開始的行都看作是註釋行,被忽略掉。
主機名可以是全資的、或者是與本地域相關的。對與vale來說,你通常可以往hosts檔案中輸入全資名vale.vbrew.com,以及vale名本身,這樣該主機就有正式名和短小的本地名兩個名字了。
這是虛擬釀酒廠的hosts檔案樣式的一個例子。其中包括了兩個特別的名字,vlager-if1和vlager-if2,它給出了vlager所用的兩個介面的地址。


#
# Hosts file for Virtual Brewery/Virtual Winery
#
# local fully qualified domain name
#
127.0.0.1 localhost
#
191.72.1.1 vlager vlager.vbrew.
191.72.1.1 vlager-if1
191.72.1.2 vstout vstout.vbrew.com
191.72.1.3 vale vale.vbrew.com
#
191.72.2.1 vlager-if2
191.72.2.2 vbeaujolais vbeaujolais.vbrew.com
191.72.2.3 vbardolino vbardolino.vbrew.com
191.72.2.4 vchianti vchianti.vbrew.com

正如對待主機的IP地址一樣,有時對於網路號你也可能想使用一個符號名稱。因此,hosts檔案有一個相伴的稱為/etc/networks的檔案,用於對映網路名到網路號以及反之。在虛擬釀酒廠,我們可以安裝一個象下面的networks檔案:[3]

# /etc/networks for the Virtual Brewery
brew-net 191.72.1.0
wine-net 191.72.2.0

5.7 IP的介面配置
在如前章裡解釋那樣設定好你的以後,你必須讓核心的網路軟體知道這些裝置。有幾個命令是用於配置網路介面和初始化路由選擇表的。這些任務通常是在系統每次啟動引導時由rc.inet1指令碼來做的。做這些任務的基本工具稱為ifconfig(這裡“if”表示介面的意思interface),和route。
Ifconfig用於使得一個介面能夠被核心的網路層訪問。這包括IP地址的分配和其它引數的指派、啟用介面—也以“起用”(“taking up”)而知名。這裡啟用表示核心將透過介面傳送和接收IP資料包。呼叫它的最簡單的辦法是

ifconfig interface ip-address

它分配IP地址ip-address給介面interface並啟用它。所有其它的引數都設定成預設值。例如,預設的子網掩碼是從IP地址的網路型別中獲得的,如255.255.0.0是B類地址的掩碼。Ifconfig將在本章末給予詳細的討論。
Route允許你對核心的路由表進行增加或刪除路由的操作。它可以象這樣呼叫

route [add|del] target

這裡add和dell是決定增加還是刪除到目的(target)網路或主機的路由。

5.7.1 回送(loopback)介面
最早被啟用的介面是回送介面(loopback interface):

# ifconfig lo 127.0.0.1

有時,你也會看到使用偽主機名localhost替代IP地址的用法。Ifconfig將在hosts檔案中查詢這個名字,在hosts檔案中應該有一項申明localhost是127.0.0.1的主機名:

# Sample /etc/hosts entry for localhost
localhost 127.0.0.1

要檢視一個介面的配置,你要用介面名作為引數呼叫ifconfig:

$ ifconfig lo
lo Link encap Local Loopback
inet addr 127.0.0.1 Bcast [NONE SET] Mask 255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU 2000 Metric 1
RX packets 0 errors 0 dropped 0 overrun 0
TX packets 0 errors 0 dropped 0 overrun 0

如你所見,lookback介面被賦予255.0.0.0掩碼,這是因為127.0.0.1是一個A類地址。該地址沒有一個廣播地址集,但這在loopback中並沒有什麼用。然而,如果你在主機上執行了rwhod後臺服務程式的話,你就必須設定loopback裝置的廣播地址,以便rwho能夠正確地執行。如何設定廣播地址會在下面的“關於ifconfig”一節中描述。
現在,你幾乎可以啟動執行你的米你-“網路”了。最後所缺的是路由選擇表裡的一項,該項將告訴IP,它可以使用這個介面作為到達目的127.0.0.1的路由。這是透過鍵入下面的命令來完成的

# route add 127.0.0.1

再次,你可以使用localhost來代替這個IP地址。
接下來,你要檢查是否每樣事情正常工作著,例如透過使用來檢查。ping是聲納裝置的網路等價物[4] 用於驗證一個給定的地址是否真正能達到,並且測量傳送一個資料包到給定地址然後返回到主機的延遲時間。所需的時間常稱為來回程時間。

# ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp seq=0 ttl=32 time=1 ms
64 bytes from 127.0.0.1: icmp seq=1 ttl=32 time=0 ms
64 bytes from 127.0.0.1: icmp seq=2 ttl=32 time=0 ms
^C
--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0/0/1 ms

當如上呼叫ping時,它將繼續不停地傳送資訊包,除非被中斷掉。上面的^C標記出我們按Ctrl-C的地方。
上面這個例子顯示出127.0.0.1的資訊包正確地傳送了出去並且一個應答幾乎是瞬時就返回到ping的。這表示你已經成功地設定好第一個網路介面。
如果你從ping得到的輸出資訊與不象上面所示的,你就碰到問題了。檢視出錯資訊看看是否它指出了某些檔案沒有正確地被安裝。檢視你所使用的ifconfig和route執行檔案是否與你執行的核心版本相容,並且,最重要的是檢查所編譯的核心是網路使能的(啟用的)(你可以從是否存在/proc/net目錄看出)。如果你得到出錯資訊說“網路不可達,”那麼你很可能用錯了route命令。請確信你使用了與給ifconfig相同的地址。
上面所描述的步驟對於在單機上使用網路應用程式來說已足夠了。在將上面的幾行新增到rc.inet1並確信這兩個rc.inet指令碼都已在/etc/rc中執行以後,你可以重新引導你的機器並且試驗各種應用程式。例如,“ localhost”將會建立一個到你主機的telnet連線,給你一個登入提示畫面。
然而,loopback介面是有用的,不僅是在網路書本中作為一個例子,或作為開發期間的一個測試臺,而且實際上在正常操作時也被用於某些應用程式。[5] 因此,不管你的機器是否連線到一個網路上,你總是必須要配置它的。

5.7.2 乙太網介面
配置一個乙太網介面與配置loopback介面非常相象。它只是在你使用子網技術時需要稍多的引數。
在虛擬釀酒廠,我們已經將IP網路分割成了C類子網,這個IP網路原是一個B類網路。為了使得介面能夠識別這個變化,ifconfig的引數應該看上去象這樣:

# ifconfig eth0 vstout netmask 255.255.255.0

它將vstout(191.72.1.2)IP地址分配給了eth0介面。如果我們已經省略了網路掩碼,那麼ifconfig將推論出該IP地址類的掩碼來,它將會已有255.255.0.0這樣的網路掩碼。現在,一個檢視顯示出:

# ifconfig eth0
eth0 Link encap 10Mps Ethernet HWaddr 00:00:C0:90:B3:42
inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0
UP BROADCAST RUNNING MTU 1500 Metric 1
RX packets 0 errors 0 dropped 0 overrun 0
TX packets 0 errors 0 dropped 0 overrun 0

你可以看出,ifconfig自動地將廣播地址(上面的Bcast域)設定成常用的值,即將主機的網路號的主機部分的所有位元位置為1。同樣,訊息傳輸單元(message traner unit)(核心為該介面生成的最大乙太網幀的大小)已被設定成最大值1500位元組。所有這些值都可以用特定的選項覆蓋掉,這將在下面討論之。
同loopback的情況非常相似,你現在必須安裝一個路由選擇項,它會通知核心有關透過eth0能夠到達的網路。對於虛擬釀酒廠來說,你應該按如下呼叫route

# route add 191.72.1.0

起先,這看上去有點象變魔術,因為並不清楚route是如何探測到要透過哪個介面進行路由。然而,竅門是很簡單的:核心檢測已配置的所有介面並且將目的地址(此時為192.72.1.0)與介面地址的網路部分相比較(也即將介面地址和網路掩碼進行逐位與)。只有eth0介面與之匹配。
現在,-net選項是幹什麼用的呢?使用這個選項是因為route既可以處理路由到網路也可以處理路由到單機的情況(正如上面你已看到有關localhost的情況)。當給出的地址是用點分四組表示法表示時,route透過檢視主機部分位元位來試圖猜測它是個網路號還是個主機地址。如果地址的主機部分是零的話,route假定它表示一個網路,否則的話route把它當作一個主機地址。因此,route會認為192.72.1.0是一個主機地址而不是一個網路號,因為它並不知道我們使用了子網技術。因此,我們必須給出-net標誌,明確地告之route它代表一個網路。
當然,上面的route命令鍵入時很冗長,並且很容易輸錯。一個更簡便的方法是使用我們已經在/dev/networks中定義的網路名字。這使得這個命令非常易讀;而且也可以將-net標誌省略掉了,因為route現在知道191.72.1.0表示一個網路。

# route add brew-net

現在既然我們已經完成了基本的配置步驟,我們要確信該乙太網介面確實能正常執行。從你的乙太網路上任選一臺主機,例如vlager,並鍵入

# ping vlager
PING vlager: 64 byte packets
64 bytes from 191.72.1.1: icmp seq=0. time=11. ms
64 bytes from 191.72.1.1: icmp seq=1. time=7. ms
64 bytes from 191.72.1.1: icmp seq=2. time=12. ms
64 bytes from 191.72.1.1: icmp seq=3. time=3. ms
^C

----vstout.vbrew.com PING Statistics----
4 packets transmitted, 4 packets received, 0% packet loss
round-trip (ms) min/avg/max = 3/8/12

如果你看不到任何象這樣的輸出,那麼,很明顯有地方出了問題。如果你碰到不正常的包丟失速率,這意味著是個硬體問題,如壞的或丟失了終端頭等等。如果你一點也沒收到任何資訊包,你應該用netstat來檢查介面配置。Ifconfig的資訊包統計資訊會告訴你介面是否傳送了任何資訊包。如果你也可以訪問那臺的主機,你也應該過去檢查它的介面的統計資訊。用這種方法,你就可以正確地確定這些資訊包是在哪丟失的。另外,你應該用route顯示選路(路由選擇)資訊,來看看兩臺主機的路由專案是否正確。當不使用任何引數呼叫route時,會列印出整個核心選路表(-n選項只是使得它用點分四組表示法列印出地址來,而不是用主機名):

# route -n
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use
127.0.0.1 * 255.255.255.255 UH 1 0
191.72.1.0 * 255.255.255.0 U 1 0

  這些域的詳細含義將在下面的“使用netstat檢查”一節中給出。Flag列包含每個介面標誌的一個列表。U對於活動的介面總是置位的,H是指目的地址表示一臺主機。如果H標誌是為一個作為網路路由器的路由器置位的,那麼你就必須為route命令指定-net選項。為了測試你加入的一個路由器是否被使用,檢查倒數第二列中的Use域在ping的對話期間會增加。

5.7.3 透過閘道器進行路由
在前一節中,我只描述了在單個乙太網上設定一臺主機的情況。然而經常性地,一個人會遇到網路透過閘道器連線到另一個網路的情況。這些閘道器可能只是簡單地連線兩個或多個乙太網路,但也可能提供到外部世界的Internet連線。為了使用一個閘道器的服務,你必須在網路層提供額外的選路資訊。
例如,虛擬釀酒廠和虛擬葡萄酒廠的乙太網路是透過這樣的一個閘道器,也即主機vlager,連在一起的。假設vlager早已被配置好,我們只需在vstout的選路表中新增另一個項,這個項告訴核心,它可以透過vlager到達葡萄酒廠網路上的所有主機。適當的route“咒語”顯示如下;關鍵字gw告訴route下一個參數列示一個閘道器。

# route add wine-net gw vlager

當然,你所希望對話的葡萄酒廠網路上的任何主機必須有一個釀酒廠網路的相應選路項,否則的話,你將只能將資料從vstout傳送到vbardolino,但後者的任何響應都將丟失(go into the great bit bucket)。
這個例子只描述了一個閘道器,它在兩個隔離的乙太網之間交換資訊包。現在假設,vlager也有一個到Internet的連線(例如,透過一個另外的SLIP連線)。那麼我們希望除了到達釀酒廠的資料包,到達任何其他網路的資料包都將交由vlager處理。這可以透過使vlager成為vstout預設的路由器來做到。

# route add default gw vlager

網路名default是0.0.0.0的縮寫,它表示預設路由器。你無需把這個名字新增到/etc/networks中,因為它內建於route中。
當你ping一臺隔著一個或幾個閘道器的主機時看到很高的包丟失率,這可能意味著網路很擁擠。包丟失並不主要是技術上不足的原因,如由於轉發主機暫時的超負荷執行,使得它們延遲甚至丟失了輸入的資料包。

5.7.4 配置閘道器
配置一臺機器使其在兩個乙太網之間交換資訊包是非常直接明瞭的。假設我們回到vlager上,它配備了兩塊以太,每塊網路卡連線一個網路。全部你所要做的是分別配置這兩個介面,給它們各自的IP地址,並且就這些了!
將兩個介面的資訊按如下方式新增到hosts檔案中是非常有用的,我們也有唾手可得的名字:

191.72.1.1 vlager vlager.vbrew.com
191.72.1.1 vlager-if1
191.72.2.1 vlager-if2

設定這兩個介面的命令序列也就成為:

# ifconfig eth0 vlager-if1
# ifconfig eth1 vlager-if2
# route add brew-net
# route add wine-net

5.7.5 PLIP介面
當使用PLIP連結來連線兩臺機器時,事情就與使用乙太網的稍微有些不同。前者是所謂的點對點的連結,因為相對於通訊網路來說,它們只包括兩臺主機(“點”)。
作為一個例子,我們考慮虛擬釀酒廠的某個員工的膝上型(膝上型電腦),它透過PLIP與vlager連線。膝上型電腦本身叫做vlite,並且只有一個並行埠。在引導期間,這個埠將被註冊為plip1。為了啟用這個連線,你必須使用下列命令配置這個plip1介面:[6]

# ifconfig plip1 vlite pointopoint vlager
# route add default gw vlager

第一個命令配置這個介面,告訴核心這是個點對點的連結,遠端一邊的地址是vlager。第二個命令安裝預設路由器,vlager用作閘道器。在vlager上,需用一個類似的ifconfig命令來啟用連線(路由器啟用是不需的):

# ifconfig plip1 vlager pointopoint vlite
這裡有趣的一點是vlager上的plip1介面不需要有一個獨立的IP地址,而同樣是地址192.72.1.1。[7]
現在,我們已經配置好了從膝上型電腦到釀酒廠網路的路由;還缺的是釀酒廠的任何主機到vlite的路由的方法。一個特別笨的方法是在指定vlager為閘道器的各個主機的選路表中增加一特別的到vlite的路由項。

# route add vlite gw vlager

在面對臨時路由的一個更好的選擇是使用動態路由。這樣做的一個方法是使用gated,一個路由後臺服務程式,它需要你安裝在網路上的每臺主機上來動態地釋出選路資訊。然而,最簡單的方法是使用()ARP(地址解析),使用代理ARP,vlager將透過發出自己的乙太網地址來響應任何對vlite的ARP請求。這個的作用是所有到vlite的資訊包都送至vlager,然後vlager將資訊包轉發到膝上型電腦。我們將在“檢查ARP表”一節中再討論代理ARP。
以後發行的Net-3將包含一個稱為plipconfig的工具,它允許你設定所使用的印表機埠的IRQ。今後,這將由更通用的ifconfig命令來代替。

5.7.6 SLIP和PPP介面
儘管SLIP和PPP連結只是簡單的象PLIP一樣的點對點連線,但對它們有很多要討論的。通常,建立一個SLIP連線包括透過modem撥號到遠端站點,並設定線路成SLIP。PPP使用同樣的方式。設定SLIP或PPP所需的工具將在第七章和第八章中描述。

5.7.7 啞(Dummy)介面
啞介面實在是有一些特殊的,但卻是非常有用的。它的主要好處是,對於獨立的主機以及那些僅有的IP網路連線是透過撥號連線才有的機器。實際上,後者在大多數時間也是一臺獨立的主機。
令獨立主機進退維谷的是它們只有一個是啟用的,即回送(loopback)介面,該介面通常分配了地址127.0.0.1。然而在某些情況下,你需要將資料傳送到“正式的”的本地主機IP地址上去。例如,考慮膝上型電腦vlite,假設此時它沒有連線任何的網路。Vlite上的一個應用程式現在可能需要傳送一些資料到同一個主機的另一個應用程式中。在/etc/hosts中檢視vlite,找到它的IP地址是191.72.1.65,所以這個應用程式試圖往這個地址傳送資料。由於回送介面是該機器上目前唯一活動的介面,所以核心就根本不知道該地址實際上就是自己的!作為結果,核心就會丟棄這個資料包,並且給應用程式返回一個出錯資訊。
這裡就是啞裝置需要起作用的地方。它透過簡單地作為回送介面的一個密友來解決這個難題。對於vlite的情況,你只須簡單地給它地址191.72.1.65並且加入一個指向它的主機路由。此時,到191.72.1.65的每個資料包都將在本地投遞了。正確的呼叫是:

# ifconfig dummy vlite
# route add vlite

5.8 關於ifconfig
ifconfig還有比我們在上面所討論的更多的引數。它通常的呼叫是:

ifconfig interface [[-net|-host] address [parameters]]

interface是介面名字,address是分配給該介面的IP地址。它可以是一個點分四組表示的IP地址;或者是一個ifconfig可以在/etc/hosts和/etc/networks中查到的名字。-net和-host選項分別迫使ifconfig將地址作為網路號或主機地址來對待。
如果ifconfig只帶一個介面名來呼叫,它就顯示出該介面的配置。當不待任何引數來呼叫,它就顯示你目前已設定的所有介面的配置;-a選項迫使ifconfig同時也顯示不活動的介面。對乙太網介面eth0的一個呼叫樣本可能看上去象這樣:

# ifconfig eth0
eth0 Link encap 10Mbps Ethernet HWaddr 00:00:C0:90:B3:42
inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0
UP BROADCAST RUNNING MTU 1500 Metric 0
RX packets 3136 errors 217 dropped 7 overrun 26
TX packets 1752 errors 25 dropped 0 overrun 0

MTU和度量域顯示出該介面的當前MTU和度量值。傳統上,度量值被用於某些計算路由的代價。Linux還沒有使用這個值,但為了相容性而定義了它。
RX和TX行顯示出有多少個包已被無錯地接收和傳送了、發生了多少個錯誤、有多少個包丟失了(通常是由於記憶體不足)、有多少個包由於超限而丟失了。接收器超限發生通常是由於到來的包的速率快於核心可以對最後一箇中斷的響應。Ifconfig所列印出的標誌值或多或少與它的命令列選項的名字相對應;它們將在下面給出解釋。
下面是ifconfig所能識別的引數的一個列表,相應的標誌名在括號中給出。簡單地開啟一個特性的選項同樣也能在該選項的前面加上一短劃(-)再來關閉這個特性。

Up
這標記一個介面為“up”,也即可以訪問IP層。在命令列上給出地址時,就隱含了該選項。它也可以用於重新使能被down選項臨時關閉的介面。(這個選項與標誌UP RUNNING相對應。)
down
這標記一個介面為“down”,也即不可以訪問IP層。這有效地禁止了透過該介面的任何通訊。注意,這並不刪除自動使用該介面的所有選路項。如果你要永遠地停掉該介面,你應該刪除這些路由項並且提供可能的其它選路資訊。
Netmask mask
這指派了用於該介面的一個子網掩碼。它可以以一個前面加有0x的十六進位制的32位元數給出,或以點分四組十進位制數給出。
Pointopoint
這個選項只用於包含兩臺主機的點對點IP連結。例如,這個選項需要被用於SLIP或PLIP介面的配置。(如果設定了一個點對點的地址,ifconfig會顯示POINTOPOINT標誌。)
broadcast address
廣播地址通常是透過將網路號的主機部分所有位元位置位產生的。有些IP實現使用一個不同的方案;這個選項是用於適應那些特殊的環境。(如果設定了一個廣播地址,ifconfig就顯示一個BROADCAST標誌。)
metric number
這個選項可用於為一個介面建立的選路表項分配一個度量值。這個度量用於路由資訊協議(Routing Information Protocol RIP)為網路建立選路表。[8] ifconfig所用的預設的度量值是零。如果你沒有執行一個RIP後臺程式,你一點也不需要這個選項;如果你用了,你也很少需要改變度量的值。
Mtu bytes
這設定最大傳輸單元(Maximum Transmission Unit),這是介面能夠在一次傳輸中處理的最大8位元組的數目。對於乙太網,MTU的預設值是1500;對於SLIP介面,它是296。
arp
這個選項特別用於象乙太網或電包的廣播型網路的。它啟動ARP的使用,地址解析協議,來偵測連線到網路上的主機的實體地址。對於廣播型網路,它總是預設啟用的。
-arp
在這個介面上禁止ARP的使用。
Promisc
將介面置為混合模式。在一個廣播型網路上,這使得該介面接收所有的包,而不管它們是否是到達其它主機的資訊包。這使得可以使用包過濾器等來分析網路交通流量,也稱為乙太網偵聽。通常,這是查出用其它方法難以克服的網路問題的一個很好的技術。而另一方面,這也使得者從你的網路流量中得到密碼並且做其它骯髒的事。針對這類攻擊的一個保護措施是不要讓任何人可以隨便將他們的計算機插入你的乙太網中。另一個選擇是使用安全協議(secure authentication protocols),如Kerberos、或SRA登入。[9] (這個選項與標誌PROMISC相對應。)
-promisc
禁止混合模式。
Allmulti
組播[多址通訊,多點傳送]地址是對無需在一個子網上的的一組主機的廣播。目前,核心不支援組播地址。(這個選項對應於標誌ALLMULTI。)
-allmulti
禁止組播地址。

5.9 使用netstat檢查
下面,我們轉過來討論一個對檢查網路配置和行為很有用的工具。它稱為netstat並且實際上是幾個工具的彙總。我們將在下面幾節中討論它的每一個功能。
5.9.1 顯示路由選擇表
當使用-r標誌呼叫netstat時,它以我們在上面已經用route做過的方式顯示核心選路表。在vstout,它產生:

# netstat -nr
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use
127.0.0.1 * 255.255.255.255 UH 1 0
191.72.1.0 * 255.255.255.0 U 1 0
191.72.2.0 191.72.1.1 255.255.255.0 UGN 1 0

-n選項使得netstat以點分四組IP數的方式列印出地址,而不是用主機名或網路名。當你想避免在網路上查詢地址時這是特別有用的(例如,對於一個DNS或NIS伺服器)。
Netstat輸出的第二列示出了選路選項指向的閘道器。如果沒用到閘道器,就只列印一個星號。列三顯示出路由的“一般性”。當給定一個IP地址而要找出適當的路由,核心查詢選路表的所有項,在與路由的目的地址比較之前將該地址與genmask進行位與(bitwise AND)。
第四列顯示了描述路由的各種標誌:

G 路由使用了閘道器。
U 所用的介面已啟動。
II 透過路由只能到達單個主機,例如,loopback項127.0.0.1就是這種情況。
D 如果該表項是由一個ICMP重定向訊息產生的,就設定該標誌(見2.5節)。
M 如果該表項被一個ICMP重定向訊息修改過,就設定該標誌。

Netstat輸出的Ref列顯示了對這個路由的參考數,也即,有多少個其它的路由(例如,透過閘道器)依賴於這個路由的存在。最後兩列顯示出了選路表項已被使用的次數,以及資料包透過其分發的介面。

5.9.2 顯示介面統計資訊
當帶-I標誌呼叫時,netstat將顯示當前配置的網路介面的統計資訊。如果再另加上一個-a標誌,它將列印出核心中存在的所有介面,不僅是那些目前已經配置了的。在vstout上,netstat的輸出看上去象這樣:

$ netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags
lo 0 0 3185 0 0 0 3185 0 0 0 BLRU
eth0 1500 0 972633 17 20 120 628711 217 0 0 BRU

MTU和Met域那個介面的當前MTU和度量值。RX和TX列顯示有多少資訊包是無錯接收和傳送的(RX-OK/TX-OK)、出錯的(RX-ERR/TX-ERR)、丟失了多少包(RX-DRP/TX-DRP)、以及有多少包是由於超限而丟失的(RX-OVR/TX-OVR)。
最後一列顯示出該介面被設定的標誌。這些是當你用ifconfig顯示介面配置的長標誌名字的一字元版本。
B
一個廣播地址已被設定。
L
這個介面是一個回送(loopback)介面。
M
所有的包都將被接收(混合模式)。
N
避免包尾。
O
對於該介面,ARP被禁止。
P
這是一個點對點連線。
R
介面正在執行。
U
介面被起用。

5.9.3 顯示連線狀態
netstat支援一組選項來顯示主動的或被動的套接字。選項-t、-u、-w和-x顯示主動的TCP、UDP、RAW或套接字連線。如果你另外增加-a標誌,那麼,等待連線的(例如,正在傾聽的)套接字也被顯示出來了。這將給出你的系統上目前執行著的所有伺服器的一張列表。
在vlager上呼叫netstat –ta產生:

$ netstat -ta
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (State)
tcp 0 0 *:domain *:* LISTEN
tcp 0 0 *:time *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp 0 0 vlager:smtp vstout:1040 ESTABLISHED
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 localhost:1046 vbardolino:telnet ESTABLISHED
tcp 0 0 *:chargen *:* LISTEN
tcp 0 0 *:daytime *:* LISTEN
tcp 0 0 *:discard *:* LISTEN
tcp 0 0 *:echo *:* LISTEN
tcp 0 0 *: *:* LISTEN
tcp 0 0 *:login *:* LISTEN

這顯示出大多數的伺服器只是簡單地在等待輸入連線。然而,第四行顯示從vstout來的一個SMTP連線,第六行告知你有一個輸出的到vbardolino的telnet連線。[10]
使用-a標誌將顯示出各類的所有套接字。

5.10 檢查ARP表
在某些情況下,觀察甚至改動核心的ARP表的內容是很有用的,例如,當你懷疑重複使用的Internet地址是某些間歇性的網路問題的原因時。arp工具就是為此類事情而編制的。它的命令列選項是

arp [-v] [-t hwtype] -a [hostname]
arp [-v] [-t hwtype] -s hostname hwaddr
arp [-v] -d hostname [hostname...]

所有的hostname引數可以是符號主機名或是以點分四組表示的IP地址。
第一個呼叫顯示指定IP地址或主機的ARP項,或者如果沒有給出hostname時顯示所有已知的主機的ARP項。例如,在vlager上執行arp會產生

# arp -a
IP address HW type HW address
191.72.1.3 10Mbps Ethernet 00:00:C0:5A:42:C1
191.72.1.2 10Mbps Ethernet 00:00:C0:90:B3:42
191.72.2.4 10Mbps Ethernet 00:00:C0:04:69:AA

它顯示出了vlager、vstout和vale的乙太網地址。
使用-t選項你可以限制顯示資訊為指定的硬體型別的。這可以是ether、ax25、或者是pronet,分別表示10Mbps的乙太網、AMPR-AX.25、和IEEE-802.5令牌環網。
-s選項用於永久性地將hostname的乙太網地址加入到ARP表中。Hwaddr引數指定硬體地址,它預設地指的是乙太網地址、由冒號分隔的六個十六進位制位元組指定。使用-t選項,你也可以為其它型別硬體設定硬體地址。
有一個問題,它可能需要你手工地將一個IP地址加入到ARP表中,是當由於某些原因對遠端主機的ARP請求失敗了的時候,例如當它的ARP驅動程式有錯或網路上有另外一臺主機錯誤地使用了那個主機的IP地址。ARP表中硬配置的IP地址也是一個(非常強烈的)方法來保護你自己免受你的乙太網上其它主機冒充別人的主機。
使用-d開關呼叫arp將刪除與給定主機相關的所有ARP項。這可以用於迫使該介面重新嘗試獲處理中的IP地址的乙太網地址。這在當錯誤配置的系統已經廣播了錯誤的ARP資訊時很有用(當然,你要首先重新配置這個出錯的主機)。
選項-s也可以用於實現代理(proxy)ARP。這是一個特殊的技術,這裡一個主機,比如說gate,透過假裝這兩個地址引用同一臺主機gate,而為另一臺名為fnord的主機擔當一個閘道器。它是透過公佈一個指向自己(gate)乙太網介面的fnord的ARP項。現在,當一臺主機發出一個對fnord的ARP請求時,gate將返回一個包含自己乙太網地址的響應。此時,發出請求的主機將會送出所有的資料包到gate,gate將有責任地轉發這些資料包到fnord。
這些帶拐彎的處理有時是需要的,例如,當你想從一個不能很好地理解路由的TCP實現的DOS機器上訪問fnord時。當你使用代理ARP時,對於DOS機器看來,fnord好象救災本地子網上,所以它就不需要知道如何路由透過一個閘道器了。
代理ARP的另一個非常有用的應用是,當你的主機之一對於某些主機只是臨時充當一個閘道器時,例如,透過一個撥號連結。在前一個例子當中,我們已經遇到了偶爾透過PLIP?/td>
來源:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989889/,如需轉載,請註明出處,否則將追究法律責任。

相關文章