一,iptables的组成概述
(一)Linux 的防火墙体系
Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现, 具有非常稳定的性能和高效率,也因此获得广泛的应用。
(二)netfilter/iptables
1,定义
IP 信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成。 主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理。
2,关系
netfilter:
属于“内核态”又称内核空间(kernel space)的防火墙功能体系。linux 好多东西都是内核态 用户态,那我们运维人员关注的是用户态, 内核我们关注不是很多,内核基本是我们开发人员关心的事情是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables :
属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。 netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。
3,五表 五链
3.1 五表 五链组成
iptables由五个表table和五个链chain以及一些规则组成
3.2 五表优先级
优先级由高到低的顺序为 :
security
raw 跟踪数据包
mangle 标记数据包
nat 地址转换 公网和私网的地址转换
filter 地址过滤 允许 拒绝
3.3 五链
input 入站数据
output 出站数据
forward 转发数据
postrouting 路由转发后
prerouting 路由转发前
4, 内核中数据包的传输过程
- 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要 转送出去
- 如果数据包是进入本机的,数据包就会沿着图向上移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING
- 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出
5,三种报文流向
- 流入本机:PREROUTING --> INPUT-->用户空间进程
- 流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
- 转发:PREROUTING --> FORWARD --> POSTROUTING
具体理解:
路由判决: 看ip 判断是给自己的还是要转发
用户空间进程:上层协议 端口80 对应httpd 或者nginx
这个绿色的整体就是防火墙,我们拿了一台电脑当防火墙,会收到三种信息
1 垃圾信息 丢弃
2 就是 发给自己
先PREROUTING 再路由判决(看给自己还是其他人) 再 INPUT 再上层协议 然后回包
再OUTPUT 再路由判决(看回包给谁) 最后POSTROUTING
3发给自己 需要转发的数据
先PREROUTING 再路由判决(看给自己还是其他人) 再 FORWARD(转发) 最后POSTROUTING
二,iptables 语法
(一 )基本语法
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
注意:-t 如果不指定 默认是filter
1, -t 指定表
-t 指定表
就两种 -t nat -t filter
-t 如果不指定 默认是filter
2, -A 管理选项
管理选项 | 用法示例 |
-A | 在指定链末尾追加一条 iptables -A INPUT (操作) |
-I | 在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作) |
-P | 指定默认规则 iptables -P OUTPUT ACCEPT (操作) |
-D | 删除 iptables -t nat -D INPUT 2 (操作) |
-p | 服务名称 icmp tcp |
-R | 修改、替换某一条规则 iptables -t nat -R INPUT (操作) |
-L | 查看 iptables -t nat -L (查看) |
-n | 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名) iptables -L -n,iptables -nL,iptables -vnL (查看) |
-v | 查看时显示更详细信息,常跟-L一起使用 (查看) |
--line-number | 规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number |
-F | 清除链中所有规则 iptables -F (操作) |
-N | 新加自定义链 |
-X | 清空自定义链的规则,不影响其他链 iptables -X |
-Z | 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z |
-S | 看链的所有规则或者某个链的规则/某个具体规则后面跟编号 |
3,-s 是匹配条件之一
比较复杂,文末详细结束 此处为源地址的意思
4,-j 后面跟控制类型
最常用的几种控制类型如下
- ACCEPT:允许数据包通过。
- DROP:直接丢弃数据包,不给出任何回 应信息。
- REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。
- LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix "sshnewlink: " 生成日志文件
tail -f /var/log/messages
Aug 15 10:01:20 localhost kernel: ftp new link: IN=ens33 OUT= MAC=00:0c:29:fe:e5:bf:00:0c:29:2a:d6:05:08:00 SRC=192.168.91.101 DST=192.168.91.100
- SNAT:修改数据包的源地址。
- DNAT:修改数据包的目的地址。
- MASQUERADE:伪装成一个非固定公网IP地址。
三,iptables 实际操作
(一)准备
1,换防火墙
2,安装
3,启动
(二)iptables管理选项,和基本功能介绍
1, 清空规则 iptables -F
2,查看规则 L写最后 iptables -vnL
v 详细 n数字化显示 L看规则
3, 加规则
丢弃 来自192.168.217.77 的数据
4, 匹配规则的顺序 (由上至下)
第一个拒绝,第二个允许,所以会拒绝
匹配到拒绝就不向下匹配了
6,看规则的具体编号 iptables -vnL --line-numbers
7, 删除规则 iptables -D
删除 INPUT 链第一个规则
注意:当你删掉前面的规则,后面的序号会顶上去
或者 -F 清空
8, -I (大写的i) 插队
注意,插队2 就是插到第二个,插完你就是第二个
9,允许回环自己 (不论自己有多少块网卡 不论网卡是哪个网段)
原来我们认为的,几个网卡要写几个规则,
但只要一条规则就解决了
10,-P 白名单,黑名单
默认 是黑名单,就是指限制我写在 这个表里的
改成白名单,
生产环境一般用白名单,安全系数高
就是写表里的 可以访问 其他我都拒绝
11,想随时用 iptables -F 又想用白名单怎么办
因为清空规则后,白名单会默认拒绝所有
方法:
默认黑名单(都可以访问)
先加自己,让自己通过防火墙
再拒绝所有,变成白名单(这个规则一定要放最后面,优先让允许的机器通过防火墙)
12,-R 替换
13,自定义链
生产环境用的 比较多
比如在INPUT 链 新建web链 和nginx链
两个互不干扰 也方便查
13.1 自定义链 相关的管理选项
-N | 新加自定义链 |
-X | 清空自定义链的规则,不影响其他链 iptables -X |
-Z | 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z |
-S | 看链的所有规则或者某个链的规则/某个具体规则后面跟编号 |
(三)iptables 匹配条件详细介绍
1,通用匹配
直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
-s 源地址
-d 目的地址
-p 指定协议
-i 进口网卡 只应用于INPUT FORWARD PREROUTING 链
-o 出口网卡 只应用于 FORWARD OUTPUT POSTROUTING 链
1.1 -p 指定协议
(只有tcp 和udp 有端口号)
控制单独协议,不允许ping 可以ssh
2,模块
过滤tcp 模块 (插件)
有这个模块 才能对对应的协议控制
(不要动这些东西!!!)
3,隐含扩展
man iptables-extensions
查看扩展帮助
3.1 隐含扩展介绍
iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。
端口匹配: --sport 源端口、--dport 目的端口
#可以是个别端口、端口范围
即 隐含扩展可以理解为普通功能
本来 -m icmp -p icmp 可以不写 -m
注意: --sport和--dport 必须配合-p <协议类型>使用
3.2 禁止访问80端口
首先客户机是可以curl 服务机
curl 是文字版浏览器 服务机需要装nginx或者httpd
拒绝过来的流量 当目的是端口80
可以看到curl失败 ping正常
3.3 针对 一个ip 禁止多个端口(隐含扩展 端口只可以写范围)
端口可以使用的范围 0-65535
3.4 TCP标记匹配
[root@localhost ~]#iptables -I INPUT -i ens33 -p tcp --tcp-flags FIN,RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包
3.5 ICMP 服务机能ping通客户机 客户机 不能ping通服务机
ping 可能出现的情况
type 类型 | code 码 | 描述 |
0 | 0 | Echo Repiy 回复 |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
11 | 0 | 超时 |
8 | 0 | Echo Request 请求 |
服务机:8 包是请求包,把来自客户机的情报包 丢弃 这样客户机ping不了服务机
3.6 ICMP 服务机能ping通客户机 客户机 不能ping通服务机(第二种方法)
output 丢弃0 包
原理:客户机发送 8包 给服务机
服务机掐掉 要回给客户机的0包
4,显示 扩展模块
显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块
帮助:/usr/share/man/man8/iptables-extensions.8.gz
4.1multiport扩展 禁多个端口
以离散方式定义多端口匹配,最多指定15个端口
端口匹配: --sport 源端口、--dport 目的端口
4.2 iprange扩展 禁/允许 一段ip
指明连续的(但一般不是整个网络)ip地址范围
客户机:
4.3 mac地址
mac 模块可以指明源MAC地址,,适用于:PREROUTING, FORWARD,INPUT chains
只有 源mac 因为目的mac 永远是自己
-m mac [!] --mac-source XX:XX:XX:XX:XX:XX
例子;
[root@zabbix-server ~]#ip a 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether ### 00:0c:29:2a:d6:05 #### inet 192.168.91.101/24 brd 192.168.91.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::ce63:27de:ef4d:4f66/64 scope link valid_lft forever preferred_lft forever [root@localhost ~]#iptables -A INPUT -m mac --mac-source 00:0c:29:2a:d6:05 -j REJECT
4.4 string 字符串
对报文中的应用层数据做字符串模式匹配检测
可以理解为只看真实数据,对真实数据的内容 禁用或允许
--algo {bm|kmp} 字符串匹配检测算法
bm:Boyer-Moore 算法
kmp:Knuth-Pratt-Morris 算法
--from offset 开始查询的地方
--to offset 结束查询的地方
[!] --string pattern 要检测的字符串模式
[!] --hex-string pattern要检测字符串模式,16进制格式
可以看到真实数据大概在第60个字节左右
服务机 去到httpd 的目录,手搓两个html文件
客户机访问 服务机网页目前都正常
服务机 限制“baidu” 真实数据
可以看到效果: baidu 的真实数据获取不到
注意: 为什么是 -A OUTPUT 客户机一开始要访问服务机的时候,不可能知道他要访问什么内容
4.5 time模块
根据将报文到达的时间与指定的时间范围进行匹配 (有 bug ubuntu没问题)
4.6 connlimit扩展
根据每客户端IP做并发连接数数量匹配
可防止Dos(Denial of Service,拒绝服务)攻击
--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配
例子:
一台机器模拟黑客,一个ip 占用非常多的服务机的80端口,此时别的主机就访问不了服务机了
模拟攻击
[root@localhost3 ~]# gcc flood_connect.c -o floodyum
#编译安装 黑客文件
[root@localhost3 ~]# ./flood 192.168.91.100
#运行黑客脚本
服务机做以下防火墙配置:
即同一个ip 超过两次连接80 端口的 拒绝
[root@localhost1 ~]#iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT
4.7 state
状态类型:
- NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
- ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
- RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
- INVALID:无效的连接,如flag标记不正确
- UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪
格式:
--state state ipatables -A INPUT -m state --state NEW -j REJECT ipatables -A INPUT -m state --state ESTABLISHED -j ACCEPT
新用户不可以访问 就用胡可以访问
①
new 作用: 网站维护,老用户继续访问,拒绝新用户
老用户在ping 新用户ping不了
② 故障案例
日志里有这个什么意思 table full drop pket
内核只能追踪这么多用户是新用户还是旧用户
③ 实验
(四)规则优化,实践
- 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高
- 谨慎放行入站的新请求
- 有特殊目的限制访问功能,要在放行规则之前加以拒绝
- 同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理
- 不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更高
- 应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率
- 设置默认策略,建议白名单(只放行特定连接)
A:iptables -P,不建议,容易出现“自杀现象”
B:规则的最后定义规则做为默认策略,推荐使用,放在最后一条
(五) 保存规则
使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限
1,持久保存规则:
CentOS 7,8
iptables-save > /PATH/TO/SOME_RULES_FILE
CentOS 6
#将规则覆盖保存至/etc/sysconfig/iptables文件中 service iptables save
2,加载规则 :
CentOS 7,8 重新载入预存规则文件中规则:
iptables-restore < /PATH/FROM/SOME_RULES_FILE iptables-restore选项 -n, --noflush:不清除原有规则 -t, --test:仅分析生成规则集,但不提交
centos6
#会自动从/etc/sysconfig/iptables 重新载入规则 service iptables restart
3,开机自动重载规则
用脚本保存各个iptables命令;让此脚本开机后自动运行
.bashrc
在/etc/rc.d/rc.local文件添加
iptables-save > /opt/iptables vim ~/.basrc iptables-restore < /opt/iptables
4, iptables-services
[root@centos7 ~]#yum -y install iptables-services [root@centos7 ~]#cp /etc/sysconfig/iptables{,.bak} #保存现在的规则到文件中方法1 [root@centos7 ~]#/usr/libexec/iptables/iptables.init save #保存现在的规则到文件中方法2 [root@centos7 ~]#iptables-save > /etc/sysconfig/iptables #开机启动 [root@centos7 ~]#systemctl enable iptables.service [root@centos7 ~]#systemctl mask firewalld.service nftables.service
先用save 存一个文件
哪怕清空也可以
再用 restore恢复
想要开机生效:
写 iptables-restore < /data/123
加执行权限
(六)自定义链
新增一个自定义链
给自定义链 加规则
怎么用 自定义连
当流量进到 input 先去匹配web 的规则
如何删除 直接删 删不掉
四 NAT
NAT: network address translation,支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链
请求报文:修改源/目标IP,
响应报文:修改源/目标IP,根据跟踪机制自动实现
NAT的实现分为下面类型:
SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改源IP
DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP
PNAT: port nat,端口和IP都进行修改
(一) SNAT
让内网机器 可以访问外网的服务器
1,SNAT原理
源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映谢
2,SNAT应用
SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由)
3,SNAT转换前提条件
1.局域网各主机已正确设置IP地址、子网掩码、默认网关地址
2.Linux网关开启IP路由转发 linxu系统本身是没有转发功能 只有路由发送数据
(Linux网关开启IP路由转发)
4, 过程图
(二)DNAT
将内网机器的服务暴露在公网,让客户可以访问
1, DNAT原理
DNAT原理:目的地址转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映谢。
2,DNAT应用:
DNAT应用环境:在Internet中发布位于局域网内的服务器
3,DNAT转换前提条件:
1.局域网的服务器能够访问Internet
2.网关的外网地址有正确的DNS解析记录
3. Linux网关开启IP路由转发
4, 过程
内网有一个 网页服务器 想要给外网用户访问
外网用户直接访问 192.168.91.100 是访问不了 公网没有 192段地址
需要借助 DNAT 技术 将 192.168.91.100 :80 映射成 12.0.0.1:80
12.0.0.1:80 等于 访问 192.168.91.100:80
五 bond
(一) bond 介绍
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过 bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址
(二)bond聚合链路模式
bond聚合链路模式共7种模式:0-6 Mode
1,mod=0
即:(balance-rr) Round-robin policy(轮询)聚合口数据报文按包轮询从物理接口转发。 负载均衡—所有链路处于负载均衡状态,轮询方式往每条链路发送报文这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。 性能问题—一个连接或者会话的数据包如果从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。Bond0在大压力的网络传输下,性能增长的并不是很理想。 需要交换机进行端口绑定
2,mod=1
即: (active-backup) Active-backup policy(主-备份策略)只有Active状态的物理接口才转发数据报文。容错能力—只有一个slave是激活的(active)。也就是说同一时刻只有一个网卡处于工作状态,其他的slave都处于备份状态,只有在当前激活的slave故障后才有可能会变为激活的(active)。无负载均衡—此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。
3,mod=2
即:(balance-xor) XOR policy(平衡策略)聚合口数据报文按源目MAC、源目IP、源目端口进行异或HASH运算得到一个值,根据该值查找接口转发数据报文负载均衡—基于指定的传输HASH策略传输数据包。容错能力—这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。性能问题—该模式将限定流量,以保证到达特定对端的流量总是从同一个接口上发出。既然目的地是通过MAC地址来决定的,因此该模式在“本地”网络配置下可以工作得很好。如果所有流量是通过单个路由器,由于只有一个网关,源和目标mac都固定了,那么这个算法算出的线路就一直是同一条,那么这种模式就没有多少意义了。 需要交换机配置为port channel
4,mod=3
即:broadcast(广播策略)这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去,当有对端交换机失效,感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容错机制。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。
5,mod=4
即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)在动态聚合模式下,聚合组内的成员端口上均启用LACP(链路汇聚控制协议)协议,其端口状态通过该协议自动进行维护。负载均衡—基于指定的传输HASH策略传输数据包。默认算法与blance-xor一样。容错能力—这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。对比blance-xor,这种模式定期发送LACPDU报文维护链路聚合状态,保证链路质量。 需要交换机支持LACP协议
6,mod=5
即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)在每个物理接口上根据当前的负载(根据速度计算)分配外出流量。如果正在接收数据的物理接口口出故障了,另一个物理接口接管该故障物理口的MAC地址。 需要ethtool支持获取每个slave的速率
7,mod=6
即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡,而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个物理接口的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量
(三)聚合链路模式总结
常用的模式为 0,1,3,6
mode 1、5、6 不需要交换机设置
mode 0、2、3、4需要交换机设置
active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需
要配置交换机以便整合链接。如:Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和 EtherChannel
(四) nmli命令
1, 语法格式
#查看帮助 nmcli con add help #使用nmcli配置网络 nmcli con show #显示所有活动连接 nmcli con show --active #显示网络连接配置 nmcli con show "System eth0“ #显示设备状态 nmcli dev status #显示网络接口属性 nmcli dev show eth0 #创建新连接default,IP自动通过dhcp获取 nmcli con add con-name default type Ethernet ifname eth0 #删除连接 nmcli con del default #创建新连接static ,指定静态IP,不自动连接 nmcti con add con-name static ifname eth0 autoconnect no type Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254 #启用static连接配置 nmcli con up static #启用default连接配置 nmcli con up default #修改连接设置 nmcli con mod “static” connection.autoconnect no nmcli con mod “static” ipv4.dns 172.25.X.254 nmcli con mod “static” +ipv4.dns 8.8.8.8 nmcli con mod “static” -ipv4.dns 8.8.8.8 nmcli con mod “static” ipv4.addresses “172.16.X.10/24 172.16.X.254” nmcli con mod “static” +ipv4.addresses 10.10.10.10/16 #DNS设置存放在/etc/resolv.conf,PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置, 不自动获取等价于下面命令 nmcli con mod “system eth0” ipv4.ignore-auto-dns yes
#添加bonding接口 nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup ipv4.method manual ipv4.addresses 192.168.91.100/24 #添加从属接口 nmcli con add type bond-slave ifname ens7 master bond0 nmcli con add type bond-slave ifname ens33 master bond0 #注:如无为从属接口提供连接名,则该名称是接口名称加类型构成 #要启动绑定,则必须首先启动从属接口 nmcli con up bond-slave-ens33 nmcli con up bond-slave-ens37 #启动绑定 nmcli con up mybond0
2, 改文件的方式
/etc/sysconfig/network-scripts/ifcfg-bond0 NAME=bond0 TYPE=bond DEVICE=bond0 BOOTPROTO=none IPADDR=10.0.0.100 PREFIX=8 #miimon指定链路监测时间间隔。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一 条线路不通就转入另一条线路 BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1" /etc/sysconfig/network-scripts/ifcfg-eth0 NAME=eth0 DEVICE=eth0 BOOTPROTO=none MASTER=bond0 SLAVE=yes ONBOOT=yes /etc/sysconfig/network-scripts/ifcfg-eth1 NAME=eth1 DEVICE=eth1 BOOTPROTO=none MASTER=bond0 SLAVE=yes ONBOOT=yes
3,命令行
[root@localhost ~]#nmcli connection add con-name mybond0 ifname bond0 type bond ipv4.method manual ipv4.addresses 192.168.91.100/24 mode active-backup #active-backup bond 模式 连接“mybond0”(422ba65f-12cd-4edd-9d4d-367b6c205823) 已成功添加。 [root@localhost network-scripts]#ls ifcfg-ens33 ifdown-isdn ifup-bnep ifup-routes ifcfg-ens37 ifdown-post ifup-eth ifup-sit ifcfg-lo ifdown-ppp ifup-ib ifup-Team ifcfg-mybond0 ifdown-routes ifup-ippp ifup-TeamPort ifdown ifdown-sit ifup-ipv6 ifup-tunnel ifdown-bnep ifdown-Team ifup-isdn ifup-wireless ifdown-eth ifdown-TeamPort ifup-plip init.ipv6-global ifdown-ib ifdown-tunnel ifup-plusb network-functions ifdown-ippp ifup ifup-post network-functions-ipv6 ifdown-ipv6 ifup-aliases ifup-ppp [root@localhost network-scripts]#cat ifcfg-mybond0 DEVICE=bond0 BONDING_OPTS=mode=active-backup TYPE=Bond BONDING_MASTER=yes PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none IPADDR=192.168.91.100 PREFIX=24 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=mybond0 UUID=422ba65f-12cd-4edd-9d4d-367b6c205823 ONBOOT=yes [root@localhost network-scripts]#nmcli connection add type bond-slave ifname ens36 master bond0 连接“bond-slave-ens37”(386628bb-94b5-4c98-9023-f3fab154943d) 已成功添加。 [root@localhost network-scripts]#nmcli connection add type bond-slave ifname ens33 master bond0 连接“bond-slave-ens33”(c97d22d5-23c2-472f-891e-dff378b7f69f) 已成功添加。 [root@localhost network-scripts]#nmcli connection 名称 UUID 类型 设备 ens33 12156d92-6495-4c69-82e9-c0e22f532f76 802-3-ethernet ens33 mybond0 422ba65f-12cd-4edd-9d4d-367b6c205823 bond bond0 virbr0 335fcf86-189c-4513-9deb-da344ff280dd bridge virbr0 有线连接 1 d62f0f08-f45b-3548-815d-30dbca7821f6 802-3-ethernet ens37 bond-slave-ens33 c97d22d5-23c2-472f-891e-dff378b7f69f 802-3-ethernet -- bond-slave-ens37 386628bb-94b5-4c98-9023-f3fab154943d 802-3-ethernet -- [root@localhost network-scripts]#nmcli connection up bond-slave-ens33 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/24) [root@localhost network-scripts]#nmcli connection up bond-slave-ens36 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/25) [root@localhost network-scripts]#cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: ens33 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: ens33 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:fe:e5:bf Slave queue ID: 0 Slave Interface: ens37 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:fe:e5:c9 Slave queue ID: 0