在使用Linux作為兩個以太網之間的網關的情況下,服務器至少需要配置兩塊網卡。為了減少啟動時可能出現的問題,Linux內核不會自動檢測多個網卡。若需要在服務器上安裝多塊網卡,對於已經將網卡的驅動編譯進內核中的系統,則需要在“/etc/lilo.conf”文件中指定各個網卡的參數信息;而對於沒有將網卡的驅動編譯到內核而是作為模塊動態載入的系統,應該在“conf.modules”文件中進行相應的配置。
若設備驅動被編譯為模塊(內核的模塊):對於PCI設備,模塊將自動檢測到所有已經安裝到系統上的設備;對於ISA卡,則需要向模塊提供IO地址,以使模塊知道在何處尋找該卡,這些信息在“/etc/conf.modules”中提供。
例如,我們有兩塊ISA總線的3c509卡,一個IO地址是0x300,另一個是0x320。編輯“conf.modules”文件如下:
alias eth0 3c509
alias eth1 3c509
options 3c509 io=0x300,0x320
這是說明3c509的驅動程序應當被eth0或eth1加載(alias eth0,eth1),並且它們應該以參數io=0x300,0x320被裝載,這樣驅動程序知道到哪裡去尋找網卡,其中0x是不可缺少的。
對於PCI卡,僅僅需要alias命令來使ethN和適當的驅動模塊名關聯,PCI卡的IO地址將會被自動的檢測到。對於PCI卡,編輯“conf.modules”文件如下:
alias eth0 3c509
alias eth1 3c509
若驅動已經被編譯進了內核:系統啟動時的PCI檢測程序將會自動找到所有相關的網卡。ISA卡一般也能夠被自動檢測到,但是在某些情況下,ISA卡仍然需要做下面的配置工作:
在“/etc/lilo.conf”中增加配置信息,其方法是通過LILO程序將啟動參數信息傳遞給內核。對於ISA卡,編輯“lilo.conf”文件,增加如下內容:
append="ether="0,0,eht1"
注意:先不要在“lilo.conf”中加入啟動參數,測試一下你的ISA卡,若失敗再使用啟動參數。
如果用傳遞啟動參數的方法,eth0和eth1將按照啟動時被發現的順序來設置。因為我們已經重新編譯了內核,所以必須使用第二種方法(在lilo.conf中加入啟動參數)在系統中安裝我們的第二塊網卡。這種方法只對ISA卡有必要,PCI卡會被自動查找到,所以沒有什麼必要。
和網絡相關的一些配置文件
在Linux系統中,TCP/IP網絡是通過若干個文本文件進行配置的,也許你需要編輯這些文件來完成聯網工作。下面的部分介紹基本的 TCP/IP配置文件:
“/etc/HOSTNAME”文件:
該文件包含了系統的主機名稱,包括完全的域名,如:
deep.openarch.com
“/etc/sysconfig/network-scripts/ifcfg-ethN”文件:
在RedHat6.1中,系統網絡設備的配置文件保存在“/etc/sysconfig/network-scripts”目錄下,ifcfg-eth0包含第一塊網卡的配置信息,ifcfg-eht1包含第二塊網卡的配置信息。
下面是“/etc/sysconfig/network-scripts/ifcfg-eth0”文件的示例:
DEVICE=eth0
IPADDR=208.164.186.1
NETMASK=255.255.255.0
NETWORK=208.164.186.0
BROADCAST=208.164.186.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
若希望手工修改網絡地址或在新的接口上增加新的網絡界面,可以通過修改對應的文件(ifcfg-ethN)或創建新的文件來實現。
DEVICE=name name表示物理設備的名字
IPADDR=addr addr表示賦給該卡的IP地址
NETMASK=mask mask表示網絡掩碼
NETWORK=addr addr表示網絡地址
BROADCAST=addr addr表示廣播地址
ONBOOT=yes/no 啟動時是否激活該卡
BOOTPROTO=proto proto取值可以是:
none:無須啟動協議
bootp:使用bootp協議
dhcp:使用dhcp協議
USERCTL=yes/no 是否允許非root用戶控制該設備
“/etc/resolv.conf”文件:
該文件是由解析器(resolver,一個根據主機名解析IP地址的庫)使用的配置文件,示例如下:
search openarch.com
nameserver 208.164.186.1
nameserver 208.164.186.2
“search domainname.com”表示當提供了一個不包括完全域名的主機名時,在該主機名後添加domainname.com的後綴;“nameserver”表示解析域名時使用該地址指定的主機為域名服務器。其中域名服務器是按照文件中出現的順序來查詢的。
“/etc/host.conf”文件:
該文件指定如何解析主機名。Linux通過解析器庫來獲得主機名對應的IP地址。下面是一個“/etc/host.conf”的示例:
order bind,hosts
multi on
ospoof on
“order bind,hosts”指定主機名查詢順序,這裡規定先使用DNS來解析域名,然後再查詢“/etc/hosts”文件。
“multi on”指定是否“/etc/hosts”文件中指定的主機可以有多個地址,擁有多個IP地址的主機一般稱為具有多個網絡界面。
“nospoof on”指不允許對該服務器進行IP地址欺騙。IP欺騙是一種攻擊系統安全的手段,通過把IP地址偽裝成別的計算機,來取得其它計算機的信任。
“/etc/sysconfig/network”文件
該文件用來指定服務器上的網絡配置信息,下面是一個示例:
NETWORK=yes
RORWARD_IPV4=yes
HOSTNAME=deep.openarch.com
GAREWAY=0.0.0.0
GATEWAYDEV=
NETWORK=yes/no 網絡是否被配置;
FORWARD_IPV4=yes/no 是否開啟IP轉發功能
HOSTNAME=hostname hostname表示服務器的主機名
GAREWAY=gw-ip gw-ip表示網絡網關的IP地址
GAREWAYDEV=gw-dev gw-dw表示網關的設備名,如:etho等
注意:為了和老的軟件相兼容,“/etc/HOSTNAME”文件應該用和HOSTNAME=hostname相同的主機名。
“/etc/hosts”文件
當機器啟動時,在可以查詢DNS以前,機器需要查詢一些主機名到IP地址的匹配。這些匹配信息存放在/etc/hosts文件中。在沒有域名服務器情況下,系統上的所有網絡程序都通過查詢該文件來解析對應於某個主機名的IP地址。
下面是一個“/etc/hosts”文件的示例:
IP Address
Hostname
Alias
127.0.0.1
Localhost
Gate.openarch.com
208.164.186.1
gate.openarch.com
Gate
208.164.186.2
forest.openarch.com
Forest
208.164.186.3
deep.openarch.com
Deep
最左邊一列是主機IP信息,中間一列是主機名。任何後面的列都是該主機的別名。一旦配置完機器的網絡配置文件,應該重新啟動網絡以使修改生效。使用下面的命令來重新啟動網絡:
/etc/rc.d/init.d/network restart
注意:tcpd程序是負責檢測如telnet、FTP等的服務請求。
一旦有服務請求到來,inetd進程將啟動tcpd進程,tcpd在日志文件中記錄該請求,並且完成一些其他的檢測工作。如果一切正常通過,tcpd將啟動相應的服務器進程,然後自己結束。 tcpd要通過查詢DNS服務器,先對該客戶機的IP地址進行反向解析得到主機名,然後再解析得到該主機名對應的IP地址,接著,把得到IP地址和發出請求的客戶的機器的IP地址進行比較,通過這些步驟來實現對發送請求的客戶機的驗證。若兩者不匹配,則tcpd認為發出請求的機器在偽裝成其它的機器,則拒絕請求,這就是為什麼有時候telnet到Linux機器要等待那麼長時間的原因,可以通過在“/etc/hosts”加入客戶的機器的IP地址和主機名的匹配項,就可以減少登錄等待時間。
tcpd可以設置成禁止源路徑路由(source-routing)socket的連接請求。這個設置可以避免黑客用把自己的IP地址偽裝成別的計算機的IP地址的方法,攻擊服務器。請注意這個設置對UDP無效。當服務器試圖把請求服務的客戶機的IP地址反向解析成主機名的時候經常會出現超時(timeout)錯誤。其原因可能是DNS服務器沒有配置好,或者DNS根本沒有請求服務的客戶端計算機的任何信息。
用命令行手工配置TCP/IP網絡
ifconfig是用來設置和配置網卡的命令工行具,為了手工配置網絡你需要熟悉這個命令。用該命令的好處是無須重新啟動機器。
賦給eth0接口IP地址208.164.186.2,使用命令:
[root@deep]#ifconfig eth0 208.164.186.2 netmask 255.255.255.0
列出所有的網絡接口,你可以使用命令:
[root@deep]# ifconfig
這個命令的輸出是這樣的:
eth0
Link encap:Ethernet HWaddr 00:E0:18:90:1B:56
inet addr:208.164.186.2 Bcast:208.164.186.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1295 errors:0 dropped:0 overruns:0 frame:0
TX packets:1163 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:11 Base address:0xa800
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets
賦給eth0接口IP地址208.164.186.2,使用命令:
[root@deep]#ifconfig eth0 208.164.186.2 netmask 255.255.255.0
列出所有的網絡接口,你可以使用命令:
[root@deep]# ifconfig
這個命令的輸出是這樣的:
eth0
Link encap:Ethernet HWaddr 00:E0:18:90:1B:56
inet addr:208.164.186.2 Bcast:208.164.186.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1295 errors:0 dropped:0 overruns:0 frame:0
TX packets:1163 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:11 Base address:0xa800
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets