根據最近的統計,Linux系統已經成為小型因特網服務供應商(1SP)采用的最流行的操作系統。盡管目前的Linux系統在易用性、應用軟件(辦公、圖形、游戲等)、軟硬件維護支持等方面與Windows系統相比仍然有一定差距,但在中小型企事業單位、小型ISP與ICP的網絡服務器應用領域中,Linux系統完全可以與Windows NT系統媲美而且工作更穩定。Linux系統特別適合作為一種因特網服務器平台,諸如實現因特網電子郵件服務、萬維網服務、路由支持、IP防火牆支持、撥號上網和更多的服務程序,通常都可以作為Linux操作系統經銷產品的一部分免費獲取。 本文的內容就介紹LINUX系統是如何發揮其中之一的網絡功能???利用安裝Linux系統的主機來實現網關的功能。本文不但介紹網關概念、理論,也介紹具體的配置,相信讀者能從中找到所需的東東。 概念、原理: 1、網關概念:網關是在使用不同通信協議、數據格式化結構、語言或體系結構的兩個系統裡,充當轉換器角色的計算機系統或其它設備。網關和網橋不一樣,網橋只在兩個系統之間傳遞數據,不執行轉換操作。網關重新打包信息,或者更改它的語法,使其符合目的地系統的要求。網關也可能是內部網絡和外部網絡的連接點。此設備從主機取出信息包,檢查其地址,並把他們傳遞到下一個路由器或主機系統。網關工作在OSI的應用層。 2、TCP/IP路由:路由決定一個分組從它的源通過網絡到達它的目的地所經過的路徑;它是網絡間傳輸信息的方法。路由協議有靜態路由、RIP、OSPF等。 3、靜態路徑表:由系統管理員事先設置好固定的路徑表稱之為靜態(static)路徑表,一般是在系統安裝時就根據網絡的配置情況預先設定的,當網絡結構的改變時需管理員手工改動相應的表項。 4、動態路徑表:動態(Dynamic)路徑表是路由器根據網絡系統的運行情況而自動調整的路徑表。路由器根據路由選擇協議(RoutingProtocol)提供的功能,自動學習和記憶網絡運行情況,在需要時自動計算數據傳輸的最佳路徑。 5、命令ping:它檢查網絡是否連通、並測試訪問計算機或網絡的反應速度的工具。ping所作的就是向目的主機發出一個名為Internet Control Message Protocol (ICMP) Echo Request packet的32個字節的信息包。ICMP信息包是特殊的IP控制信息,它用於在兩個主機之間發送網絡信息,然後,它將響應時間記錄下來。 當然,用戶還需要了解除了以上5項以外的網絡互聯的TCP/IP協議以及一些基本的理論,本文不再聱述。 開始工作: 在筆者所在單位的網絡結構中,存在兩個子網,其網絡地址分別是166.166.64.0和166.166.128.0,子網掩碼為255.255.192.0。要使屬於兩個子網中的計算機可以相互訪問,必須在兩個子網中間建立一個網關。筆者采用一台安裝了RedLinux系統的主機來作網關的Linux服務器,整個設置過程分“兩步走”。必須注意的一點是,以下命令的執行需要具有Linux系統的root權限。 1、 網卡配置 顯然,用作網關的Linux服務器需要安裝兩塊網卡,下面介紹兩塊網卡的配置。 在 Linux 中,第一塊網卡設備名為 eth0,以後依次為 eth1,eth2……。一般Linux能自動檢測到第一塊網卡首先。對於第二塊,一般只需在/etc/lilo.conf文件中的第一行加上這麼一句append=“ether=irq,io,eth1“ 就可以找到第二塊網卡了(irq,io填網卡的IRQ,IO,若填0,0可以自動測試)。 另外好多PCI的網卡kernel都能自動測到, 無需加內核參數。然後運行重啟lilo。在你重新啟動時, Linux就能識別你的第二個Ethernet網卡了。 在確省的情況下, 一般的Linux內核只檢測一個Ethernet網卡, 發現了第一個網卡後, 測試就中止了。 通常有以下三種不同的方法,讓Linux系統去檢測其余的網卡: A 在內核啟動時告訴內核網卡的設置參數; B 配置你的啟動裝載文件, 使得內核自動獲得這些參數; C 修改網卡測試表drivers/net/Space.c。 對大多數Linux用戶來說, 第二種方法是最合適的——用你的啟動裝載文件來傳遞參數: 在下面的說明中, 我們假設你使用了Linux的標准裝載程序“LILO“。在啟動的時候,Linux識別一定的參數。這些參數通常說明一些在啟動時不知道的情況。 對網卡來說,應該使用如下的參數: ether=,,,, 其中有效的數值必須是10進制的, 或8進制(以“0“開頭), 或16進制(以“0x“開頭)的。第一個非數值參數是為你的設備取一個名字(NAME)。空參數被認為是0。 IRQ 這個參數指明你的網卡所使用的中斷號。 但參數為0時, 這意味著將從你的網卡上讀取中斷號(如果你的網卡支持這一功能), 或使用自動中斷號(如果你的網卡不提供讀取中斷號的功能的話)。 IO-ADDR 這個參數指明檢測時使用的基地址。 如果基地址是0, 則檢測程序將檢測所有可能使用的地址。一般來說, 檢測程序將使用保留地址表來決定這一區域是否要進行檢測。如果你指明了參數, 則檢測程序將不使用保留地址表. 可以使用“reserve=“告訴檢測程序不檢測某一IO空間。 PARAM1, PARAM2 最初是用來指明你的網卡所使用的共享內存區域, 象WD8013網卡一樣. 隨著新網卡的出現, 它們被用於提供一些網卡的信息。 NAME 用來指明你預定義的設備名。一般內核使用“eth0“, “eth1“, “eth2“...... 之類的名字. 沒有說明特殊的意義. LILO提供了兩種傳遞參數的方法。最常見的是在啟動時立即鍵入這些參數。下面的例子, 激活了兩個網卡:: linux ether=0,0,eth0 ether=0,0,eth1 當然在每次啟動時都鍵入這些參數是相當麻煩的, 而且不能做到自動啟動。你可以永久的在你的LILO配置文件/etc/lilo.conf中加上一行“append“, 然後運行LILO來升級你的配置: append = “ether=0,0,eth1 ether=0,0,eth2“ 2、網絡連接 要使這兩塊網卡與相應的網絡相連,需要使用ifconfig命令;在本例中,可以這樣配置: # ifconfig 166.166.64.1 255.255.192.0 eth0 up # ifconfig 166.166.128.1 255.255.192.0 eth1 up 其中,ifconfig命令使Linux內核知道軟件回送和以太網這樣一些網絡接口,使得Linux可以使用它們。這兩行命令的含義便是,將IP地址166.166.64.1分配給網卡eth0,子網掩碼為255.255.192.0;將IP地址166.166.128.1分配給網卡eth1,子網掩碼為255.255.192.0;參數up表示配置立時生效。(命令行開頭的“#”為Linux系統下超級用戶的命令輸入提示符) 網卡參數配置好了之後,還需要正確配置系統路由表,並啟動IP轉發功能。 在Linux系統中,用戶可以采用多種路由協議;為了簡單起見,本文只介紹靜態路由的配置。配置路由表時,首先應使用router -n 命令列出當前路由表的內容,刪除所有不正確的路由;然後使用route add命令來添加靜態路由。 刪除路由的命令為: # route del -net -host name netmask netmask_name; 其中 -net 為刪除到網絡的路由,-host刪除到主機的路由;這兩個參數根據需要選擇其中一個。name為所要刪除的網絡或者主機的IP地址;netmask_name為子網掩碼的IP地址。 然後添加以下兩項: # route add -net 166.166.64.0 netmask 255.255.192.0 eth0 # route add -net 166.166.128.0 netmask 255.255.192.0 eth1 這兩行命令就會使得所有發往166.166.64.0網絡的數據包都應通過網卡eth0發出去,而發往166.166.128.0網絡的數據包都應通過網卡eth1發出去。 最後使用命令:# echo 1> /proc/sys/net/ipv4/ip_forward來啟動系統的IP轉發功能。如果希望關閉IP轉發,則把前面命令中的參數1換成0即可。 現在,網關配置大功告成。筆者多次分別在這兩個子網中的某幾台計算機上使用ping命令(如ping 166.166.192.5 -t)、查找網上鄰居的方法進行測試;結果都能Ping通網絡中的其他機器,也能很快找到網絡上的計算機。這證明網關設置正確。如果讀者Ping不能成功,則應該仔細檢查網絡的硬件如網線、HUB、網卡等是否正常。