【Linux】網卡配置與綁定


Redhat Linux的網絡配置,基本上是通過修改幾個配置文件來實現的。

雖然也可以用ifconfig來設置IP,用route來配置默認網關,用hostname來配置主機名,但是重啟后會丟失。

相關的配置文件:

/ect/hosts 配置主機名和IP地址的對應

 
/etc/sysconfig/network 配置主機名和網關


/etc/sysconfig/network-scripts/ifcfg-eth0 eth0配置文件,eth1則文件名為ifcfg-eth1,以此類推

 

 

一、網卡配置

假設我們要配置主機名為test,eth0的IP地址192.168.168.1/24,網關地址192.168.168.250

則/etc/sysconfig/network文件內容如下:

NETWORKING=yes
HOSTNAME=test
GATEWAY=192.168.168.250

 

eth0對應的配置文件/etc/sysconfig/network-scripts/ifcfg-eth0內容如下:

DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.168.1
NETMASK=255.255.255.0
TYPE=Ethernet
ONBOOT=yes

 

 

二、單網卡綁定多個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
ONBOOT=yes

 

ifcfg-eth0:1內容如下:

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

 

 

三、多個網卡綁定成一個虛擬網卡

為了提供網絡的高可用性,我們可能需要將多塊網卡綁定成一塊虛擬網卡對外提供服務,這樣即使其中的一塊物理網卡出現故障,也不會導致連接中斷。

比如我們可以將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
ONBOOT=yes
TYPE=Ethernet
GATEWAY=192.168.168.250
USERCTL=no

 

然后分別修改eth0和eth1的配置文件
ifcfg-eth0內容:

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

 

ifcfg-eth1內容:

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

 

因為linux的虛擬網卡是在內核模塊中實現的,所以需要安裝的時候已經裝好該module。

/etc/modules.conf文件中添加如下內容(如果沒有該文件,則新建一個,當然也可以在/etc/modprobe.d這個目錄下新建bind0.conf和bind1.conf):

 

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

 

其中miimon=100表示每100ms檢查一次鏈路連接狀態,如果不通則會切換物理網卡。


mode=1表示主備模式,也就是只有一塊網卡是active的,只提供失效保護。如果mode=0則是負載均衡模式的,所有的網卡都是active,還有其他一些模式很少用到


primary=eth0表示主備模式下eth0為默認的active網卡

miimon是毫秒數,每100毫秒觸發檢測線路穩定性的事件。


mode 是ifenslave的工作狀態,一共有7種方式:

=0: (balance-rr) Round-robin policy: (平衡掄循環策略):傳輸數據包順序是依次傳輸,直到最后一個傳輸完畢, 此模式提供負載平衡和容錯能力。


=1: (active-backup) Active-backup policy:(主-備份策略):只有一個設備處於活動狀態。 一個宕掉另一個馬上由備份轉換為主設備。mac地址是外部可見得。 此模式提供了容錯能力。 


=2:(balance-xor) XOR policy:(平衡 策略): 傳輸根據原地址布爾值選擇傳輸設備。 此模式提供負載平衡和容錯能力。 


=3:(broadcast) broadcast policy:  (廣播策略):將所有數據包傳輸給所有接口。 此模式提供了容錯能力。  


=4:(802.3ad) IEEE 802.3ad Dynamic link aggregation.   IEEE 802.3ad 動態鏈接聚合:創建共享相同的速度和雙工設置的聚合組。


=5:(balance-tlb) Adaptive transmit load balancing(適配器傳輸負載均衡):沒有特殊策略,第一個設備傳不通就用另一個設備接管第一個設備正在處理的mac地址,幫助上一個傳。


=6:(balance-alb) Adaptive load balancing: (適配器傳輸負載均衡):大致意思是包括mode5,bonding驅動程序截獲 ARP 在本地系統發送出的請求,用其中之一的硬件地址覆蓋從屬設備的原地址。就像是在服務器上不同的人使用不同的硬件地址一樣。

這些選項可以用命令:# modinfo bonding 來查看

 

最后,在/etc/rc.local中加入:

modprobe bonding miimon=100 mode=1

重啟機器后可以看到虛擬網卡已經生效,可以通過插拔兩個物理網卡的網線來進行測試,不過linux中網卡接管的時間好象比較長。需要說明的是如果想做成負載均衡,僅僅設置這里modprode bonding miimon=100 mode=0是不夠的,還需要設置交換機的端口.


從原理分析一下(bond運行在mode 0下):
mode 0下bond所綁定的網卡的IP都被修改成一樣的mac地址,如果這些網卡都被接在同一個交換機,那么交換機的arp表里這個mac地址對應的端口就有多個,那么交換機接受到發往這個mac地址的包應該往哪個端口轉發呢?正常情況下mac地址是全球唯一的,一個mac地址對應多個端口肯定使交換機迷惑了。
所以mode0下的bond如果連接到交換機,交換機這幾個端口應該采取聚合方式(cisco稱為ethernetchannel,foundry稱為portgroup),因為交換機做了聚合后,聚合下的幾個端口也被捆綁成一個mac地址。
由於家里沒有三層交換機,這里的試驗留給網友自行驗證了.

====================================================

在 /etc/rc.local 文件里加上一行:

/root/bonding.sh

bonding.sh文件內容:

#!/bin/sh
modprobe -r bonding
modprobe bonding miimon=100 mode=6
ifconfig bond0 172.16.96.46 netmask 255.255.248.0 up
route add default gw 172.16.100.1 bond0
#ifenslave bond0 eth0 eth1 eth2 eth3 eth4 eth5
ifenslave bond0 eth0 eth1 
service network restart

Linux bonding驅動: http://tzsky.blog.51cto.com/1062094/237283

 

四、查看當前網卡是千兆還是萬兆網卡

1、ethtool

ethtool 網絡接口名

#ethtool em4
Settings for em4:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: g
Wake-on: d
Link detected: yes

 

2、lspci  

當前是博通BCM5709千兆網卡Gigabit(萬兆網卡顯示為10-Gigabit

 

#lspci -vvv | grep Ethernet
01:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 GigabitEthernet (rev 20)
Subsystem: Dell PowerEdge R710 BCM5709 Gigabit Ethernet
Product Name: Broadcom NetXtreme II Ethernet Controller
01:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
Subsystem: Dell PowerEdge R710 BCM5709 Gigabit Ethernet
Product Name: Broadcom NetXtreme II Ethernet Controller
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
Subsystem: Dell PowerEdge R710 BCM5709 Gigabit Ethernet
Product Name: Broadcom NetXtreme II Ethernet Controller
02:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
Subsystem: Dell PowerEdge R710 BCM5709 Gigabit Ethernet
Product Name: Broadcom NetXtreme II Ethernet Controller
pcilib: sysfs_read_vpd: read failed: Connection timed out

 

小知識:

Gigabit是數據存儲的單位,通常用符號Gbit或Gb表示。它的換算公式:1 Gb = 10的9次方 bits = 1,000,000,000 bits 。
 
另一個常見的單位是Gibibit,gibibit是用來表示二進制換算的,1 gibibit = 2的30次方 bits = 1,073,741,824 bits。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM