Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡;linux设置bond网卡绑定,有些用Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。其实这项 技术在Sun和Cisco中早已存在,被称为Trunking和Etherchannel技术,在Linux的2.4.x的内核中也采用这这种技术,被称为bonding。
bonding技术的最早应用是在集群——beowulf上,为了提高集群节点间的数据传输而设计的。下面我们讨论一下bonding 的原理,什么是bonding需要从网卡的混杂(promisc)模式说起。我们知道,在正常情况下,网卡只接收目的硬件地址(MAC Address)是自身Mac的以太网帧,
对于别的数据帧都滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂promisc的模式,可以接收网络上所有的帧,比如说tcpdump,就是运行在这个模式下。bonding也运行在这个模式下,而且修改了驱动程序中的mac地址,将两块网卡的Mac地址改成相同,可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。
 
1)当mode=1时表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式
 
配置步骤:
1. 编辑虚拟网络接口配置文件,指定网卡IP
[root@localhost network-scripts]#cp/etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-bond0
[root@localhost network-scripts]# vim ifcfg-bond0
# Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)
DEVICE=bond0
BOOTPROTO=static
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.145.8
TYPE=Ethernet
~          
2.不指定单个网卡的IP 地址、子网掩码或网卡 ID。将上述信息指定到虚拟适配器(bonding)中即可。
 
[root@localhost network-scripts]# vim ifcfg-eth0
# Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
~           
[root@localhost network-scripts]# vim ifcfg-eth1
# Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
~          
 
3. 编辑/etc/modprobe.conf 文件,加入如下一行内容,以使系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0
 
[root@localhost ~]# vim /etc/modprobe.conf
alias eth0 e1000
alias bond0 bonding
options bond0 miimon=100 mode=1   
alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptspi
alias scsi_hostadapter2 ata_piix
alias snd-card-0 snd-ens1371
options snd-card-0 index=0
options snd-ens1371 index=0
remove snd-ens1371 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-ens1371
alias eth1 e1000
 
4.绑定网卡:
[root@localhost network-scripts]# vim /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
ifenslave bond0 eth0 eth1
~
重启测试结果
 [root@localhost ~]# ifconfig
bond0      Link encap:Ethernet HWaddr 00:0C:29:EB:72:02 
          inet addr:192.168.145.8 Bcast:192.168.145.255 Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feeb:7202/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
          RX packets:490 errors:0 dropped:0 overruns:0 frame:0
          TX packets:494 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:38980 (38.0 KiB) TX bytes:41128 (40.1 KiB)
 
eth0       Link encap:Ethernet HWaddr 00:0C:29:EB:72:02 
          UP BROADCAST SLAVE MULTICAST MTU:1500 Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:180 (180.0 b) TX bytes:126 (126.0 b)
 
eth1       Link encap:Ethernet HWaddr 00:0C:29:EB:72:02 
          UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
          RX packets:495 errors:0 dropped:0 overruns:0 frame:0
          TX packets:507 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:39280 (38.3 KiB) TX bytes:43434 (42.4 KiB)
 
lo         Link encap:Local Loopback 
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING MTU:16436 Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:912 (912.0 b) TX bytes:912 (912.0 b)                        
 
 
当eth0断开时测试结果如下:

 

 

2)当mode=0时,
编辑/etc/modprobe.conf 文件
[root@localhost ~]# vim /etc/modprobe.conf
alias eth0 e1000
alias bond0 bonding
options bond0 miimon=100 mode=0   
alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptspi
alias scsi_hostadapter2 ata_piix
alias snd-card-0 snd-ens1371
options snd-card-0 index=0
options snd-ens1371 index=0
remove snd-ens1371 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-ens1371
alias eth1 e1000
重启测试
当断开eth0时测试结果如下

 

 

当断开eth1时测试结果

 

 

 

3)当mode=2时
编辑/etc/modprobe.conf 文件,把mode改为2,其它不做改变。
  当断开eth0时,测试结果为