在區域網路內經常需要的網路服務,以及很重要的 LACP 功能!雖然有 10G 就沒這需要...
假設你已經看過 Linux 私房菜的基礎學習篇與伺服器架設篇, 那麼你應該會知道,架設一個在網路實體媒體分離的區域網路 (LAN) 其實不難,最簡單的作法,那就 (1)買個便宜的 IP 分享器來處理對外連線, (2)內部的 LAN 使用一個便宜的 giga hub 來串接所有的 PC 與行動裝置,一切就結束了。好開心!好愉快啊!
只是,如果 (1)你的 LAN 裡面總共會有超過 60 部以上的電腦,而且這些電腦還需要常常共享資料,因此資料傳輸頻寬非常大, 一般的 5~8 埠數的 hub 根本不夠用!那該怎辦?此外, (2)由於想要預防區域網路被惡搞,或者是需要加上一些防火牆控制參數來避免使用者在區網內誤用網路資源時, 如果考慮 IP 分享器,它根本沒辦法提供這些功能,又該怎辦?又或者是 (3)LAN 裡面有部大家都需要使用的檔案伺服器,當所有人都連上去時, 總頻寬該怎麼算?由於單張 Gb 網卡最多就只能提供 1Gbits/s 的頻寬啊!但又不想要買 10Gbits/s 的網路設備 (現階段還貴的要死),那又該如何增加有效頻寬?
這些東西在伺服器架設篇裡頭並沒有仔細說明,因為那是給一般網際網路環境使用的架構!網際網路使用的資料量並不會太龐大! 但如果是校園或企業內部強調高速傳輸的環境底下,總傳輸資料量或尖峰傳輸量可能是相當龐大的!例如近年來相當熱門的虛擬化技術就用到很多區網內部的高速儲存設備! 這時,一個仔細規劃過的區域網路就很重要啦!
鳥哥這裡並沒有談到給高階儲存設備使用的環境,因為那屬於大型企業的尺度,那種環境的網路媒體,沒有數百萬是搞不定的。 我們這邊強調的是給校園及中小企業使用的環境,包括一般校園的電腦教室或小型計算機中心的環境架構,想要高速運作網路傳輸時, 那就得要加些功夫進來,否則,你常常會發現,怎麼區域網路的傳輸速度那麼慢啊!呵呵!醒一醒吧!來用功囉!
如果你有看過私房菜伺服器篇了,那麼區域網路的建置應該不怎麼難才對~尤其是硬體的部分,不就是透過星形連線方式,中央部分使用集線器 (hub) 或交換器 (switch) 連接各個終端設備 (指的大部分就是 PC 啦),然後在各個終端設備上面搞定好作業系統,之後在區網內搞個路由器 (router) 或 IP 分享器提供區域網路的對外連線,一切就搞定了!有啥難度的啊?
話是這麼說沒錯啦!不過,想一想,如果你的電腦數量是 60~100 台 PC,這麼大量的電腦設備要連線,現在常見的多埠數交換器,最多也不就是 24~48 port 而已,那你要買幾部?此外,switch 對 switch 又要如何連接?連接幾個 port 會比較好?需要怎麼進行 switch 設定?這些好像都應該要考慮考慮才好!
一般家庭使用的區域網路,不過是區區五、六台電腦,所以買個小型的桌上型 gigabit 交換器也就搞定了,小型 8 port 交換器不過一兩千塊就搞定了。 而且體積小也不佔空間。唯一需要考慮的,是這個交換器不要放在密不通風的地方,例如桌子底下或櫃子裡面。因為鳥哥家裡實際使用的小型 8 port gigabit 交換器,連續兩三部都因為熱當的問題導致數個 port 損毀,每個交換器大約使用 3 年就壽命終了了~沒辦法,鳥哥的機器所在的工作室,人不在的夏天沒開冷氣的情況下, 室內溫度是高的嚇人的~所以,夏天的時候,數據機、無線 AP 與交換器上方還會擺個小電風扇去吹他~電風扇再用定時器去控制~避免交換器熱當導致沒有網路可以用...
家庭環境還好啦,簡單就搞定了。不過一般中小型企業所在的環境就不是這麼簡單了!舉個例子來說,鳥哥服務的崑山科大資訊傳播系,系上有四間電腦教室,其中一間內部含有 61 台 PC、一部防火牆系統、一部印表機,隨便加一加就有 63 個設備,也就是說,至少得要有 63 port 的交換器才能夠處理這個環境。問題是,早期的交換器較多 port 數的通常比較貴,加上廠商認為我們可能會在交換器上面做些控制,因此採購的是 3 台 24 port 的有網管功能中低階交換器,每一台大約是一萬多塊台幣吧。 由於 3 台 switch 也需要連接,兩兩連接的結果,就佔用了 4 port 了,所以全部可用的埠數為 3*24-4=68 個,看起來,這個數量好像還夠喔!
原本以為上述的規劃就夠了,因為都已經是 gigabit 的網路了嘛!但後來接觸到 DRBL+clonezilla (這個後面章節會談到),同時鳥哥之前也自己搞一套資訊傳播系自己的快速復原系統, 這些系統都是統一透過一部 server 來提供用戶端的快速復原。想一想,每一部 PC 都是向同一部 server 要資料啊,而一部 server 僅使用到一個 port, 每個 switch port 最高僅能使用 1Gbit/s 的速度,因此,60 台 PC 中,每部 PC 僅能分到 (1Gbits/s)/60=(1000Mbits/s)/60=17Mbits/s=2.1MBytes/s,要死了~如果每部 PC 同時下載一個 1GBytes 的檔案,那得要花上 (1024Mbytes/(2.1Mbytes/s))=480sec=8分鐘左右,這還是理論極限速度喔!哇!老師們隨便提供的一個作業影片,光是上傳就要死人~ 更何況是當系統需要復原時,需要傳輸的資料量通常是數十GBytes以上的資料量!所以,這樣的架構看起來是有些問題了。
我們是定位在中小企業的實作環境啊,也就是說,我們需要的是使用較少的錢可以取得較大的電腦與網路使用效益。所以,上述的環境如果要改善,有經驗的朋友當然會說, 阿全部換成 10Gbit 的網路就好了啊!那比 gigabit 的速度要再快上 10 倍呢!肯定沒問題了吧?問題是,錢錢啊! 10Gbit 在目前 2013 年的現實環境下,還是貴的要命! 而且不只交換器,連電腦的網卡都要換掉才行~這樣區網才能夠全部上 10Gbit 啊!一張 10Gbit 網卡可能比一部低階的主機還要貴了哩 (上萬塊新台幣)!那怎麼有這麼多錢錢? 所以,底下就得要來談談,有沒有比較便宜且可行的方案呢?
既然還是得要在 gigabit 的網路上面著手改良,那想一想,有沒有辦法增加 Server 的頻寬呢?舉例來說,能不能使用多張 gigabit 網卡來增加 server 的總頻寬? 如果可以用兩張網卡來處理,那不就可以增加 100% 的頻寬了 (從 1Gbits/s --> 2Gbits/s)!好棒呢!聽網路上許多前輩在說,bonding 這個技術可以使用多張網卡來綁定成為一個 IP, 如此一來,該 IP 就能夠使用多張網卡,就能夠解決頻寬問題了呢!真的嗎?當然要考慮很多方面啦!最重要的地方是,頻寬頻頸可能在 switch 對 switch 的連接處喔! 怎麼說呢?讓我們看看底下的連接範例:
仔細看上圖的結果喔,當有三部 PC 直接連上 B 這個 switch 時,這三部 PC 可以獲得完整的伺服器提供的三張網卡總頻寬。但如果是 A 與 C 區連接的 PC 呢?由於 A 到 B 兩個 switch 僅使用到一個埠口,因此這兩個 switch 之間最大的頻寬當然也只有 1Gbits/s 的量,所以,如果 A 區有三部 PC 要使用伺服器的資源時,你猜猜網路流量的頻頸在哪裡?想也知道是兩個 switch 間的總流量啊!那怎麼辦?能不能在兩部 switch 之間接上兩條以上的網路線啊?
後來又聽說,如果要增加兩個 switch 間的總頻寬,可以透過一個稱為 LACP 的協定來處理 (本章稍後會談到) ,當兩個 switch 想要分別使用到超過兩個以上的埠口來互連時, 如上圖的 A 到 B ,使用兩條網路線來連接這兩個 switch 時,可以透過這個協定來讓兩個埠口合成一個進行網路流通,如此一來,兩個 switch 間的流量就可以倍增了! 這真是好棒啊!那就能夠增加 A 區的 PC 連接到伺服器的總頻寬囉!
由於 LACP 僅存在於有網管功能的 switch 上頭,如果你使用的是無網管功能的 switch ,那麼就無法使用 LACP,也就無法在兩個 switch 之間使用多條網路線串接了! 好佳在,當初我們系上請的廠商規劃的是有網管的 switch,那我們就可以使用多條網路線串接兩部 switch 來增加區域網路內的頻寬了嗎?當然不是!沒有這麼愉快!為什麼?
再回到圖 1.1-3 的鳥哥服務的單位的網路環境。由於我們的伺服器上頭可以接上最多 3 個對內的 Gbits/s 網路,為了讓 A, B, C 的 PC 均能夠順利的使用伺服器 3 張網卡的功能,因此每個 switch 之間我們打算使用 3 條網路線來串接。由於 switch 是兩兩成對的,因此用在連接 LACP 的埠口數將到達 12 個這麼多! 然後伺服器提供了三張網卡進行 bonding,加上一台印表機、61 台 PC 電腦,則總埠口數需求為 12+3+1+61=77 !但我們的 24 port 3 台 switch 最多僅有 24*3=72 個啦! 少了五個...所以說,預留 switch 埠口數以供未來利用有多重要了!
綜合來說,小型區域網路當然不用考慮底下的需求。但如果您的區網有超過 50 部以上的終端電腦設備,而且可能未來會考慮使用無硬碟環境、虛擬化環境, 或者是需要比較高資料傳輸的頻寬設定時,同時,你沒有錢錢購買較大型的網路設備 (10Gbits/s 之類的網路媒體),那你應該要注意:
事實上,不同的網路使用行為產生不同的連線思考方向。如果你的環境僅是要實現大家都可以連上 Internet 的話,那麼簡單的連線即可。如果是想要在區網內部作個大流量的實驗, 那可就不能隨便連線而已,得要思考如何擴大頻寬頻頸處才行!
如上個小節說的,小型區網只要星形連線中間的 switch/hub 所提供的 port 數量夠,將所有的 PC 與終端設備通通使用 cat6 以上等級的網路線連接在一起就好了! 但如果是具有比較多終端設備的環境下,就得要考慮考慮不同的方案了!上個小節鳥哥也提到我們系上的某間具有 61 台 PC 的電腦教室環境,使用了 3 台 24port switch 的環境。不過,後來我們在該教室內使用 PC 作業系統大量網路還原的機制,這就發現網路速度有點慢~因此只好將原本的網路環境稍作調整~
過去的文件都說,最好將每個小區網獨立出來,這樣除了可以克服網路封包的碰撞問題之外,管理與除錯也會變的比較方便(參考註1, 2文件)。舉例來說, 如果你所在的企業環境內部有三個部門,每個部門有大約 20 個左右的終端設備需要連線時,那麼在每個部門擺上一部 24port 以上的 switch,然後將三個部門的 switch 統一拉到公司對外的線路所在的那個 switch 上,而公司內部的伺服器也是連接到該部對外的 switch 上頭,如此就完成整個區網的連線設置。如下圖所示:
上述的連接方式是比較簡單且單純的,如果你的區網內,每個員工常常有需要連線到 FTP 去下載大型檔案時,那麼這個連線的架構的頻頸將會發生在 FTP server 到 switch 這一段。 如果區網-1的內部網路中,有個特殊的服務被啟動,而區網-2的員工都得要去存取他時,那麼頻頸就會發生在 switch 到 switch 連接的那個 port 上面囉。
如果將上述的環境思考成在同一個電腦教室內呢?而且,在這個擁有 60 部電腦的教室中,若考慮統一控管電腦的作業系統,所以所有的 PC 其實內部並沒有硬碟,而是使用伺服器所提供的網路檔案系統呢?那麼上圖的連結方式就不行啦!因為效能頻頸會卡在伺服器上面的那張網卡,全部的頻寬僅有 1Gbits/s 而已。
在繼續說明之前,讓我們來作個數學吧!現在的新型桌機硬碟資料讀寫率大約在 100~150Mbytes/s 左右,至於中低階的筆記型電腦讀取效能則可能在 40~80Mbytes/s 左右。 如果我們的 PC 是無硬碟環境,因此作業系統碟的資料是來自於伺服器,PC 與伺服器之間使用的是 1Gbits/s 的網路設備,轉成檔案容量單位,則最大磁碟存取率約為 125Mbytes/s 左右, 這差不多是一般一部桌機的硬碟讀寫率。
好了,一部這樣的無碟設備是很 OK 的喔,如果是整間電腦教室 60 台電腦都使用這樣的無碟環境呢?那麼 125Mbytes/s 就得要分享給 60 部電腦,算一算喔, 平均每一部電腦能夠用到的資料量大約是 2Mbytes/s 喔!請查詢一下這個數據與一般低階筆電的 40~80Mbytes/s 數據比較看看,這 60 部電腦想要完成開機, 他開機所花費的時間是低階筆電的 20 倍以上時間喔!因為網路在很繁忙的時段將會造成更多的封包碰撞,導致網路效能低落~所以,想想看,一張 Gbytes 的網卡能夠符合我們的需求嗎?
為了改善單張 Gbits/s 網卡的困擾,台灣的國家高速網路中心所發展的 DRBL (Diskless Remote Boot in Linux, 註1) 安裝環境中,他們建議,在一間 40 部電腦的教室中, 伺服器至少得要有 4 張 Gbits/s 的網卡,每張網卡獨立分給 10 個用戶,因此分成 4 個小型區網。這 4 個區網得要分別安插在 4 個沒有串接的 switch 上面 (有網管交換器的 VLAN 功能也屬於沒有串接的環境),且這四個區網的網路 IP 網段是不一樣的 (考慮的每個區網的 NAT 與路由器設定之故)。詳細的 DRBL 建議 40 台電腦串接與 IP 網段示意如下:
繼續來作個數學好了,上圖中,由於每個單張網卡僅負責 10 個用戶,因此每個用戶可使用的網路速度平均可達 10~12Mbytes/s 左右, 由於 DRBL 主要是提供開機時讀取資料量相對較少的 Linux 系統,因此整體的開機速度是可接受的。不過根據 DRBL 官網的說明,在這樣的環境底下, 10 個用戶同時打開 OpenOffice 這類比較大型的辦公室軟體時,得要等待數分鐘才能夠開啟完畢~雖然是比單機要慢很多,但至少是在可接受的範圍內~
雖然說上述的網路連接環境可以滿足 DRBL 的需求,不過就鳥哥個人的觀點來看,實在有點不太舒服~怎麼說呢?鳥哥所服務的單位,很多老師教導的是屬於影音實務方面的課程, 得要使用到 Windows 加上 Adobe 這些較龐大的軟體怪物。由於 DRBL 暫時不支援 Windows 系統,因此,我們得要在個別的 PC 上面安裝各項所需要的軟體。 問題來了,假設老師的電腦放置於 192.168.100.0/24 的網段,那麼同網段的十個人可以很輕鬆的連結到老師端的網芳來下載老師提供的範例檔。 但是其他三個網段就沒有這個福利了!因為『網芳預設僅提供區網內的用戶端連線』而已。因此 192.168.101.0/24 之後的網段就無法使用老師的網芳了! 除非老師自行將 Windows 防火牆關閉或更改設定,否則就是很麻煩~
那有沒有辦法將所有的電腦放置在同一個區網內?不要再分不同網段了啦!是可以啊!不過可能需要有網管功能的 switch 協助才行喔!就如上個小節談到的, switch 對 switch 之間可以透過 LACP (下個小節會談) 的功能將幾個埠口綁在一起來加大兩者間傳輸的頻寬。
以鳥哥自己來說,鳥哥在自己的服務單位內,以一間共 61 台電腦的教室為示範空間, 裡頭擺了四部有網管的低階 switch,透過主控 switch 連接到其他三部 switch ,每部 switch 間使用 3 條網路線串接,透過 LACP 的功能,理論上可以讓每個 switch 對 server 的頻寬放大成三倍!同時 server 使用 bonding 功能安插了共 3 port Gbits/s 網卡,提高所有 PC 對 server 的總頻寬。如此一來,所有的 PC 將可以在同一個區網內, 而且頻寬方面也算是在還能接受的範圍~底下為實際連線的示意圖:
如上圖所示,主控的 (最上方那部) switch 僅直接連接伺服器與 switch 而已,並不接受一般 PC 的連接。至於其他三部 switch 則是每部連接 20 個 PC 終端設備。 因為使用 24 port switch,所以這三部 switch 總共會花費 20+3 個埠口,就剩下一個備用的囉。其他共用設備 (印表機、伺服器等) 就都接在主控 switch 上頭, 如此一來,一般的網際網路連線,就只會經過主控 switch 與該 PC 連接的 switch,其實是有擴大頻寬的功能的。
除了擴大頻寬功能之外,這個方案與圖 1.2-2 的方案來比較,雖然封包碰撞的情況可能較嚴重,或許不利於 DRBL 的環境。但考量到目前電腦很少會沒有硬碟的狀況, 所以這個方案著重在上課過程中,除了同學間的資料分享可以具有較高的頻寬之外,所有設備都在同一個網段下,讓教學的網路環境較為單純,是比較優良的地方。
既然我們的區域網路連線需要使用到 LACP 來擴充頻寬,不瞭解一下怎麼行?所以底下就先來聊聊 LACP 吧!
LACP 的全名是 Link Aggregation Control Protocol,中文翻譯為『鏈路聚合控制協定』,這個通訊協定可以在 switch 對 switch 之間,或 switch 對 PC 之間有連線的需求時,可連接多條實體網路線,以達到網路連線容錯以及增加兩者間頻寬的目的。
我們知道 swtich 對 switch 之間,如果沒有啟用特殊的功能,當連接兩個以上的連線時,恐怕會造成 switch 的內部廣播迴圈,導致整個 switch 或某些埠口的失敗。 因此一般 switch 對 switch 之間,僅能連接一條實體網路線。但 switch 對 switch 之間如果僅有一個埠口的連線時,由於埠口速度的關係,整體網路傳輸總量的頻頸將會產生在兩個 switch 對接的埠口上。因此,這個 LACP 協定最初發展的目的就有兩個,一個是由於有多條連線,因此連線就具有容錯功能,可以在某條連線失敗時, 兩者間的連線依舊可以透過其他存在的連線來達成。另一個就是在增加整體的網路流量傳輸率(throughput)。
那麼 LACP 實際上在 switch 的連線是如何進行資料傳送的呢?其實所有的資料都會被分散在實體的 switch 間的連線中,另外,我們知道 switch,尤其是第二層的 switch 主要是針對網卡卡號 (MAC) 來進行資料的傳送,為了不要讓 switch 一直在埠口間切換同一個 MAC,因此,同一部主機所發出的連續訊框 (frame), 基本上都會透過同一個實體網路線來傳送,而不是交替在不同的網路線間傳送。舉例來說,如果有兩條對接的線,在兩邊的 switch 各有兩部主機,並且分別對另一台 switch 的主機連線。理論上,兩兩 PC 連線會透過不同的兩條實體線路連接,所以總頻寬就可以增加一倍了!當然,這是最佳的情況啦!
事實上,兩個 switch 間多條連線達成的設定模式有兩種,一種是靜態的固定設定 (static),一種是讓 switch 自動動態詢問的模式 (就是 LACP):
既然可以直接靜態設定好 LAG 的鏈路聚合,幹嘛需要使用 LACP 呢?這麼說好了,假設你有三條固定的 switch 間的連線加入靜態的固定設定方式, 那麼這三條線都得要同時達成連線成功,有任何一條連線失敗時,這兩個 switch 間的連線都會失敗了,因為這種方式並沒有容錯啦!那 LACP 就不一樣, LACP 可以自動詢問兩個 switch 之間的連線是否有加入 LACP 協定,若有的話就會達成連線,若是該連線失敗了 (例如線路脫落),那麼該連線就會自動脫離 LACP 的控制,以讓還存在的連線繼續運作,這就是具有容錯的能力了。
同時,動態的 LACP 模式提供兩種類別的設定,包括 active 與 passive 兩種類型,說說兩種類別的運作方法吧!
所以,要達成 LACP 連線,switch 兩端可以都是 active 連線,或是一邊是 active 一邊是 passive 才行!如果兩邊都是 passive 的話,那就不會有 LACP 詢問訊框產生,那麼 passive 就不會回應,自然也就無法達成 LACP 連線了。也就是說,接口兩邊至少需要有一邊是 active 類別才行!
不知道你會不會覺得很奇怪,既然兩者間的連線需要兩個埠口間的主動溝通詢問來達成 LACP 的完整連線行為,那為何需要 passive 這種類別呢? 根據 wiki 的內容說明,這是因為當 LACP 設定在 passive 類別時,即使你的環境沒有任何 LACP 的連線,你的網路就不會去回應與發出任何 LACP 的訊框,如此一來,你的網路就可以持續正常運作,也不會有任何的 LACP 訊框產生。有何好處?可以節省設定的手續啦!何解?聽鳥哥慢慢道來!
妳可以將你的 switch 設定啟動 LACP 並且啟動在 passive 類別下,那當你的 switch 並沒有任何的多條網路連線與 active 的設定,那也不會有任何的干擾!可作為預設的設定值也沒關係!當有 LACP 的 active 訊框產生時,你的 passive port 就會自動的跟對方達成連線,想想看,這樣是否就變得比較人性化些呢?有要求就連線,沒要求就保持正常工作啊!
能不能設定 LACP 還是有一些限制的,前提之下當然就是你的 switch 要支援這個協定,一般來說,switch 上面寫有支援 IEEE 802.3ad 或 IEEE 802.1ax 的, 理論上就可以支援啦!另外還有一些小細節要注意:
由於鳥哥所接觸的環境中,目前僅測試過 ZyXEL 對接的系統,以及 ZyXEL 對接到 Cisco 的 switch 系統,其中又由於 Cisco 得要使用終端介面登入 RS232 的連接環境, 所以這邊鳥哥就不列出示意圖,詳細資料可以參考文末的參考文獻 (註3) 的說明內容。底下僅列出 ZyXEL 他們家的設定, 其他廠牌的 switch 請各自參考使用手冊來設定吧!反正只要注意到幾個重點,對接的埠口號碼要對、模式要啟動成 LACP,LACP 類別要設定成 Active,這樣通常就能夠設定妥當了。
請回到圖 1.2-3 的內容,我們區網共有四台 switch,其中三台分別負責內部的 20 部電腦 (所以總量為 60 台電腦), 一台則是主幹用的。主幹 switch 必須要設定三個 LAG 群組,每個群組分別對應到一部 switch 的相對應群組。所以看起來主幹 switch 最麻煩~ 我們就拿主幹 switch 來設定給大家瞧瞧,那其他的三部依樣畫葫蘆即可完成囉!
首先,妳必須要依據你的產品手冊,找到能夠登入這部 switch 的連線方式,包括 IP、帳號、密碼等,ZyXEL 剛剛好有提供 web 介面的設定,於是我們就用瀏覽器來設定啦! 輸入正確的參數後,理論上妳會看到如下的畫面示意圖:
如上圖所示,左上角主要有四個設定值,詳細的各項設定請參考您的使用手冊。我們主要是找出 LACP 的設定而已,因此,依據上圖箭頭所指,依序點選 1 (Advanced Application), 2 (Link Aggregation), 3 (Configuration) 號按鈕,同時請注意,因為這個 switch 的設定值已經實際在運作了,因此妳會看到上圖畫面已經有 4 個 LAG 群組!如果是您的環境,應該會看到上圖右側畫面會空空如也~依序按了箭頭之後,就會出現如下的畫面了!
上圖是設定畫面的上半部,首先,請勾選 1 號箭頭指的位置,那是啟動 switch 的 LACP 支援的意思,這個設定項目務必要啟用! 因為這是全域設定,如果妳沒有勾選他,那麼後面的所有設定值都預設不會執行的!妳可以看到底下有四個 Group ID,這代表這個 switch 只支援最多四個 LAG 的群組而已。請選擇你需要的項目,勾選 Active 與 Dynamic(LACP) 這兩個設定值。為什麼要兩個通通勾選? 請自行參考上個小節 1.3 的介紹吧!不再贅述了!
上圖中鳥哥會四個通通勾選,是因為除了這間教室的三部其他 switch 之外,我們還另外拉了三條網路線到主控機房,因此就得要有四個 LAG 群組。 這個示意圖並不是要您全部都勾選喔!請依據妳的環境來設定即可。如果妳只有兩部 switch 要互相作為 LACP 的話,那只要勾選 T1 那一列的 Active 與 Dynamic(LACP) 即可,不必每項都勾選!注意注意喔!勾選完畢後,將畫面往下拉一些,妳會看到如下的圖示出現了:
由於考慮到預留埠口的問題,所以我們原本是使用 9~12, 13~16, 17~20, 21~24 作為四個群組,但由於 9, 11 兩個埠口又剛好出問題~ 因此,最終我們是使用如下的埠口對應到各個 LAG 的 ID:
選擇好了每個 port 對應的 LAG 群組 ID 之後,那麼每一個 port 最後面的 30 seconds 又是什麼呢?那個是 LACP 發送檢測訊框時間啦 (Control Frame Interval)!預設應該是 1 秒鐘才對,那個檢測訊框時間,指的是 LACP 多久檢測一次實體連線有沒有保持在連線的狀態中!Wiki 是說不可以設定的太長,否則當實體連線失敗時,整個 LACP 群組恐怕會有一小段時間的連線中斷的問題。鳥哥是建議使用 ZyXEL 的預設 30 秒~ 這個時間不算太頻繁,但也不會太短暫~算很 OK 的時間囉!
設定完畢之後,回到狀態列,妳就會看到如下圖所示的模樣!在這個畫面擷取的時候,這間電腦教室的四部 switch 是正常運作的, 所以 T1, T2, T3 就會看到設定的埠口 (Enabled Ports) 有對應到同步的埠口 (Synchronized Ports)。但第四個拉到外部的那三條線, 由於設定完畢之後,鳥哥的學生突然又重新整線,整線的時間超過了 30 秒以上,結果機房的 Cisco switch 就認定這組 LACP 完全失敗了! 根據 Wiki 的文件顯示,某些不同品牌的 switch 互相作為 LACP 時,確實會發生這樣的情況。那怎麼解決呢? 妳一定想不到!解決的方法就是,將 switch 重新設定或重新開機即可。在我們將 Cisco switch 重新開機後,嘿嘿! 整個畫面就正常了! ^_^
根據 wiki 的 LACP 文件內容說明,由於訊框在 LACP 各個實體連線之間散佈,其實整體效能並不可能有幾條網路線就提升幾倍!所以, 老實說,如果每條網路線都可以增加 50~80% 的話,那就賺到了!
為了測試整體效能,鳥哥在作好了教室內的 LACP 之後,就開了 8 部 Linux 主機來進行測試。 這 8 部主機中每 4 部串接在同一個 swich 上面,也就是說,兩部 switch (假設為 A, B) 上各有 4 部主機的意思。然後兩兩成對,A switch 上的四部主機開啟 NFS 檔案系統,B switch 上的四部主機則分別掛載了 A switch 上的不同主機的 NFS 檔案系統。接下來鳥哥這樣做測試:
上面的測試中,我們大概可以看出來,LACP 的訊框分佈演算機制可能沒有這麼完美,因此沒有辦法將四部主機平均分散到三條網路線。同時,根據訊號的觀察, 三條網路線接口的閃燈,通常僅有兩條在閃爍,其中一條可能沒有被分配到,所以常常都沒有閃爍的情況...
另外,如果將四部主機同時運作的速度相加, 那麼可得到整體的傳輸效能是 65+40*3=185 Mbytes/s ,這差不多是兩條 Gbits/s 網路線的頻寬了!因為通常一條 Gbits/s 的網路線,能夠取得的傳輸頻寬達到 100Mbytes/s 就很不錯了啦!因此,上述的測試結果,還是可以看出 LACP 是有幫助的!而且, 當用戶端數量越大時,應該可以越看得出效果呢!
談完了區網內硬體連線的方式,加上以 LACP 的手段來處理 switch 間的頻寬合併功能後,接下來我們得要談談區網內最重要的一部設備,那當然就是 NAT + 防火牆設備! 但是大家都會忘記,其實區網內還有兩個很重要的服務,那就是自動發派 IP 的 DHCP 服務以及私有領域名稱解析的 DNS 服務!咦!不是只要 DHCP 就好嗎? 不要忘記了,現在很多服務都會主動的去查詢『反解』的,因此,這個 DNS 真的很重要!不要忽略他~
另外,既然連 switch 之間的頻寬都增加了,那如果 server 還是僅有區區那 1Gbits/s 的流量,不是很可笑嗎?這時有用的 Linux bonding 技術就得要來討論討論才行呦!不過, bonding 的使用還是有限制的喔!並不是加了更多張網卡對於區域網路的速度就一定會有幫助的! 那就讓我們來談談如何使用吧! ^_^
承接上一章的內容,在區域網路裡面,如果考量用戶端彼此之間的流量,以及整體區域網路的效能頻頸,那麼 LACP 是不可或缺的好幫手! 但是,一般企業或者是學校的電腦教室環境,還有後續章節我們會持續介紹的 DRBL 無碟環境中,其實大家存取最頻繁的應該是伺服器才對吧! 尤其是電腦教室環境中,常常需要做為用戶端復原的映象檔提供者 (Server),在大家都來取得映象檔的時刻,網路說有多忙就有多忙! 所以啦,當然就得要增加伺服器的頻寬才行啊!
增加頻寬?能不能將伺服器的網卡變換成為 10Gbits/s 呢?當然不行!因為區域網路內各網路媒體如果要達成連線功能, 那麼網路傳輸的速度必須要相同才行!如果只是將 server 的網卡改成 10Gbits/s 的情況,其他的設備通通不變,那麼這張 10Gbits/s 網卡將必須要向其他 Gbits/s 妥協,所以他的速度將會降到 1Gbits/s 來跟大家連線才行!真是浪費錢了~
那我能不能用數張 Gbits/s 的網卡組合起來,讓這些網卡的頻寬通通綁在同一個 IP 底下,這樣不就能夠放大頻寬了嗎?OKOK!這樣想才有通! 這就是 Linux kernel 裡面談到的 bonding 技術囉!
早期由於乙太網路卡的速度還不夠快,那如果妳的伺服器需要比較大的頻寬使用時,就得要購買更昂貴的設備才行。 那為什麼不能將幾張網卡合併成為一張來擴大頻寬呢?此外,對於重要的服務來說,網路是不能中斷的!所以,能不能使用兩條以上的線路連接到我的伺服器呢? 因此,(1)合併網路卡的頻寬與 (2)讓網路具有容錯能力 (fault tolerance) 就成了 Linux bonding 最主要的考量了!目前 Linux bonding 功能已經加入核心,所以妳只要啟動它即可!不需要額外安裝其他軟體呦!
另外得要注意的是,如果妳的伺服器想要使用 bonding 來增加合併頻寬的話,那就不能使用 hub 了!因為 hub 是共享媒體,總頻寬是不變的! 要使用 switch 才行!這樣才能夠增加伺服器的整體頻寬使用喔!不過還是有些限制的~後面會再來講一講。
既然 Linux bonding 主要的任務是將多張網卡合併頻寬或者是作為備援與容錯,那麼妳的伺服器上面當然就得要有多張網卡才行!那這麼多張網路卡組合起來使用, 到底可以怎麼用呢?這時候就得要考慮到妳想要達成什麼功能啦!底下就來談談~
根據 wiki 的文件以及相關核心文件的說明, Linux bonding 共有七種模式!不過我們僅說說常見的幾種模式而已:
讓我們回到圖 1.2-3 的環境下,所有的 switch 之間的連線已經改成 LACP 了! 這個圖示中,我們是可以使用 LACP 的 mode=4 的方式來處理 bonding,不過,鳥哥比較建議使用 mode=6 這個簡單的設定方式!效能其實沒有差很多, 設定與使用上則更簡便!圖 1.2-3 裡面的那部主機,其實是 2009 年左右的產品,裡頭僅有一張內建的網卡而已。鳥哥在上頭額外安插了三張網卡 (所以共有 4 張), 一張作為 Gateway 對外提供 Internet 連線,三張 (連同內建網卡) 則做為內部的區網環境使用。
設定 bonding 的方法其實很簡單,首先,(1)妳必須要載入 bonding 模組,且將妳的 bonding 介面取個名字,通常最常取的名字就是 bond0。 如果妳想要做成兩個 bonding 的話,那就得要有 bond0, bond1.. 依此類推。再來,(2)妳得要修改歸這個 bonding 介面管理的網路卡設定檔, 就是在 /etc/sysconfig/network-scripts/ifcfg-ethX 的檔案內容,改完之後,(3)接下來就是建立 bond0 這個新的介面的網路設定檔, (4)最後重新啟動網路就成功了!就讓我們來實際測試看看吧!
[root@centos ~]# vim /etc/modprobe.d/bonding.conf alias bond0 bonding # bond0 為我們需要的介面, bonding 則是 Linux 的核心模組之意! |
[root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE="eth1" HWADDR="00:1B:21:3E:8C:47" <==某些情況下,可能要對應好網卡卡號,才能夠讓網卡正確取得代號 NM_CONTROLLED="yes" ONBOOT="yes" MASTER=bond0 SLAVE=yes USERCTL=no # 最重要的是那個 MASTER 與 SLAVE 兩個設定項目。且因為是受 bond0 管理,所以不需要網路參數。 # 至於 eth2, eth3 則是依樣畫葫蘆,這裡就不示範囉!自行修訂即可。 |
[root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 USERCTL=no BOOTPROTO=none ONBOOT=yes IPADDR=192.168.42.254 NETMASK=255.255.255.0 BONDING_OPTS="miimon=100 mode=6" TYPE=Unknown IPV6INIT=no # 重點是 BONDING_OPTS 這一串!mode=6 不用談,當然就是各個模式!這裡我們用 6 , # 至於那個 miimon 指的是『多久偵測一次各個 slave 網卡的連線狀態』的意思, # 這個值的單位是『毫秒』,就是 10 的 -3 次方秒~1000毫秒為一秒~ # 也就是說,我們大約 0.1 秒就偵測一次每張網卡的狀態!據以進行網路容錯測試! |
[root@centos ~]# /etc/init.d/network restart [root@centos ~]# ifconfig bond0 Link encap:Ethernet HWaddr 00:1B:21:3E:8C:47 inet addr:192.168.42.254 Bcast:192.168.42.255 Mask:255.255.255.0 inet6 addr: fe80::21b:21ff:fe3e:8c47/64 Scope:Link UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 ....(中間略過).... eth1 Link encap:Ethernet HWaddr 00:1B:21:3E:8C:47 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 ....(中間略過).... eth2 Link encap:Ethernet HWaddr 00:07:E9:5E:2D:76 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 ....(中間略過).... eth3 Link encap:Ethernet HWaddr 00:07:E9:5E:09:8D UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 |
[root@centos ~]# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) Bonding Mode: adaptive load balancing <== 注意到,是否為 mode 6 才行! Primary Slave: None Currently Active Slave: eth1 <== 目前以哪張網卡為主要網路服務提供者! MII Status: up MII Polling Interval (ms): 100 <== 多久偵測一次網卡連線有問題否 (單位毫秒) Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth1 MII Status: up Speed: 1000 Mbps <== 這張網卡的速度有多快? Duplex: full <== 是否為全雙工/半雙工 Link Failure Count: 0 <== 這張網卡連線曾發生過幾次錯誤? Permanent HW addr: 00:1b:21:3e:8c:47 Slave queue ID: 0 Slave Interface: eth2 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:07:e9:5e:2d:76 Slave queue ID: 0 ....(底下省略).... |
雖然說 Linux bonding 有很多好處,但是它並不是萬靈丹!某些場合底下還是無法增加頻寬的!很多文件都沒有寫到這點,或者是雖然有帶到,但是卻沒有特別強調! 因此,鳥哥一開始利用 bonding 來增加虛擬機器的頻寬時,曾經遭遇到非常多的問題,導致有一陣子有點厭惡 bonding 哩~就是沒有搞清楚的原因啦! 那就來讓大家搞清楚一點好了!來看看吧!
另外,鳥哥用過最簡單而且效能最好的應該是 mode 6 這個模式!簡單好用,又不用重新設定 switch,缺少網卡就疊上去,非常簡單! 所以,有興趣的伙伴們,可以使用這個模式來製作一下,應該可以得到不錯的效果呦!
我們知道 gigabit 網路卡的理論極限速度可以到達大約 120Mbytes/s 的檔案傳輸量。不過,由於 gigabit 網路卡設計的插槽介面的差異,速度落差非常大喔! 鳥哥去年 (2012) 為了研究上面的需求,又因為要買比較便宜的 GB 網卡 (沒有錢作大量研究啦),因此購買了數十張的 Intel PCI 介面的網卡,原本想說,PCI 的傳輸率為 32bit * 33MHz => 1000 Mbits/s ,這與 GB 網卡的速度應該是差不多才對!沒想到實際應用之後,可能 PCI 介面的傳輸已經快要飽和, 所以測試出最快的 PCI 傳輸率大約只到 70Mbytes/s 而已,與理論值也差太多了...
後來還是為了經費,所以還是買了比較便宜的 PCI-E 1X 一倍數的網卡,只是沒想到,這個 PCI-E 的 GB 網卡 (用的是螃蟹卡晶片組) ,效能隨隨便便就可以上 90~100 Mbytes/s,與 Intel 的 PCI-E 1X 的 105~110 Mbytes/s 差異沒很大,但跟 PCI 介面也差太多了!因此,建議如果想要使用 bonding 時,最好所有的網卡速度能夠差不多比較妥當!不要使用 PCI-E, PCI 介面混插,不然好像效果會沒很好,因為這與 bonding 的主控 slave 網卡找到哪一張有關~
那怎麼測試效能呢?過去鳥哥都習慣使用 NFS 然後一堆用戶端掛載伺服器後,用力的 dd 下去!後來發現,這樣的測試方法不太準確,因為都卡在磁碟的效能上~測不出網路效能。 因此,如果想要測試 bonding 到底有沒有效果,你可以這樣實驗看看:
這個測試中,因為伺服器的大檔案僅提供用戶端讀取,並沒有寫入。如果你的記憶體夠大 (超過 4G 以上),這個檔案將被記憶體快取住!此時,所有傳輸將不會再次的讀取硬碟了。 而你在用戶端使用 dd 讀入大檔案後直接丟入垃圾桶 (/dev/null) ,這樣用戶端也沒有用到磁碟讀寫,如此就可以單純的去測試網路效能了。
在鳥哥的測試中,四部主機同時跑時,由於鳥哥用了三 GB 網卡作 bonding,此時將會有兩部主機共用一張網卡,所以有兩部主機速度可達 80~90Mbytes/s,另外兩部僅能到達 60Mbytes/s 而已。 不過,這樣也差不多有 70~80% 的理論速度啦!還算很 OK 的啦!
整理完伺服器與區域網路內的網路頻寬問題後,再來就是得要處理處理區域網路內的整體網路參數啦!在鳥哥本章的案例中,我們用的是圖 1.2-3 裡頭的環境,因應該環境所在的教室編號,所以鳥哥使用的是 192.168.42.0/24 這一段私有網域啦!在鳥哥的習慣上,會使用最後一個可用 IP 作為路由器設定,因此,鳥哥這部伺服器對內的 IP 就會是 192.168.42.254 囉。另外,本教室對外的那個 IP 我們就假設為 1.2.3.4/24 ,Gateway 就設為 5.6.7.8 (詳細的對外 IP 就得要詢問貴中心囉)。
另外,在伺服器架設篇當中,我們提到通常區域網路的主控電腦防火牆中,對內部的主機管理會比較鬆散,對外則比較嚴格。不過,由於這是個電腦教室環境,啥時會有人來惡搞,你也不知道, 也就是說,對內的防火牆設定恐怕也得思考才行!不能隨便通通放行的!底下我們就來談一談吧!
其實網路參數設定在本案例中,就僅有 eth0 與 bond0 需要設定而已,其中 bond0 已經在前一個小節裡面談過了。至於 eth0 這個對外的 IP 設定,你只要注意到 IP, Netmask, Gateway 必須要跟你的 ISP 取得正確的資料來設定即可,並沒有什麼難處啊!不過這裡得要特別強調一下,希望不要啟動 Network Manager 這個網路管理模組, 否則常常會出現一些奇奇怪怪的問題喔~
# 1. 先設定好 ifcfg-eth0 設定檔吧!ifcfg-bond0 請參考上一小節的設定: [root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" HWADDR="00:26:18:C3:7D:21" NM_CONTROLLED="yes" ONBOOT="yes" IPADDR=1.2.3.4 <== 重點是改這三行! NETMASK=255.255.255.0 GATEWAY=5.6.7.8 # 2. 設定好 DNS server 的設定: [root@centos ~]# vim /etc/resolv.conf nameserver 120.114.150.1 <== 先用教室所在處的崑山科大的 DNS 伺服器!這未來會變喔! nameserver 120.114.100.1 # 3. 關閉 Network Manager 之後,重新啟動網路並觀察: [root@centos ~]# /etc/init.d/NetworkManager stop <== 立刻關閉 [root@centos ~]# chkconfig NetworkManager off <== 重新開機也不會啟動 [root@centos ~]# chkconfig NetworkManager --list NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@centos ~]# /etc/init.d/network restart [root@centos ~]# ifconfig <== 看 IP/Netmask 對否 [root@centos ~]# route -n <== 看 GW 對否 [root@centos ~]# ping -c 3 5.6.7.8 <== 看與 GW 的連線正常否 [root@centos ~]# dig www.google.com <== 看 DNS 設定正確否 # 建議上面的檢查步驟請每次設定完網路且重新啟動後,一定要進行一次!避免出現問題啊! |
還記得伺服器篇裡面說過嗎?針對你開放的網路服務來說,防火牆其實一點用處也沒有~那如何強化你的網路服務呢?最簡單的想法就是『更新到最新版本!』 雖然對某些強調酷炫的 Linux distribution 來說,升級到最新的版本不見得是有修補漏洞的結果,但針對企業版的 CentOS 來說,更新到最新版,確實就有一定程度的保護力。
考慮到中小企業對外網路頻寬可能原本就不夠啊,因此,找一個最靠近你的映射站是很重要的!以崑山科大來說,我們學校有提供 FTP 服務,且 FTP 裡面就有 CentOS 的映射資料了!當然就選擇校內的網址為優先!如果你是非崑山校內的機器,那就建議使用國家高速網路中心的 FTP 囉!
# 如果是在崑山科大校內,那就使用校內的 FTP 伺服器了: [root@centos ~]# vim /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-$releasever - Base baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/6/os/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 [updates] name=CentOS-$releasever - Updates baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/6/updates/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # 建議就保留這兩個,其他的都先殺掉或者是加上 enabled=0 的設定來暫時不使用! # 如果不在崑山科大,但是在台灣本島,那就使用國家高速網路中心吧! [root@centos ~]# vim /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-$releasever - Base baseurl=http://ftp.twaren.net/Linux/CentOS/6/os/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 [updates] name=CentOS-$releasever - Updates baseurl=http://ftp.twaren.net/Linux/CentOS/6/updates/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # 選擇好你的 YUM 軟體倉儲來源後,開始更新系統啊!依據 CentOS 版本不同,速度會有差異! [root@centos ~]# yum clean all [root@centos ~]# yum -y update # 開始一堆升級程序!這裡鳥哥就略過不寫了! [root@centos ~]# vim /etc/crontab 10 0 * * * root /usr/bin/yum -y update <== 每天凌晨 12 點進行一次自動更新!! |
更新了軟體之後,還得要記得,不用的軟體最好將他關掉!不但節省系統資源,也能夠避免某些忘記關掉的網路服務被攻擊!那麼哪些服務可以關閉呢? 這就得要看您的環境而定了,並沒有一定的規範~不過,鳥哥通常喜歡用『 netstat -tlunp 』這個指令來查出目前有啟動於 TCP/UDP 監聽的服務, 然後再去 /etc/init.d/* 找到相對應的啟動腳本,進入該腳本去查詢該功能為何,如果該功能真的不需要,那就予以關閉,如果不知道是啥咚咚,通常會先保留啦!
[root@centos ~]# vim close_service.sh #!/bin/bash services="NetworkManager autofs avahi-daemon certmonger cups kdump rpcbind rpcgssd rpcidmapd nfslock" for service in ${services} do chkconfig ${service} off /etc/init.d/${service} stop done # 將不需要的服務一個一個關掉~請依您的需求寫入上頭的 services="" 雙引號內即可! # 完全照上面的抄寫時,可能會有某些不存在的服務,發生一些錯誤也沒關係~ [root@centos ~]# sh close_service.sh |
在更新系統完畢且關閉不必要的服務後,如果你從來沒有更新過,或者是好長一段時間忘記更新了,那可能就得要重新開機 (reboot)!原因是, 你的系統核心可能已經被更新過,核心升級一定要重新開機才能選擇新核心,否則升級的核心是不會被使用的!這與一般軟體不太一樣喔!注意注意!一般來說, 更新完畢後如果有:(1)核心與 (2)重大軟體函式庫 (例如 glibc, openssl 等軟體) 時,就一定要重新開機!否則呼叫這些函式庫的軟體並不會使用新的函式庫功能之故!
前面稍微提到,我們的重點是想要讓這部伺服器針對內網提供一堆服務~不過又擔心被內網的使用者搞破壞~所以,針對 Internet 應該要嚴格限制, 但對於內部網路而言,還是僅開放要讓使用者連線的服務之埠口即可!沒必要全部放行啦!我們這部伺服器『並不針對 Internet 放行任何服務』,不過, 由於管理者可能會從另一段區域網路連進來,因此可能還是得要設定信任 IP 給網際網路連進 port 21, 22, 80 來進行測試才行啊!預計的伺服器對內、對外服務以及信任 IP 分別是:
針對上述功能,鳥哥拿伺服器架設篇的簡易防火牆來進行修改,並將整個腳本再簡化,得到如下的結果:
[root@centos ~]# vim iptables.sh #!/bin/bash # 先設定好本腳本所需要的各項參數: nic_out="eth0" <== 對外部連線的網卡代號 nic_in="bond0" <== 對內部連線的網卡代號 trust_ip="1.2.3.4/24,4.3.2.1" <== 來自外部連到本伺服器的信任 IP # 底下 6 行在清除規則與設定預設防火牆政策 iptables -F iptables -X iptables -Z iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT # 底下三行放行伺服器本機所需要的網路封包 iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT # 底下數行是針對內網開放各式服務!請參考上述說明,就知道這幾個 port 的意義為何了! iptables -A INPUT -i ${nic_in} -p tcp -m multiport --dport 21,22,53,80,3128 -j ACCEPT iptables -A INPUT -i ${nic_in} -p udp -m multiport --dport 53,67,69 -j ACCEPT iptables -A INPUT -i ${nic_in} -p tcp -m multiport --dport 111,2049,901:904 -j ACCEPT iptables -A INPUT -i ${nic_in} -p udp -m multiport --dport 111,2049,901:904 -j ACCEPT iptables -A INPUT -i ${nic_in} -p udp --dport 9000:9001 -j ACCEPT iptables -A INPUT -i ${nic_in} -j REJECT # 針對外部來的信任 IP 網段之設定! iptables -A INPUT -i ${nic_out} -p tcp -m multiport --dport 21,22,80 -s ${trust_ip} -j ACCEPT # 清除內部要連到外網的 SNAT 功能!並設定好 IP 偽裝,後面幾行則是保留給未來使用的! iptables -t nat -F iptables -t nat -X iptables -t nat -Z iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j MASQUERADE #iptables -t nat -A PREROUTING -s 192.168.42.0/24 -p tcp --dport 80 -j REDIRECT \ # --to-ports 3128 #iptables -t nat -A PREROUTING -i ${nic_out} -p tcp --dport 8080 -j DNAT \ # --to-destination 192.168.42.40:80 /etc/init.d/iptables save <== 這行加上去,自動儲存防火牆規則! [root@centos ~]# sh iptables.sh [root@centos ~]# vim /etc/sysconfig/iptables-config IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp" # 找到上面這行,將內容加上兩個可以讓 FTP 順利運作的模組呦! [root@centos ~]# /etc/init.d/iptables restart # 不要忘記還得要啟動核心轉遞的規則才行呦! [root@centos ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 <==將這一行的 0 改成 1 即可! [root@centos ~]# sysctl -p |
這樣就整個處理完畢囉!有夠好簡單吧! ^_^!不過由於你開放內網與信任網段的 ssh 連線,這裡鳥哥也是要建議您,/etc/ssh/sshd_config 這個設定檔中, 針對 root 是否可以登入的項目部分,最好是設定為 no,不讓 root 登入為宜喔!
區網的硬體網路頻寬搞定、伺服器本身的網路參數搞定,再來要幹嘛?當然是區域網路內部用戶端的網路參數分派啦!用戶端取得的網段為 192.168.42.0/24, 至於 Gateway 則是伺服器本身內網的 IP (192.168.42.254),那 DNS 呢?
大家知道,很多軟體都會去反向檢查 DNS 的反解~我們知道 192.168.42.0/24 是私有 IP 的網段,因此,當有內部網路連線的需求時,如果沒有加上反解的確認, 在達成連線的時間會比較久~為解決這問題,因此鳥哥的伺服器也會提供 DNS 的服務,因此,用戶端取得的 DNS 也是咱們這部伺服器的 IP 喔!
老實說,這件示範教室還挺有趣的,因此很多會議或研習都會在這裡舉行,因此,很多時候,伙伴們都會攜帶筆電或者是其他行動裝置來這裡上網~一聽到這種模式,當然 DHCP 自動分配 IP 是最簡單的!不過,由於這間教室平時是電腦教室課程來上課的,老師們喜歡固定座位有固定的 IP,這樣也比較好管理啊!也就是說,這間教室在桌上型電腦的部分, 希望是固定 IP 的分配,但是額外還會提供一些 IP 來給行動裝置使用的。
鳥哥的規劃是,自動分配的是 192.168.42.101~192.168.42.200 這 100 個可用 IP,至於 192.168.42.1 到 192.168.42.100 則保留給教室內的固定終端設備使用。 但這間電腦教室共有 62 個裝置ㄟ!包括 61 部主機以及一部印表機。如果要每部主機都去登記網卡的 MAC 再來伺服器設定 dhcp 設定檔,真的很頭昏~因此,固定 IP 的部分, 我們透過的方式,是先去用戶端電腦啟動一個 Linux 系統,將該 Linux 系統手動設定 IP (ifconfig eth0 192.168.42.X),然後透過 ARP 的指令去偵測 IP 與 MAC 的對應, 最終寫入設定檔即可。這樣可以避免抄錯卡號,在實作上面也比較能夠相信實際座位與主機 IP 的對照表!
在你完成後面幾章才會談到的 kickstart 大量部署 Linux client 端作業系統後,教室內每部電腦都會有一個可用的 Linux 系統,登入他,用上述的方法實作, 然後執行下列的功能來取得每部電腦的 MAC 吧!
[root@centos ~]# vim getmac.sh #!/bin/bash read -p "How many PC's in this class (31, 54, 61)? " num if [ "$num" != "" ]; then for site in $(seq 1 ${num}) do siteip="192.168.42.${site}" allip="$allip $siteip" ping -c 1 -w 1 $siteip > /dev/null 2>&1 if [ "$?" == "0" ]; then okip="$okip $siteip" else errorip="$errorip $siteip" echo "$siteip is DOWN" fi done [ -f getmac.conf ] && rm getmac.conf for site in $allip do pcname=pc$(echo $site | cut -d '.' -f 4) mac=$(arp -n | grep "$site " | awk '{print $3}') echo " host $pcname {" echo " hardware ethernet ${mac};" echo " fixed-address ${site};" echo " }" echo " host $pcname {" >> getmac.conf echo " hardware ethernet ${mac};" >> getmac.conf echo " fixed-address ${site};" >> getmac.conf echo " }" >> getmac.conf done else exit 0 fi echo "You can use getmac.conf (this directory) to modified your /etc/dhcp/dhcpd.conf" echo "Finished." [root@centos ~]# sh getmac.sh How many PC's in this class (31, 54, 61)? 4 host pc1 { hardware ethernet 52:54:00:ac:30:56; fixed-address 192.168.42.1; } ....(底下省略).... You can use getmac.conf (this directory) to modified your /etc/dhcp/dhcpd.conf Finished. |
最終你會在該目錄中取得一個名為 getmac.conf 的檔案,將裡面的資料貼上 dhcpd.conf 即可。但是,dhcpd.conf 內容要怎麼製作呢?我們用最陽春的方式來設定他! 而且,預計每部主機的名稱會是 pcX.i4502.dic.ksu ,其中 i4502 就是我們這間電腦教室的編號!
[root@centos ~]# yum -y install dhcp [root@centos ~]# vim /etc/dhcp/dhcpd.conf ddns-update-style none; default-lease-time 259200; max-lease-time 518400; option routers 192.168.42.254; option broadcast-address 192.168.42.255; option domain-name-servers 192.168.42.254; subnet 192.168.42.0 netmask 255.255.255.0 { range 192.168.42.101 192.168.42.200; option subnet-mask 255.255.255.0; option domain-name "i4502.dic.ksu"; # 從這行底下的,都是剛剛 getmac.conf 的內容抓過來使用的! host pc1 { hardware ethernet 52:54:00:ac:30:56; fixed-address 192.168.42.1; } ....(中間省略).... } <== 不要忘記這個大刮號! [root@centos ~]# /etc/init.d/dhcpd restart <== 立刻啟動 [root@centos ~]# chkconfig dhcpd on <== 下次開機也會啟動 [root@centos ~]# vim /var/log/messages <== 重點是看一下登錄檔有沒有順利啟動 |
你沒有看錯喔!這樣就結束了!更多 DHCP 相關的介紹,請參考伺服器篇的相關內容吧!
如果你真的很有伺服器課程的經驗時,那偶而可能會發現,在比較高階 switch 的教室環境中,介紹如何自動取得 DHCP 網路參數的課程時,讓學生重新取得 IP 的速度怎麼會這麼慢? 大概得要等個十幾秒到半分鐘左右!怎麼會這樣?明明都是 gigabit 的網路速度了!不可能這麼慢吧?其實,這是由於 switch 為了要避免某些呆瓜不小心讓 switch 之間連線錯誤, 導致迴圈 (loop) 來造成廣播風暴,最終讓整個區網的網路停止的問題,而增加的 STP (Spanning Tree Protocol) 這個通訊協定的問題。
我們在前面的小節裡面談到 LACP 之前,曾經說過,有兩部 switch 之間如果沒有做好一些通訊協定的設定,直接拿兩條網路線同時串接起來,switch 之間可能就會產生廣播風暴, 造成整個 switch 的停頓。那個廣播風暴的成因就是 switch loop (交換器內部封包迴圈問題)。那你會說,好!我知道了,為了避免這個問題,每個 switch 之間都最多串接一條線就好! 這樣總不會出問題了吧?很可惜,還是會出錯!怎麼回事?找個案例好了,如下圖所示:
每間電腦教室都已經串接在一起,主要透過教室 A 來跟其他兩個教室的 switch 串接。有個同學來這個環境後,想說,那我能不能直接將教室 B 與教室 C 串在一起, 實體線路串在一起比較快嘛!所以,拿了條網路線就直接串在一起啦!如上圖所示的環境。這時,有沒有看到一個圈圈啊!這就形成一個迴路 (Loop)!這個時候就會產生廣播風暴了! 沒有人是故意的!問題是,如果線拉的夠長,就有可能會出現這個情況啊!理解乎?
為了解決這個問題,因此,國際組織就核定了 STP (Spanning Tree Protocol) 這個通訊協定!這個通訊協定的目的,就是在於解決 switch loop 的問題! 透過的解決方式是:『讓產生 loop 的埠口中,找出最無關緊要的那條線,讓那條線中斷 (down) 』就解決了!但這裡就產生幾個問題要處理:
更詳細的 STP 相關介紹可以參考文末的參考文獻的資料,這裡不再重複。你要問的問題是,那為何 STP 會影響 DHCP 呢? 由於 switch 會偵測 switch 之間是否有產生 loop 的情況,因此當你在某個埠口安裝一部主機後,這部主機的網路使用權大約得花 30 秒鐘才能夠啟動。 那當你重新取得 IP 時,某些 swtich 就有可能誤判你這個 switch port 有重新被調整過,為了避免 loop,於是他就進入檢測狀態,一般得要花 30 秒鐘才能夠偵測完畢啊!
所以,為了節省不必要的等待時間,你可以:
如同在 LACP 設定的小節裡面談到的,鳥哥管理的這間電腦教室目前使用的是舊式的 switch,過去全部的埠口都啟用 STP 的預設設定時,dhcp 的延遲非常嚴重! 很多同學甚至會發生 DHCP timeout 的慘劇,導致無法取得 IP 來進行上課!這真是非常的杯具啊~(喝茶去)~後來問了崑山科大計中的羅豐彬組長,這才發現有可能是 STP 這玩意兒的影響! 相當感謝羅組長大人的提醒啊!
之前我們是將 STP 整個關閉的,不過,STP 既然可以避免 switch loop 的狀況,那,在做成 LACP 的那幾個埠口,應該還是開啟一下 STP 比較好!同時, 為了降低 DHCP 的延遲,因此鳥哥將整個 STP 的收斂時間設定的比較短些,因此目前 DHCP 的 IP 參數取得,大約是在 10 秒鐘內可以順利完成!算是可接受的範圍內啦! 底下還是使用 ZyXEL 的交換器來作個簡單的示範吧:
如上圖所示,按下 1 號箭頭『 Spanning Tree Protocol 』的設定後,再按下右上角的『 Configuration 』進入設定環境中!如下圖所示:
為了避免用戶端電腦透過 LACP 的線路向 server 要求 DHCP 服務而有延遲現象的狀況,所以我們是將這個 STP 的許多收斂時間整個縮小了!基本上,Hello Time 保留 2 秒鐘, Max Age 則從 20 秒修訂為 7 秒,Forwarding Delay 則由 15 秒縮減為 5 秒,這樣的設定完成之後,用戶端取得 DHCP 的時間可大幅的從 timeout 的悲劇性狀況, 變成小於 10 秒內完成的可接受範圍內。這個是整體設定,那設定僅將 STP 開放於 LACP 埠口上的情況,就得要針對每個埠口來調整,如下:
如上圖所示,我們僅針對有設定 LACP 的埠口作 STP 的設定而已。其實如果修改了上面的時間參數,全部的埠口啟動應該也還 OK 沒問題~ 不過如果沒有調整 STP 的收斂時間,那你的 DHCP 恐怕會很慢!
區域網路的 DNS 設定那就簡單了!重點是你務必要有正解與反解~因為『反解』才是我們要作內部區網 DNS 的主要原因啊!再重複一次我們預計要處理的網域名稱對應:
其實,整個 DNS 的設定與注意事項,都在伺服器篇裡面談過了,這裡僅是很快速的將我們所需要的環境,如果你需要每個設定項目的詳細說明,就請參考伺服器篇裡面的 DNS 吧!那就讓我們開始來處理囉!只要兩個 domain,一個正解的 i4502.dic.ksu,以及一個反解的 192.168.42.254 即可!
[root@centos ~]# yum install bind bind-chroot [root@centos ~]# vim /etc/named.conf options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion yes; }; zone "." IN { <== 一定要存在的項目 type hint; file "named.ca"; }; zone "i4502.dic.ksu" IN { <== 這是正解的相關設定 type master; file "named.i4502.dic.ksu"; }; zone "42.168.192.in-addr.arpa" IN { <== 這是反解的相關設定 type master; file "named.192.168.42"; }; |
[root@centos ~]# cd /var/named [root@centos named]# vim named.i4502.dic.ksu $TTL 86400 @ IN SOA @ root ( 20130401 1D 1H 1W 3H ) @ IN NS @ @ IN A 192.168.42.254 server IN A 192.168.42.254 pc1 IN A 192.168.42.1 pc2 IN A 192.168.42.2 ....(中間省略).... pc199 IN A 192.168.42.199 pc200 IN A 192.168.42.200 [root@centos named]# chmod 640 named.i4502.dic.ksu [root@centos named]# chown root.named named.i4502.dic.ksu |
[root@centos named]# vim named.192.168.42 $TTL 86400 @ IN SOA server.i4502.dic.ksu. root.server.i4502.dic.ksu. ( 20130401 1D 1H 1W 3H ) @ IN NS server.i4502.dic.ksu. 254 IN PTR server.i4502.dic.ksu. 254 IN PTR i4502.dic.ksu. 1 IN PTR pc1.i4502.dic.ksu. 2 IN PTR pc2.i4502.dic.ksu. ....(中間省略).... 199 IN PTR pc199.i4502.dic.ksu. 200 IN PTR pc200.i4502.dic.ksu. [root@centos named]# chmod 640 named.192.168.42 [root@centos named]# chown root.named named.192.168.42 |
[root@centos ~]# /etc/init.d/named start [root@centos ~]# chkconfig named on [root@centos ~]# vim /etc/resolv.conf nameserver 127.0.0.1 <== 注意!這要在上面才對!才會用到自己的 DNS! nameserver 168.95.1.1 [root@centos ~]# vim /var/log/messages Apr 1 12:14:53 centos named[2212]: zone 42.168.192.in-addr.arpa/IN: loaded serial 20130401 Apr 1 12:14:53 centos named[2212]: zone i4502.dic.ksu/IN: loaded serial 20130401 Apr 1 12:14:53 centos named[2212]: managed-keys-zone ./IN: loaded serial 0 Apr 1 12:14:53 centos named[2212]: running # 要看到如上圖的特殊字樣才好! [root@centos ~]# dig server.i4502.dic.ksu [root@centos ~]# dig pc1.i4502.dic.ksu [root@centos ~]# dig -x 192.168.42.254 [root@centos ~]# dig -x 192.168.42.1 # 要有出現個別的 IP 以及個別的主機名稱才是對的! |
進行到這一步,你的整個區網內部網路連線,應該是有備援的穩定,以及合併頻寬的優點~接下來的章節,就讓我們來搞一搞怎麼大量部署內部網路的用戶端吧! 期待下一章的內容吧! ^_^
其實,這整篇文章最重要的地方在講一個概念,那就是我們的區域網路使用 1Gbits/s 的流量已經不夠用了!尤其是在需要較大頻寬的電腦教室或中小型企業環境下。 這時就得要進行一些手腳才能夠讓區網的頻寬給予提升!所以才會談到 LACP 以及 bonding 等功能。此外,未來的世界裡面,非常多的虛擬化啊!這些虛擬化的伺服器, 最可怕的地方在於檔案系統的跨網路存取,恐怕連 10G 都無法解決虛擬化的大頻寬需求!這時,很多上面用到的技術就值得來練習囉!
這篇文章也很感謝鳥哥的學生們,包括吳虹霖、劉俊睿幫忙查詢 LACP 以及 Cisco 的 switch 設定模擬,蘇偉哲、施譯其、林佳辰等人協助區域網路的線路設置, 還有其他的同學們,感謝妳們喔!
另外,上面的實作中,其實最簡單的是伺服器的設定,最麻煩的地方在於網路線路的配置!實際動工過,您就知道鳥哥為什麼這麼講了! 所以,如果對自己的施工沒有信心,記得一定要請專家來配線!因為,線路一配下去,一用就是十數年~留心!留心!注意!注意!