歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

用Linux系統腳本簡化無線網絡的管理

為您的辦公室或鄰居設置一個無線的 Internet 服務提供者(WISP)並不需要繁重的勞動或昂貴的投資。如果您使用一些很容易購買到的設備和 Linux™ 來構建網絡,那麼可以利用 shell 腳本的強大功能來簡化網絡的管理。本文將提供一些您所需要的技巧和腳本。

使用現有的無線路由器創建一個小型的無線網絡非常簡單。但是為辦公室、公寓或鄰居提供符合業界標准的無線鏈接就是另外一回事了。在構建好無線網絡之後,就可以運行無線 Internet 服務提供者(WISP)服務。要運行 WISP,則需要回答以下問題:

● 所提供的到 Internet 的連接品質如何?

● 哪些客戶機可以直接連接到網絡上,這些連接的品質又如何?

● 有足夠的帶寬滿足峰值的需求嗎?

● 最近有哪些客戶機連接到網絡上,它們的活動頻率如何?

● 哪些客戶機具有可靠的連接,哪些客戶機的連接不可靠?

● 客戶機有許多傳輸錯誤並需要重試嗎?

● 所安裝的軟件包有可升級的版本嗎?

● 大文件會占用很多空間嗎?

● 如何簡化客戶機的管理?

在本文中,您將學習如何使用 Linux 腳本來回答這些問題。在開始之前,首先需要設置服務器。

無線服務器硬件

我之所以成為一名無線 Internet 服務提供者,是因為我的鄰居沒有 DSL 或其他 Internet 接入服務。另外一個 WISP 從附近的一個山頂上提供了一條(昂貴的)連接,因此我決定購買這個服務,與鄰居們共享帶寬,並共同承擔費用。訪問點的無線卡會生成一個非常微弱的信號,因此,為了將信號丟失的情況降至最低,我希望能夠將天線做得盡可能的短。還希望能夠架設一條戶外天線,這樣就可以讓更多的鄰居可以訪問這個無線鏈接。這兩種設備讓我可以將服務器設置在戶外的天線上(參考資料 的鏈接中給出了一張圖片,還提供了有關此文中討論的產品和包的信息)。這個示范性的服務器是一個現有的無線訪問點(WAP),它安裝在一個防水的 Pelican 箱子中。它並不是非常可靠,因此我常常需要爬上屋頂來解決問題。我需要使用一架梯子來幫助我爬上爬下,以後還需要將這個訪問點升級成一個更可靠的系統。下一代的硬件將會:

● 非常可靠。

● 支持 10 台客戶機,另外提供一些系統管理工具。

● 使用一個標准的無線網卡。

● 支持通過以太網加電啟動。

● 是 Linux 友好的。

我購買了一塊很便宜的系統板(Soekris Engineering 的 net4521),它可以完全滿足這些需求,並且可以使用一塊 Compact Flash Card,而不必再使用硬盤。這塊系統板不用制冷風扇就可以在溫度變化很大的環境中使用。

無線卡芯片確定了該系統板是 Linux 友好的, Intersil/Conexant Prism2/3 芯片也對 Linux 提供了很好的支持。

Linux 軟件

Pebble Linux 是一個專門為嵌入式無線應用程序設計的發行版。為其取名 Pebble 就是因為它非常小,並且很簡單。這個系統中包含了一些很好的特性,例如:

● 為實現無線使用而定制的內核;這樣就不需要再重新編譯內核。

● 大小;整個系統很小,可以放到一塊很小的 Compact Flash Card 中,所以不再需要硬盤驅動器。

● 以只讀方式裝載文件系統,因此,即使斷電也不會造成文件系統崩潰。

● 因為基於 Debian Linux 發行版,所以可以使用 Debian 的包。

● 具有很好的支持。

Pebble Linux 包括很多可用的無線包,利用 Debian 的 apt-get 很容易添加其他包。您可能希望通過在另外一台服務器上放置一些包(例如 ntop)來共享工作負載。這些包可以在一塊系統板上與 10 台客戶機很好地運行,而不會過度浪費處理器或內存。以下是我推薦的幾個開源包:

● Wonder Shaper,用來確保客戶機平等地共享帶寬。

● Wireless Tools(WT),用來與無線驅動器進行通信。

● Host AP,用於 Prism2/3 芯片的無線訪問點軟件。

● pcmcia-cs,用來管理無線網卡。

● logrotate,用來壓縮或刪除日志。

● Net-SNMP,用來收集路由器輸出。

● ntop,用來以圖形形式顯示利用情況的統計信息。

● iptables,用作防火牆。

在參考資料中,可以找到這些工具的鏈接。

所需要的 Linux 無線管理腳本

這些包提供了一些基本的工具來啟動無線網絡並運行 Linux。從現在開始,要使這些工具一直順利運行可能是一件頭疼的事情;也可能非常簡單,但需要使用一些工具來幫您實現以下功能:

● 管理服務器

● 管理客戶機

● 管理帶寬

為了滿足這些需求,我編寫了很多腳本;所有這些腳本都可以從一個命令行中直接使用。Linux 具有一個很好的安全 shell(SSH)服務器的實現,因此我可以從任何具有 Internet 連接的地方來對服務器進行管理。

管理服務器

Linux 發行版本通常包括一些簡單的管理工具,不過這些工具的功能卻很強大。沒有以下這些工具,我幾乎無法生活:

● df 給出關於每個文件系統的空間利用率的信息。當您的文件系統中只有有限的空閒空間時,該信息尤其有用。

● top 給出服務器某個瞬間的快照,其中包含了有關啟動時間、CPU 使用情況、內存使用情況和進程的信息。

● pstree 提供了服務器進程的快照。這些信息很容易理解,因為進程都是以分層形式顯示的。

我的 WAP 在內存中有一個只讀的文件系統,用於為文件和日志提供服務。這樣就可以將一個Compact Flash Card 的文件系統一直作為只讀模式使用。我編寫了一些腳本來管理這些有限的空間。

bigfiles:bigfiles 腳本會判斷應該刪除哪些文件來防止出現空間用盡的情況。它對三種級別的空間利用情況進行了總結:

1、文件系統: 文件系統一共有多大?還有多少剩余空間?

2、目錄: 文件系統中每個目錄使用了多少的空間?

3、文件: 文件系統中哪些文件的大小超過了 90 KB?

輸出結果如下:

Filesystem Size Used Avail Use% Mounted on
tmpfs 10M 952k 9.0M 10% /rw
Finding big files in /rw filesystem...
916k ./var
4.0k ./usr
0 ./tmp
8.0k ./root
24k ./etc
0 ./dev
952k .
952k total
./var/log/router
./var/log/messages

清單 1. bigfiles 腳本的輸出結果

checkspace

checkspace 腳本每小時運行一次,負責在這個讀寫的文件系統上維護最少的可用空間。如果文件系統的利用率達到 80%,那麼 checkspace 就會運行 logrotate,後者會根據需要壓縮和刪除日志文件。

aptgetupgrade:aptgetupgrade 腳本檢查包的新版本,並進行必要的更新。這個腳本對 Debian apt-get 命令進行了簡單的封裝,可以通過 /etc/cron.daily 運行該命令,從而幫助您更新各種補丁。

管理客戶機

無線客戶機可能會出現一些問題,這一節中討論的基於 Linux 的管理工具可以幫助您解決這些問題。下面是幾個如何解決典型的用戶問題的例子:

● 問題: "Internet 今天是否出過問題?為什麼我的浏覽器無法找到 www.flakyhost.com 呢?"

● 解決方案: 首先,使用 scanap 腳本檢查無線網絡的客戶機;這可以告訴您有關所有已連接客戶機的無線信號的質量,包括出問題的那些客戶機。然後使用 pingall 腳本檢查這個 IP 是否有問題;這將告訴您有關到達 ISP 網關、DNS 和所有客戶機的延時時間,其中包括那些有問題的客戶機。如果這兩個腳本都說您的網絡沒問題,那麼不妨試一下 www.flakyhost.com 是否有問題。

● 問題: "昨天我從 www.flakyhost.com 下載東西時的速度是 X。為什麼現在我的速度只有 Y 呢?"

● 解決方案:要判斷您的網絡是否被其他人利用了,請運行 countlog 腳本。該腳本可以按照客戶機和時間列出今天的傳輸歷史記錄。

為了改進簡單性和安全性,您可能希望試驗一下我為用戶提供的一種方法。我獲得了每台客戶機的 MAC 地址,因此只有那些已知的 MAC 地址才允許連接到這個無線網絡上。我為每台客戶機都分配了一個固定的 IP 地址,這樣只有那些已知的 IP 地址才能通過路由器。將這些客戶機的信息保存在某個地方要比同步並復制配置文件容易得多。我在 /etc/hosts 中為每台客戶機的 IP 地址都分配了一個容易記憶的名字,並在同一行中寫下了該客戶機的 MAC 地址。例如:

192.168.168.198 wet11two 00:0C:41:BE:BF:B0

清單 2. 分配一個主機名和 MAC 地址

請參閱參考資料中 /etc/hosts 的一個示例實現。

networkingrestart:networkingrestart 腳本負責啟動網絡,並對所有有效的客戶機進行身份驗證。它將讀取 /etc/hosts 文件,然後將這個 MAC 地址添加到無線訪問控制列表中。

gethost:在向 gethost 腳本傳遞一個 IP 地址、主機名或 MAC 地址時,它就會從 /etc/hosts 文件中返回所有這三種內容。countlog、pingscan 和 scanap 腳本都會使用 gethost 腳本,也可以在命令行中直接使用此腳本。

scanap:scanap 腳本的作用是顯示 IP 地址、MAC 地址、主機名,以及客戶機與 AP 之間的連接的質量。它會對 Wireless Tools 的 iwlist 的輸出結果重新進行格式化,並添加 MAC 地址的信息,這樣就可以在每一行中對每台客戶機的狀態進行總結。它的輸出結果如下所示:

MAC Address...... Quality Signal Noise. IP Address....... Name
00:0C:41:BE:BF:B0 238/92 -29 -35 192.168.168.198 wet11two

清單 3. scanap 腳本的輸出

管理帶寬

WISP 要負責處理有線網絡中的所有復雜問題,以及特定於無線環境的一些問題。下面這些腳本可以確保您所提供的帶寬既穩又快。

errors:errors 腳本會對 Linux 的 /proc/net/ 中的信息進行統計,並給出這個訪問點的所有傳輸錯誤率的快照。它還將輸出結果寫入一個表格文件,供以後處理使用。它的輸出結果如下:

13 22:20 TX Octets: 294080 TX errors: 1665 TX error ratio: 176
13 22:20 RX Octets: 893539 RX errors: 3225913 RX error ratio: 0

清單 4. errors 腳本的輸出結果

這個例子說明第一次成功傳送的報文的數量比需要重新傳送的報文的數量多 176 倍,還說明發送報文時出現的錯誤遠遠多於接收報文的錯誤。這些數字僅僅是我們需要觀察的一些指標,因此如果這些數字並不一致,也不用擔心。使用情況會對這些比率值造成非常大的影響。如果不使用網絡,就不會有成功的報文,因此這個比率就是 0。如果很少使用網絡,那麼這個比率就會很低。隨人們越來越多地使用網絡,這個比率可能會極其高。

pingscan:pingscan 腳本負責測量網絡的延時,它將說明客戶機是否具有最快、最可靠的吞吐量。它向客戶機發送 4 個短的 ping 包(每個是 56 個字符)和 4 個長的 ping 包(每個是 1,024 個字符),然後返回以下信息,每行的內容如下:

● 客戶機的主機名和 IP 地址。

● 時間戳。

● 接收到短 ping 包的響應的個數。

● 接收到長 ping 包的響應的個數。

● 對短 ping 包響應超過 1 秒的個數。

● 對長 ping 包響應超過 1 秒的個數。

它還要將結果記錄到一個電子表格文件中,便於以後進行分析。在如清單 5 所示的結果中,這個主機目前執行得很好。這些響應來自 4 個短的 ping 包和長的 ping 包。沒有一個響應超過 1 秒。

wet11two,2005-03-18,23:59,4,4,0,0

清單 5. pingscan 腳本的輸出

下一個示例輸出清單是在一天後執行的。在這一天中,同一台主機上丟失了一些響應信息 —— 4 個短 ping 包中只有一個收到了響應,4 個長 ping 包中只有 3 個收到了響應。

wet11two,2005-03-19,23:59,1,3,0,0

清單 6. 示例 pingscan 腳本的輸出

如果其他客戶機都運行良好(4,4,0,0),那麼就是這台主機目前出現了問題。另一方面,如果多台客戶機上都丟失了響應信息,那麼問題就可能在於訪問點上。

通信的監視

了解 AP 上有多少通信是非常有用的。實現這種功能的一種方法是通過 SNMP 來記錄路由器的通信信息,然後對這些日志記錄進行統計。不同路由器的日志也有所不同,因此您需要以不同的方式對它們進行處理。

我將路由器配置為將其 SNMP 的記錄發送到一個搜集器主機(在這裡是 AP)的 IP 地址。在 AP 一端,我將運行 snmpd 和 snmptrapd 守護進程,將這些記錄保存到一個文件中。這些記錄如下所示:

"@out 192.168.168.192 2983 208.222.234.90 80."
"@in 211.107.232.1 51550 192.168.168.196 21."

清單 7. 記錄搜集

外發的記錄是一個 Web 請求,從 192.168.168.192 發往 208.222.234.90。傳入的記錄是一個 FTP 請求,從 211.107.232.1 發往 192.168.168.196。

您可以從這個文件中提取很多有用的信息 —— 例如,可能有一些您希望阻塞的病毒探測。countlog 腳本可以使用兩種不同的方法來統計這些傳入的記錄和外發的記錄。它可以統計最後 n 分鐘內的請求數量,其中 n 可以是一個自行定義的數字:

Checking 5 minutes before 23:59...
101 requests in 5 minutes
An average of 20 requests per minute

清單 8. countlog 腳本統計 n 分鐘內的請求數量

它還可以統計過去 24 小時內請求的個數:

Start... Total Outbound and Inbound Today
00:00... out: 192 in: 63 out/min: 3
.
.
.
19:00... out: 243 in: 96 out/min: 4
20:00... out: 308 in: 66 out/min: 5
21:00... out: 151 in: 103 out/min: 2
22:00... out: 206 in: 94 out/min: 3
23:00... out: 160 in: 70 out/min: 2
Totals.. 2095 1759
IP Address (Host Name) Total Outbound Today
192.168.168.8 (cheltenham) 659
192.168.168.191 (t30lan) 156
192.168.168.192 (downstairs) 1044
192.168.168.196 (opteron) 236
Total all IP's.... 2095

清單 9. countlog 腳本統計過去 24 小時內請求的個數

結束語

很多命令行 shell 腳本都可以簡化 WISP 的管理。下面是最後幾點提示:

●不要在客戶端使用 USB 無線網橋。它們的功能非常有限,當客戶機關機之後,就無法 ping 到它們了。

●不要試圖通過一個非常便宜的家用路由器來運行一個很大的無線網絡。這樣會產生不可預知的後果。

使用本文中介紹的工具和技術,您應該可以搭建並運行自己的無線網絡。

參考資料

您可以參閱本文在 developerWorks 全球站點上的 英文原文。

如果您希望了解在 Linux 上可以使用哪些無線網卡,那麼請參閱 Jean Tourrilhes' page dedicated to the subject。在那裡可以找到有關本文中使用的 Prism2 卡的內容。

Pebble Linux 是專用於嵌入式設備。它是基於 Debian 的,因此您可以使用 apt-get 工具。

關於作者

自 1999 起,Alan Baker 就一直是各種 Linux 服務器的系統管理員,這些服務器包括撥號、郵件、Web 和無線服務器。他於 2003 年成為一名無線 Internet 服務的提供者,他喜歡使用一些 bash 腳本來增強系統的安全性並自動化 Linux 系統的管理任務。

Copyright © Linux教程網 All Rights Reserved