Linux網路卡的配置檔案詳解及應用

lm_y發表於2017-08-12

目前在企業級伺服器的Linux系統中,RHEL佔有絕對的優勢,不管是曾經在網際網路公司還是在目前測試Virtualization都是用的RHEL,所以本文主要是針對RedHat的linux來寫的。前陣子有一次也被測試中的各種網路配置給搞暈了,因為我們VT-D和SR-IOV基本上都用NIC來測試的。收集了點資料,結合實際經驗總結一下。

Redhat Linux的網路配置,基本上是通過修改幾個配置檔案來實現的,雖然也可以用ifconfig來設定IP,用route來配置預設閘道器,用hostname來配置主機名,但是重啟後會丟失。

Linux中網路相關的主要的幾個配置檔案為:
/ect/hosts配置主機名(域名)和IP地址的對應
/etc/sysconfig/network配置主機名和閘道器
/etc/sysconfig/network-scripts/ifcfg-eth0 eth0配置檔案,eth1則檔名為ifcfg-eth1,以此類推/etc/resolv.conf配置DNS客戶端(關於使用哪個DNS伺服器的配置)

1./etc/sysconfig/network-scripts/ifcfg-<interface-name>檔案
在RedHat中,系統網路裝置的配置檔案儲存在/etc/sysconfig/network-scripts目錄下,ifcfg-eth0包含第一塊網路卡的配置資訊,ifcfg-eth1包含第二塊網路卡的配置資訊。在啟動時,系統通過讀取這個配置檔案決定某個網路卡是否啟動和如何配置。
下面是/etc/sysconfig/network-scripts/ifcfg-eth0檔案的示例:
DEVICE=eth0
IPADDR=192.168.0.2
NETMASK=255.255.255.0
BROADCAST=192.168.0.255
NBOOT=yes
BOOTPROTO=none
GATEWAY=192.168.0.1

若希望手工修改網路地址或增加新的網路連線,可以通過修改對應的檔案ifcfg-<interface-name>或建立新的檔案來實現。
DEVICE=<name>   <name>表示物理裝置的名字
IPADDR=<address>   <address>表示賦給該網路卡的IP地址
NETMASK=<mask>  <mask>表示子網掩碼
BROADCAST=<address> <address>表示廣播地址
NBOOT=yes/no  啟動時是否啟用該卡
BOOTPROTO=none  none:無須啟動協議;bootp:使用bootp協議;dhcp:使用dhcp協議
GATEWAY=<address> <address>表示預設閘道器
MACADDR=<MAC-address> <MAC-address>表示指定一個MAC地址
USERCTL=yes/no    是否允許非root使用者控制該裝置

2./etc/resolv.conf檔案
檔案/etc/resolv.conf配置DNS客戶端,它包含了DNS伺服器地址和域名搜尋配置,每一行應包含一個關鍵字和一個或多個的由空格隔開的引數。下面是一個例子檔案:
search wuxp.com
nameserver 192.168.0.1
nameserver 192.168.0.2

search wuxp.com:表示當提供了一個不包括完全域名的主機名時,在該主機名後新增wuxp.com的字尾;nameserver:表示解析域名時使用該地址指定的主機為域名伺服器。其中域名伺服器是按照檔案中出現的順序來查詢的。因此,應該首先給出最可靠的伺服器。目前,至多支援三個名字伺服器。

3./etc/sysconfig/network檔案
該檔案用來指定伺服器上的網路配置資訊,下面是一個示例:
NETWORK=yes
RORWARD_IPV4=yes
HOSTNAME=server.wuxp.com
GAREWAY=192.168.0.1
GATEWAYDEV=eth0
NETWORK=yes/no    網路是否被配置
FORWARD_IPV4=yes/no    是否開啟IP轉發功能
HOSTNAME=<hostname> <hostname>表示伺服器的主機名
GAREWAY=<address>    <address>表示網路閘道器的IP地址
GAREWAYDEV=<device>  <device>表示閘道器的裝置名,如:eth0

4./etc/hosts檔案
當機器啟動時,在可以查詢DNS以前,機器需要查詢一些主機名到IP地址的匹配。這些匹配資訊存放在/etc/hosts檔案中。在沒有域名伺服器情況下,系統上的所有網路程式都通過查詢該檔案來解析對應於某個主機名的IP地址。
下面是一個/etc/hosts檔案的示例:
127.0.0.1 Localhost server.wuxp.com
192.168.0.3 station1.wuxp.com
最左邊一列是主機IP資訊,中間一列是主機名。任何後面的列都是該主機的別名。

修改後,需要重啟網路才會生效:重新啟動網路設定:/sbin/service network restart
service network start //啟動網路服務
service network stop //停止網路服務
service network status //檢視網路服務狀態
 

另外,還有單個網路卡繫結多個IP和多個網路卡繫結為一塊虛擬網路卡的配置。

1、單網路卡繫結多個IP

有時,我們需要在一塊網路卡上配置多個IP,例如,在上面的例子中,我們還需要為eth0配置IP 192.168.168.2和192.168.168.3。那麼需要再在/etc/sysconfig/network-scripts下新建兩個配置檔案:

ifcfg-eth0:0內容如下:

DEVICE=eth0:0
BOOTPROTO=static
IPADDR=192.168.168.2
NETMASK=255.255.255.0
NBOOT=yes

ifcfg-eth0:1內容如下:

DEVICE=eth0:1
BOOTPROTO=static
IPADDR=192.168.168.3
NETMASK=255.255.255.0
NBOOT=yes

2、多個網路卡繫結成一塊虛擬網路卡

為了提供網路的高可用性,我們可能需要將多塊網路卡繫結成一塊虛擬網路卡對外提供服務,這樣即使其中的一塊物理網路卡出現故障,也不會導致連線中斷。比如我們可以將eth0和eth1繫結成虛擬網路卡bond0
首先在/etc/sysconfig/network-scripts/下建立虛擬網路卡bond0的配置檔案ifcfg-bond0,內容如下

DEVICE=bond0
BOOTPROTO=none
BROADCAST=192.168.168.255
IPADDR=192.168.168.1
NETMASK=255.255.255.0
NETWORK=192.168.168.0
NBOOT=yes
TYPE=Ethernet
GATEWAY=192.168.168.250
USERCTL=no

然後分別修改eth0和eth1的配置檔案
ifcfg-eth0內容:

DEVICE=eth0
BOOTPROTO=none
NBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes

ifcfg-eth1內容

DEVICE=eth1
BOOTPROTO=none
NBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes

因為linux的虛擬網路卡是在核心模組中實現的,所以需要安裝的時候已經裝好該module。在/etc/modprobe.conf檔案(好像有些老版本是/etc/modules.con)中新增如下內容(如果沒有該檔案,則新建一個):

alias bond0 bonding
options bond0 miimon=100 mode=1 primary=eth0

其中miimon=100表示每100ms檢查一次鏈路連線狀態,如果不通則會切換物理網路卡
mode=1表示主備模式,也就是隻有一塊網路卡是active的,只提供失效保護。如果mode=0則是負載均衡模式的,所有的網路卡都是active,還有其他一些模式很少用到
primary=eth0表示主備模式下eth0為預設的active網路卡

最後,在/etc/rc.local中加入

modprobe bonding miimon=100 mode=1

重啟機器後可以看到虛擬網路卡已經生效,可以通過插拔兩個物理網路卡的網線來進行測試,不過linux中網路卡接管的時間好象比較長。

相關文章