16 一月 2013

Linux VLAN 802.1Q 與 Cisco 路由及交換器介接設定

Linux VLAN / Linux 802.1q 之設定與 Cisco 設備介接

Linux VLAN / Linux 802.1q 與 Cisco 設備的介接關係與設定 文◎奇科電腦資深網路技術顧問 – Ben哥 及 CCIE 講師群共同編撰

利用 VLAN/802.1Q 技術建立Linux VLAN 與Cisco 設備之間的完善互動!

technum_02前言

基本上,對於一個剛進IT的領域的初學者(rookies),其所學習的領域可以概括網路、系統、以及程式設計,每一個領域都需要相當的時間去熟悉,並且在IT業界中的面試分類,通常也是根據這三類來應徵人員,因此,在業界十幾年的我們,往往看到,非常熟悉網路的工程師不熟系統及程式設計,非常熟悉系統的工程師不熟網路及程式設計,非常熟悉程式設計的工程師不熟網路及系統;原因是當一頭栽進一個領域的時候,如要轉換到另一個領域時,幾乎就是重新開始,有多少人有辦法承受原本的高薪變為低薪,原本受人尊重的經驗變成一文不值,因此,轉換跑道的機率就漸漸降低了。

廢話不多說,總而言之,如果在IT業界要往上爬的話,對網路、系統、程式設計此三項領域深入了解,是不可或缺的條件。

有鑒於在台灣對於網路以及LINUX深度結合的文章並不多,因此Ben哥以及奇科電腦教育的學員們特別就Linux VLAN ( aka Linux 802.1q )在LINUX設備上的運用,以上課內容為基礎並輔以圖文表現的方式,務求各位讀者能夠完全了解其設定方式,以及與CISCO設備的連結方式與技巧。

本技術文件實驗所需的設備清單如下:

  1. LINUX機器乙台 (需要有乙太網路卡100Mb/s以上)。
  2. CISCO 2950系列第二層交換器。
  3. 乙太網路線乙條。

Vlan-lab-needed-equipment-pcs-switches-cables

technum_02何謂VLAN(虛擬區域網路)

VLAN( Virtual LAN )就是能夠在乙太網路交換器、第三層交換器 (Layer 3 Switch)、路由器、或是其他支援VLAN的設備中,區隔區域網路的一種方式。如果我們以IEEE的定義來解釋VLAN或許過於生硬及不易了解,所以,我們使用較為生活化的方式來解釋VLAN的意義;我想早期讀者們要做網路連結,都用過集線器(HUB),集線器的功能就是傳遞或是加強電氣訊號,也就是以OSI七層定義中的第一層(物理層)為基礎的設備,現在已經鮮少出現在市面上了,取而代之的是所謂的集線交換器(SWITCH HUB),也就是最基本的交換器,那為什麼要稱為SWITCH HUB呢?原因無它,跟科技一點關係也沒有,純粹是在行銷上的一種名詞定義,在此不多作贅述,在我上課的時候常常遇到學生問道,那麼SWITCH跟HUB有什麼差異呢? 剛剛我們已經對HUB做了一個最簡單的定義了,SWITCH的定義就是它可以了解OSI七層中第二層(資料鏈結層)的資料,簡單來說,也就是它能夠學習及記憶連接機器的MAC(Media Access Control)位址,根據MAC位址來過濾封包的目的(Forwarding/Filtering),進而提升連接機器們之間的傳輸效率。

那麼各位讀者如果有使用過以上所提的產品,有沒有發現到每台連接的機器必須要在同一個區域網路(network)下,才能進行資料交換,因此,當我們想要在一台HUB或是SWITCH HUB能夠擁有兩個或是兩個以上完全獨立的區域網路時,是沒有辦法達成的,一般的解決方案是使用兩個或是兩個以上的HUB或是SWITCH HUB來解決;因此,支援VLAN的交換器便提供了以一台設備,能夠完全區隔多個區域網路的功能。舉例來說,CISCO的小型交換器:2950、3550、3650、3750等系列的交換器,一台最多可以超過50個連接埠,而每個連接埠都可以被設定為不同的區域網路,在這個例子裡就表示有50個以上VLAN存在於此交換器中,並且可以藉由VLAN的標準與不同廠牌的交換器,透過trunk連線達成資料交換。

technum_03認識802.1Q

IEEE Standards for Local and Metropolitan Area Networks: Virtual Bridged Local Area Networks文件編號為802.1Q-1998,於西元1998年12月8日定稿,明確地定義了”虛擬橋接區域網路”(Virtual Bridged LANs)的架構,及其所提供的服務,另外,也詳細說明了服務所需要的其它協定(protocols)以及演算法(algorithms)。

因此,在IT業界裡,常常使用專有名詞802.1Q以及VLAN協定,來代表VLAN的功能。因此,當有人談到802.1Q就等於再說VLAN,談到VLAN就等於在說 802.1Q,基本上 802.1Q 最大的用處是在乙太網路框架(Frame)的表頭上加上一個標記(Tag),用來分辨來自不同VLAN的封包。

technum_04準備LINUX的設備

VLAN在IT業界的應用極廣,幾乎所有中高級網路或是電腦設備都有此項功能,除了使用硬體ASIC (Application-Specific Integrated Circuit) 支援VLAN功能的設備以外,VLAN亦可以以軟體的方式安裝於作業系統,進而提供不同作業系統擁有VLAN的功能,例如在微軟視窗系統上,Intel網路卡的驅動程式即支援VLAN,在LINUX的系統中,只要所使用的核心支援VLAN的話,則是不管使用哪一種網路卡都可以,現在讓我們來看看VLAN的功能位於核心選項的哪個位置,以下是使用LINUX核心2.4.31版的make xconfig的選項畫面。

Linux-kernel-setup-manual

VLAN的選項是在”Networking options”這個項目中,點擊進去後用捲軸往下拉,就可以看到 Linux 802.1Q VLAN選項畫面,請各位點擊一下”Help”稍微了解一下VLAN的訊息可在何處取得,以及需使用哪個命令設定VLAN。

Linux-kernel-enable-vlan-8021q-option

在這裡,我們設定VLAN功能為模組,因此,額外提一下,如果Linux VLAN 模組還沒載入核心,可能無法由命令dmesg的輸出,或是檔案/var/log/messages的內容得知此核心是否支援VLAN的功能;核心模組編譯完成後,802.1Q模組的檔案名稱為”8021q.o”

說到這裡,各位已經了解首先必須確定我們所用的核心是否支援 Linux VLAN( Linux 802.1q )的功能,可以經由三種方式查證,一、使用dmesg命令,二、查看/proc/net/vlan的目錄是否存在。

一、命令dmesg搭配grep所得出的輸出訊息。

在核心沒有提供VLAN功能的時候,”dmesg | grep –i 802”是不會出現任何802.1Q的輸出。

在核心有支援VLAN功能的時候,應該出現以下的輸出。

Linux-kernel-dmesg-802.1Q-verified

二、/proc/net/vlan 的存在與否。

在核心沒有提供VLAN功能的狀況下,目錄/proc/net/vlan是不會存在的,如下圖所示。

Linux-kernel-vlan-802.1Q-not-activated

在核心有支援VLAN功能的狀況下,應該出現以下的輸出。

Linux-kernel-modprobe-8021q-activated

截至目前為止,我們已經學習了如何判斷核心是否支援VLAN功能,接下來我們看看如何把802.1Q的模組載入核心:使用模組命令modprobe來載入”802.1q.o”模組,並且用命令lsmod確認模組已經被載入核心,如下圖所示。

Linux-kernel-verified-802.1Q-vlan

好了,確定我們的現在所使用的核心已經支援VLAN功能的話,接下來就是設定的時候了,一般我們安裝LINUX的過程中,都會安裝VLAN相關命令”vconfig”,如果沒有的話,可以安裝相關的rpm套件(套件名稱通常以vconfig開頭,例如:vconfig-1.6-2.i386.rpm) ,另外,我們可以從 Linux 802.1q/VLAN官網 下載原始碼使用,目前最新的版本為1.9版。現在我們來看看vconfig的選項以及使用方法為何,只需執行vconfig即可,如下圖。

Linux-802.1Q-vlan-command-vconfig

VLAN是以數字作為編號的,也就是所謂的VLAN ID,使用的方法非常的簡單,只需一行命令就可以建立一個VLAN。

VLAN介面的形式為<網路卡介面>‧,這裡請特別注意網路卡介面與VLAN ID之間是一個句點,有別於IP Alias的冒號 (:) ,假設我們要在eth0的介面卡上設立VLAN介面的話,有以下兩點必須注意:
A) 介面卡eth0必須是up的狀態,也就是說當我們執行ifconfig時可以看到eth0,如果沒有的話,亦可以使用命令行”/sbin/ifconfig eth0 up”達成目的。
B) 特別重要的是,介面卡eth0不能?IP位址,只有VLAN介面卡可以被設定IP位址,等一下,我們會詳細的介紹如何對VLAN介面設定IP位址。

請看以下圖示,說明了如何設定VLAN在LINUX的介面卡上,首先我們啟動eth0界面卡,然後觀察eth0是否有IP位址,請特別注意,介面卡eth0並沒有IP位址,接下來就使用命令vconfig建立一個VLAN,其VLAN ID為6,看看/proc/net/vlan目錄下有何變化,我們可以看到多出了一個檔案名為eth0.6,並且使用命令ifconfig來確定VLAN介面是否存在。

Linux-802.1Q-vlan-create-subinterface-eth0.6

一個實體介面卡上可以建立相當多的VLAN介面,我們現在來試試看如何配合command script來建立其它的VLAN。

Linux-bash-for-loop-create-802.1Q-vlan-vconfig-eth0.90

接下來就是對每一個VLAN介面設定IP位址,同樣的,也是使用command script來加速設定的過程。

Linux-ifconfig-assign-ipaddr-to-vlan-interfaces

我們增加了VLAN介面之後,接下來我們就談談如何移除VLAN介面,以下的圖示顯示了如何移除VLAN 6的命令,也就是使用命令vconfig的rem選項,再以VLAN介面為其引數即可。

Linux-802.1Q-vlan-vconfig-remove-vlan

以上就是在LINUX設備中所需要的設定以及設定方法。讓我們在觀念上再複習一次:

  1. 確認所使用的核心是否具備VLAN/802.1q的功能
  2. 選定LINUX設備上的介面卡
  3. 讓實體介面卡啟動並且確定沒有被設定IP位址
  4. 建立並啟動VLAN介面卡
  5. 對每一個VLAN介面卡設定IP位址
  6. 準備完成

technum_05CISCO Catalyst 2950/3550/3650/3750交換器的設定

我們剛剛再LINUX的設備上建立了九個VLAN,其ID分別為10、20、30、40、50、60、70、80、90,所以在網路設備上,我們也必須建立相同的VLAN ID才可以跟LINUX的設備界接,此次我們所使用的設備為CISCO 2950T-24的第二層交換器,以下為其所使用的作業系統版本別。

Cisco-switch-show-version-flash-c2950-i6q412-mz.121-13.EA1.bin

在這裡順道提一下,CISCO絕大部分的交換器及路由器所使用的作業系統稱為IOS(Internetwork Operating System),為CISCO的核心價值所在,CISCO的設備之所以能夠有市場佔有率達85%以上,IOS功不可沒,這也告訴了各位讀者,程式設計及系統調教的重要性,它們是活化產品極重要的主軸之一。

接下來我們來看看如何在IOS中建立VLAN,首先我們必須進入enable的模式,在enable的模式下才有設定的基本權限,看看目前這個交換器有哪些既有的VLAN,然後進入vlan database建立我們想要的VLAN,請看以下圖示。

Cisco-switch-show-vlan

我們可以看到在上圖所顯示的IOS命令輸出,並沒有包含我們在LINUX設備上所建立的VLAN ID,所以,我們必須先進入IOS的vlan database,建立這些VLAN,然後離開vlan database,如下圖所示。

cisco-switch-console-create-vlan

我們要讓CISCO交換器與LINUX設備界接,必須先選定一個連接埠,在這個交換器上,FastEthernet 0/22並未被使用,我們可以用這個連接埠來跟LINUX設備上的介面卡作界接;先來看看 FastEthernet 0/22的狀態如何,各位應該沒想到一個簡單的連接埠竟然有如此多的屬性及資訊可供參考,這也正反映了高級及一般網路設備之間,為什麼會有如此大之價差的原因之一;如下圖所示。

cisco-switch-console-show-interface

現在讓我們進入設定模式,可以於enable模式下使用IOS命令”configure terminal”進入設定模式,接下來可以經由命令”interface FastEthernet 0/22”進入FastEthernet 0/22的介面設定模式,這裡我們又可以看到單一連接埠可以設定的命令何其之多,一整頁都列不完;如下圖所示。

cisco-switch-interface-commands

接下來我們就要設定此連接埠為802.1Q的模式,如下圖所示。

Cisco-switch-console-trunk-allowed-vlan

以上就是在CISCO 2950交換器中所需要的設定以及設定方法,最後要記得在enable的模式下,使用命令”write memory”就可以儲存剛剛所做的設定。

讓我們在設定的觀念上再複習一次:
1) 先於vlan database 中建立所需的VLAN
2) 選定交換器上的連接埠
3) 設定連接埠的屬性為trunk並且指定VLAN 準備完成

technum_06結論

經過上面對於LINUX與CISCO設備的設定,我們成功的讓CISCO 2950交換器的 FathEthernet 0/22連接埠,可以正式的跟LINUX的介面卡(eth0)連接,並且以802.1Q的通訊協定進行資料傳輸了。

由以上的練習,我們不難看出CISCO有UNIX的陰影存在,Ben哥接觸過的知名設備不下百種,所有高階設備的作業系統皆以UNIX架構為基礎,為的就是穩定及效能,UNIX就好像是科學界中的物理一樣,為一切科學的基礎,網路設備的衍生,就如同電機從物理中特別提出來成為一門科學一樣,就是因為它需要特殊的發展之故;因此,Ben哥強烈建議系統已經熟的工程師,趕緊向網路知識邁進吧。

Ben哥非常高興有LINUX GUIDE這本雜誌的出現,讓很多有技術的人有個舞台及著力點,可以藉由LINUX GUIDE把一些LINUX技術及發展,即時的告訴LINUX的愛好者及廠商,相信會為台灣的LINUX發展有相當大的助益。

feebackbtn