Linux网络配置知识
Linux下的网络配置文件
/etc/conf.module /etc/HOSTNAME /etc/sysconfig/network-scripts/ifcfg-ethN /etc/resolv.conf /etc/host.conf /etc/sysconfig/network /etc/hosts /etc/inetd.conf /etc/hosts.allow /etc/services /etc/securetty /etc/rc.d/rc.local
要建立一个安全Linux服务器就首先要了解Linux环境下和网络服务相关的配置文件的含义及如何进行安全的配置。
在Linux系统中,TCP/IP 网络是通过若干个文本文件进行配置的,也许你需要编辑这些文件来完成联网工作,但是这些配置文件大都可以通过配置命令linuxconf(其中网络部分的配置可以通过netconf命令来实现)命令来实现。
基本的TCP/IP网络配置
该配置文件定义了各种需要在启动时加载的模块的参数信息。
/etc/conf.modules
该文件包含了系统的主机名称,包括完全的域名,如:deep.openarch.com。
/etc/HOSTNAME 文件
在RedHat中,系统网络设备的配置文件保存在“/etc/sysconfig/network-scripts”目录下,ifcfg-eth0包含第一块网卡的配置信息,ifcfg-eth1包含第二块网卡的配置信息。
/etc/sysconfig/network-scripts/ifcfg-ethN 文件
下面是“/etc/sysconfig/network-scripts/ifcfg-eth0”文件的示例:
DEVICE=name #name表示物理设备的名字 IPADDR=addr #addr表示赋给该卡的IP地址 NETMASK=mask #mask表示网络掩码 GATEWAY=192.168.1.1 #gateway表示网关地址 NETWORK=addr #addr表示网络地址 (可选) BROADCAST=addr #addr表示广播地址 (可选) ONBOOT=yes/no #启动时是否激活该卡 BOOTPROTO=dhcp none:无须启动协议 bootp:使用bootp协议 dhcp:使用dhcp协议 USERCTL=yes/no 是否允许非root用户控制该设备
若希望手工修改网络地址或在新的接口上增加新的网络界面,可以通过修改对应的文件(ifcfg-ethN)或创建新的文件来实现。
该文件是由域名解析器(resolver,一个根据主机名解析IP地址的库)使用的配置文件
/etc/resolv.conf
示例如下:
search openarch.com nameserver 208.164.186.1 nameserver 208.164.186.2
"search domainname.com"表示当提供了一个不包括完全域名的主机名时,在该主机名后添加domainname.com的后缀;
"nameserver"表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的。
该文件指定如何解析主机名。Linux通过解析器库来获得主机名对应的IP地址。
/etc/host.conf
下面是一个“/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
下面是一个示例:
NETWORKING=yes/no #网络是否被配置; FORWARD_IPV4=yes/no #是否开启IP转发功能 HOSTNAME=hostname #hostname表示服务器的主机名 GAREWAY=gw-ip #gw-ip表示网络网关的IP地址 GAREWAYDEV=gw-dev #gw-dw表示网关的设备名,如:eth0等
注意:为了和老的软件相兼容,“/etc/HOSTNAME”文件应该用和HOSTNAME=hostname相同的主机名。
当机器启动时,在可以查询DNS以前,机器需要查询一些主机名到IP地址的匹配。这些匹配信息存放在/etc/hosts文件中。
在没有域名服务器情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP地址。
/etc/hosts
下面是一个“/etc/hosts”文件的示例:
IP Address Hostname Alias 127.0.0.1 localhost Gate.openarch.com 208.164.186.1 gate.openarch.com Gate ………… ………… ………
最左边一列是主机IP信息,中间一列是主机名。任何后面的列都是该主机的别名。一旦配置完机器的网络配置文件,应该重新启动网络以使修改生效
使用下面的命令来重新启动网络:
/etc/rc.d/init.d/network restart
众所周知,作为服务器来说,服务端口开放越多,系统安全稳定性越难以保证。
所以提供特定服务的服务器应该尽可能开放提供服务必不可少的端口,而将与服务器服务无关的服务关闭,比如:一台作为www和ftp服务器的机器,应该只开放80 和25端口,而将其他无关的服务如:finger auth等服务关掉,以减少系统漏洞。
/etc/inetd.conf
而inetd,也叫作“超级服务器”,就是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。
inetd.conf则是inetd的配置文件。inetd.conf文件告诉inetd监听哪些网络端口,为每个端口启动哪个服务。
在任何的网络环境中使用Linux系统,第一件要做的事就是了解一下服务器到底要提供哪些服务。不需要的那些服务应该被禁止掉,最好卸载掉,这样黑客就少了一些攻击系统的机会。查看“/etc/inetd.conf”文件,了解一下inetd提供哪些服务。
用加上注释的方法(在一行的开头加上#号),禁止任何不需要的服务,再给inetd进程发一个SIGHUP信号。
但是对于telnet、ftp等服务,如果将其一同关闭,那么对于管理员需要远程管理时,将非常不方便。
Linux提供另外一种更为灵活和有效的方法来实现对服务请求用户的限制,从而可以在保证安全性的基础上,使可信任用户使用各种服务。
TCP Wrapper安全机制
Linux提供了一个叫 TCP wrapper 的程序。在大多数发布版本中该程序往往是缺省地被安装。利用 TCP wrapper 你可以限制访问前面提到的某些服务。而且TCP wrapper的记录文件记录了所有的企图访问你的系统的行为。通过last命令查看该程序的log,管理员可以获知谁曾经或者企图连接你的系统。
在/etc目录下,有两个文件:hosts.deny hosts.allow 通过配置这两个文件,你可以指定哪些机器可以使用这些服务,哪些不可以使用这些服务。
当服务请求到达服务器时,TCP wrapper 就按照下列顺序查询这两个文件,直到遇到一个匹配为止:
- 当在/etc/hosts.allow里面有一项与请求服务的主机地址项匹配,那么就允许该主机获取该服务
- 否则,如果在/etc/hosts.deny里面有一项与请求服务的主机地址项匹配,就禁止该主机使用该项服务。
- 如果相应的配置文件不存在,访问控制软件就认为是一个空文件,所以可以通过删除或者移走配置文件实现对清除所有设置。 - 在文件中,空白行或者以#开头的行被忽略,你可以通过在行前加 # 实现注释功能。
配置这两个文件是通过一种简单的访问控制语言来实现的,访问控制语句的基本格式为:
程序名列表:主机名/IP地址列表。
- 程序名列表指定一个或者多个提供相应服务的程序的名字,名字之间用逗号或者空格分割,可以在inetd.conf文件里查看提供相应服务的程序名:如上面的文件示例中,telent所在行的最后一项就是所需的程序名:in.telnetd。
- 主机名/IP地址列表指定允许或者禁止使用该服务的一个或者多个主机的标识,主机名之间用逗号或空格分隔。程序名和主机地址都可以使用通配符,实现方便的指定多项服务和多个主机。
Linux提供了下面灵活的方式指定进程或者主机列表:
一个以“.”起始的域名串,如 .amms.ac.cn 那么www.amms.ac.cn就和这一项匹配
- 以“.”结尾的IP串如 202.37.152. 那么IP地址包括202.37.152. 的主机都与这一项匹配。
- 格式为n.n.n.n/m.m.m.m表示网络/掩码,如果请求服务的主机的IP地址与掩码的位与的结果等于n.n.n.n 那么该主机与该项匹配。
- ALL表示匹配所有可能性
- EXPECT表示除去后面所定义的主机。如:list1 EXCEPT list2 表示list1主机列表中除去List2所列出的主机
- LOCAL表示匹配所有主机名中不包含“.”的主机
上面的几种方式只是Linux提供的方式中的几种,但是对于我们的一般应用来说是足够了。
我们通过举几个例子来说明这个问题:
例一:我们只希望允许同一个局域网的机器使用服务器的ftp功能,而禁止广域网上面的ftp服务请求,本地局域网由 202.39.154.、202.39.153.和202.39.152. 三个网段组成。
在hosts.deny文件中,我们定义禁止所有机器请求所有服务:
ALL:ALL
在hosts.allow文件中,我们定义只允许局域网访问ftp功能:
in.ftpd -l –a: 202.39.154 202.39.153. 202.39.152.
这样,当非局域网的机器请求ftp服务时,就会被拒绝。而局域网的机器可以使用ftp服务。
此外,应该定期检查/var/log目录下的纪录文件,发现对系统安全有威胁的登录事件。last命令可以有效的查看系统登录事件,发现问题所在。
最后tcpdchk是检查TCPWAPPERS配置的程序。它检查TCPWAPPERS的配置,并报告它可以发现的问题或潜在的问题。在所有的配置都完成了之后,请运行tcpdchk程序:
[root@deep]# tcpdchk
端口号和标准服务之间的对应关系在RFC 1700 “Assigned Numbers”中有详细的定义。
“/etc/services”文件使得服务器和客户端的程序能够把服务的名字转成端口号,这张表在每一台主机上都存在,其文件名是“/etc/services”
只有"root"用户才有权限修改这个文件,而且在通常情况下这个文件是没有必要修改的,因为这个文件中已经包含了常用的服务所对应的端口号。
为了提高安全性,我们可以给这个文件加上保护以避免没有经过授权的删除和改变。为了保护这个文件可以用下面的命令:
/etc/services
[root@deep]# chattr +i /etc/services
修改文件限制安全登录终端
/etc/securetty
“/etc/securetty”文件允许你规定“root”用户可以从那个TTY设备登录。登录程序(通常是“/bin/login”)需要读取 “/etc/securetty”文件。
它的格式是:列出来的tty设备都是允许登录的,注释掉或是在这个文件中不存在的都是不允许root登录的。
/etc/securetty
注释掉(在这一行的开头加上#号)所有你想不让root登录的tty设备。
root@geminis># cat /etc/securetty tty1 #tty2 #tty3 #tty4 #tty5 #tty6 #tty7 #tty8
修改网卡硬件地址MAC
#关闭网卡设备,否则会报告系统忙,无法更改 /sbin/ifconfig eth0 down #修改硬件地址 /sbin/ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #重新启用网卡 /sbin/ifconfig eht0 up
修改文件使热重启无效
Control-Alt-Delete
把“/etc/inittab”文件中的一行注释掉可以禁止用Control-Alt-Delete关闭计算机。如果服务器不是放在一个安全的地方,这非常重要。
编辑inittab文件(vi /etc/inittab)把这一行:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
改为:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
用下面的命令使改变生效:
[root@deep]# /sbin/init q
加强init.d目录下执行权限
/etc/rc.d/init.d/
/etc/rc.d/init.d/下的脚本主要包含了启动服务的脚本程序。一般用户没有什么必要知道脚本文件的内容。所以应该改变这些脚本文件的权限。
[root@deep]# chmod -R 700 /etc/rc.d/init.d/*
这样只有root可以读、写和执行这个目录下的脚本。
在默认情况下,当登录装有Linux系统的计算机时,系统会告诉你Linux发行版的名字、版本号、内核版本和服务器名称。
这泄露了太多的系统信息。最好只显示一个“Login:”的提示信息。
第一步:编辑“/ect/rc.d/rc.local”文件,在下面这些行的前面加上“#”:
# This will overwrite /etc/issue at every boot. So, make any changes you # want to make to /etc/issue here or you will lose them when you reboot. echo "" > /etc/issue echo "$R" >> /etc/issue echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue # cp -f /etc/issue /etc/issue.net echo >> /etc/issue
第二步: 删除“/etc”目录下的“issue.net”和“issue”文件:
[root@deep]# rm -f /etc/issue [root@deep]# rm -f /etc/issue.net
注意:“/etc/issue.net”文件是用户从网络登录计算机时(例如:telnet 、SSH),看到的登录提示。同样在“”目录下还有一个 “issue”文件,是用户从本地登录时看到的提示。这 两个文件都是文本文件,可以根据需要改变。但是,如果想删掉这两个文件,必须向上面介绍的那样把 “/etc/rc.d/rc.local”脚本中的那些行注释掉,否则每次重新启动的时候,系统又会重新创建这两个文件。
双网卡绑定技术(bonding)
双网卡设置同一网段IP地址的问题
问题:
我在两个网卡上面设置同样网段的两个IP(比如10.1.0.1和10.1.0.2),这时是可以正常工作的,但是如果我把第一快网卡(eth0)上的网线拔掉之后,网络就不通了,按照我的设想,当eth0不通时系统应该可以从eth1走,所以网络应该还是通的,因为我设的是同一个网段的IP。而且,如果我运行命令ifdown eth0之后,网就通了,也就是可以从eth1走了。
解答:
这样配置是有问题的,当eth0的网线被拔掉时,系统并不能按您设想的改从eth1走,因为系统里面有一个路由表,当您设置IP的时候就会同时设置路由表,当需要访问外面的时候,系统会去路由表里面查询,当查询到第一个匹配的项目时就应用这个项目,也就是从这条路径走了,当你拔掉eth0的网线的时候,路由表并没有同时改变,所以系统仍然会试图从eth0走,并不会自动改成从eth1走。
但是,如果你运行命令ifdown eth0之后,系统就会把eth0这条路由删除掉,之后就可以从eth1走了,网也就通了。
您可以使用命令route来查看系统路由表:
[root@localhost ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 * 255.0.0.0 U 0 0 0 eth0 10.0.0.0 * 255.0.0.0 U 0 0 0 eth1
像您设想的,您如果希望两块网卡能够像热备一样工作,也就是一块不通时可以从另外一块走,那么您可以使用网卡绑定,在核心里面提供了网卡绑定的支持:
#insmod bonding mode=1 #ifconfig eth0 down #ifconfig eth1 down #ifconfig bond0 ipaddress #ifenslave bond0 eth0 #ifenslave bond0 eth1
这样设置之后,eth0和eth1就被绑定成了一个新的设备:bond0,这个设备可以工作在热备(mode= 1)和负载均衡(mode=0)两种方式下,任何一种工作方式下都可以实现您的设想,也就是任意拔掉一根网线,网络仍然可以正常工作。
注:如果负载均衡方式需要两个网卡同时工作,那么要求交换机上的对应网口也要做绑定,这个就需要查看交换机的使用说面了。如果您是使用热备的方式,假设一块网卡工作,另外一块网卡做备份,如果工作的网卡出现问题,比如网络段了,那么会马上切换到另外一块网卡上,保证网络通畅,这种方式不要求交换机做特殊设置。
Linux下双网卡实现高性能HP和高可用HA
高性能HP和高可用HA网络介面设定都是一样的
cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0 IPADDR=192.168.10.104 NETMASK=255.255.255.0 GATEWAY=192.168.10.1 ONBOOT=yes BOOTPROTO=static
cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 ONBOOT=yes MASTER=bond0 SLAVE=yes
cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1 ONBOOT=yes MASTER=bond0 SLAVE=yes
区别设定文件/etc/modprobe.conf中的mode的值,mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。
options bonding mode=0 # 0-rr 1-active/salve modprobe -r bonding # remove bonding modprobe bonding # load again
查看bonding模块的参数
cd /lib/modules/..... modinfo bonding.ko
需根据交换机可提供的工作模式选择。
mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。 mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份。
1.实现网络高性能HP则在/etc/modprobe.conf加入以下二行
alias bond0 bonding
options bond0 miimon=100 mode=0
2.实现网络高可用HA则在/etc/modprobe.conf加入以下二行
alias bond0 bonding
options bond0 miimon=100 mode=1
设好配置文件后,执行如下二条指令即可,无需重启系统
ldconfig
/etc/init.d/network restart
查看 ifconfig -a
bond0 Link encap:Ethernet HWaddr 00:E0:4C:B1:0F:5A inet addr:192.168.10.104 Bcast:192.168.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:4805 errors:0 dropped:0 overruns:0 frame:0 TX packets:2030 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:414775 (405.0 KiB) TX bytes:420723 (410.8 KiB) eth0 Link encap:Ethernet HWaddr 00:E0:4C:B1:0F:5A UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:2105 errors:0 dropped:0 overruns:0 frame:0 TX packets:1194 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:182497 (178.2 KiB) TX bytes:240559 (234.9 KiB) Interrupt:5 Base address:0×8000 eth1 Link encap:Ethernet HWaddr 00:E0:4C:B1:0F:5A UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:2706 errors:0 dropped:0 overruns:0 frame:0 TX packets:848 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:232638 (227.1 KiB) TX bytes:182028 (177.7 KiB) Interrupt:9 Base address:0×6000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1078 errors:0 dropped:0 overruns:0 frame:0 TX packets:1078 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1487408 (1.4 MiB) TX bytes:1487408 (1.4 MiB)
深度分析Linux下双网卡绑定七种模式
linux有七种网卡绑定模式:
0. round robin 1. active-backup 2. load balancing (xor) 3. fault-tolerance (broadcast) 4. lacp 5. transmit load balancing 6. adaptive load balancing
第一种:bond0:round robin
特点:
(1)所有链路处于负载均衡状态,轮询方式往每条链路发送报文,基于per packet方式发送。服务上ping 一个相同地址:1.1.1.1 双网卡的两个网卡都有流量发出。负载到两条链路上,说明是基于per packet方式 ,进行轮询发送。
(2)这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。
第二种:bond1:active-backup
特点:
一个端口处于主状态 ,一个处于从状态,所有流量都在主链路上处理,从不会有任何流量。
当主端口down掉时,从端口接手主状态。
第三种:bond2:load balancing (xor)
特点:
该模式将限定流量,以保证到达特定对端的流量总是从同一个接口上发出。
既然目的地是通过MAC地址来决定的,因此该模式在“本地”网络配置下可以工作得很好。
如果所有流量是通过单个路由器(比如“网关”型网络配置,只有一个网关时,源和目标mac都固定了,那么这个算法算出的线路就一直是同一条,那么这种模式就没有多少意义了。),那该模式就不是最好的选择。
和balance-rr一样,交换机端口需要能配置为“port channel”。这模式是通过源和目标mac做hash因子来做xor算法来选路的。
第四种:bond3:fault-tolerance (broadcast)
特点:
这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去,当有对端交换机失效,我们感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容错机制。
此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。
第五种:bond4:lacp
特点:
802.3ad模式是IEEE标准,因此所有实现了802.3ad的对端都可以很好的互操作。
802.3ad 协议包括聚合的自动配置,因此只需要很少的对交换机的手动配置(要指出的是,只有某些设备才能使用802.3ad)。
802.3ad标准也要求帧按顺序(一定程度上)传递,因此通常单个连接不会看到包的乱序。
802.3ad也有些缺点:标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。此外,linux bonding的802.3ad实现通过对端来分发流量(通过MAC地址的XOR值),因此在“网关”型配置下,所有外出(Outgoing)流量将使用同一个设备。
进入(Incoming)的流量也可能在同一个设备上终止,这依赖于对端802.3ad实现里的均衡策略。在“本地”型配置下,路两将通过 bond里的设备进行分发。
第六种:bond5: transmit load balancing
特点:
balance-tlb模式通过对端均衡外出(outgoing)流量。既然它是根据MAC地址进行均衡,在“网关”型配置(如上文所述)下,该模式会通过单个设备来发送所有流量,然而,在“本地”型网络配置下,该模式以相对智能的方式(不是balance-xor或802.3ad模式里提及的XOR方式)来均衡多个本地网络对端,因此那些数字不幸的MAC地址(比如XOR得到同样值)不会聚集到同一个接口上。
不像802.3ad,该模式的接口可以有不同的速率,而且不需要特别的交换机配置。不利的一面在于,该模式下所有进入的(incoming)流量会到达同一个接口;该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。
第七种:bond6:adaptive load balancing
特点:
该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(rlb),而且不需要任何交换机的支持
接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。所有端口都会收到对端的arp请求报文,回复arp回时,bond驱动模块会截获所发的arp回复报文,根据算法算到相应端口,这时会把arp回复报文的源mac,send源mac都改成相应端口mac。从抓包情况分析回复报文是第一个从端口1发,第二个从端口2发。以此类推。
(还有一个点:每个端口除发送本端口回复的报文,也同样会发送其他端口回复的报文,mac还是其他端口的mac)这样来自服务器端的接收流量也会被均衡。
当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave(这个算法和上面一样,比如算到1口,就给发送arp请求,1回复时mac用1的mac)。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题通过给所有的对端发送更新(ARP应答)来解决,往所有端口发送应答,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的slave加入到bond中时,或者某个未激活的slave重新激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上
当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答不会被switch(交换机)阻截。
必要条件:
ethtool支持获取每个slave的速率; 底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curractiveslave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curractiveslave出故障,它的硬件地址将会被新选出来的 curractiveslave接管。
实际配置结果:
root@:/tmp# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) Bonding Mode: adaptive load balancing Primary Slave: None Currently Active Slave: eth0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 74:ea:3a:6a:54:e3 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: d8:5d:4c:71:f9:94
应用拓扑:
A是双网卡绑定。
当B 发送一个arp请求到达A时,按正常情况A会回应一个arp回应报文,源mac为bond的mac,源就是bond的ip。
但是这个模式下bonding驱动会截获这个arp回应,把源mac改成bond状态 下其中某一个网卡的mac:mac1,这样B收到这个arp回应时就会在arp缓存中记录下ip:1.1.1.1对应的mac为mac1。这样B的过来的流量都走MAC1.
当C 发送一个arp请求到达A时,按正常情况A会回应一个arp回应报文,源mac为bond的mac,源就是bond的ip。但是这个模式下bonding驱动会截获这个arp回应,把源mac改成bond状态 下其中某一个网卡的mac:mac2,这样C收到这个arp回应时就会在arp缓存中记录下ip:1.1.1.1对应的mac为mac2。这样C的过来的流量都走MAC2.
这样就可以做到回来让回来的流量也负载均衡。出方向均衡和MODE=5一致,不同地址会根据xor算法算出不同出口,发不同出口发送相应的arp ,mac是对应网卡的mac。



