nmcli命令用法
Linux下用nmcli命令做网卡绑定,你还不会用?
实战引入:两块网卡做bond6
# 1. 先备份原有网络配置文件
cp /etc/sysconfig/network-scripts/ifcfg-eno* .
# 2. 看一下当前有哪些网卡
[root@m01 ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 16d2cd29-5a42-4d84-91ba-eef9ac8e212a ethernet ens33
ens34 73058591-0684-482a-843f-d58630f02a29 ethernet ens34
# 3. 先创建一个bond类型的网卡,我们采用bond6
nmcli connection add con-name bond6 ifname bond6 type bond mode 6
# 4. 向新创建的bond6网卡添加两块实体网卡(就是上面看到的ens33、ens34),bond6作为主网卡
nmcli connection add con-name slave1 ifname ens33 type ethernet master bond6
nmcli connection add con-name slave2 ifname ens34 type ethernet master bond6
# 5. 修改bond6的信息:设置静态ip,地址为172.18.2.12,并且设置开机自启动,网关是172.18.2.254
nmcli connection modify bond6 ipv4.method manual connection.autoconnect yes ipv4.addresses 172.18.2.12 ipv4.gateway 172.18.2.254
# 6. 启动网卡。这时候我们就绑定成功了
nmcli connection up bond6
好了,现在已经会用nmcli做bond6了。那我们接下来详细看看nmcli的用法。
nmcli – command-line tool for controlling NetworkManager。CentOS / RHEL 7中的网络管理命令行工具。
NetworkManager 是CentOS 7及以后的发行版中默认的网络服务,提供动态控制及配置网络的守护进程。
如果说ip命令是对网络进行配置的命令,那么nmcli更多的是对网卡进行配置的命令。
使用格式:
nmcli [OPTIONS] OBJECT { COMMAND | help }
详解:
[root@m01 ~]# nmcli help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS
-a, --ask ask for missing parameters
-c, --colors auto|yes|no whether to use colors in output
-e, --escape yes|no escape columns separators in values
-f, --fields <field,...>|all|common specify fields to output
-g, --get-values <field,...>|all|common shortcut for -m tabular -t -f
-h, --help print this help
-m, --mode tabular|multiline output mode
-o, --overview overview mode
-p, --pretty pretty output
-s, --show-secrets allow displaying passwords
-t, --terse terse output
-v, --version show program version
-w, --wait <seconds> set timeout waiting for finishing operations
OBJECT
g[eneral] NetworkManager's general status and operations
n[etworking] overall networking control
r[adio] NetworkManager radio switches
c[onnection] NetworkManager's connections
d[evice] devices managed by NetworkManager
a[gent] NetworkManager secret agent or polkit agent
m[onitor] monitor NetworkManager changes
OPTIONS:
-c 输出结果的时候自动带上颜色
-f 指定要输出的字段。【网络配置文件中的字段】
OBJECT:
这个字段可以简写,即可以只写开头的一个字母。
g[eneral] 网络管理的一般状态和操作
n[etworking] 整体网络控制
c[onnection] 管理网络连接
d[evice] 管理网络设备
m[onitor] 监控网络变化
nmcli general
使用格式:
nmcli general {status | hostname | permissions | logging}
使用此命令可以显示网络管理器状态和权限,你可以获取和更改系统主机名,以及网络管理器日志记录级别和域。
使用示例:
# 查看网络管理状态
[root@m01 ~]# nmcli general status
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled enabled enabled enabled
[root@m01 ~]# nmcli general hostname
localhost.localdomain
[root@m01 ~]# nmcli general permissions
nmcli networking
使用格式:
nmcli networking {on | off | connectivity}
用来查询NetworkManager网络状态。即网络是否被NetworkManager管理。
[root@m01 ~]# nmcli ne connectivity
full
上面的输出结果说明:主机与网络相连,可以完全访问Internet。
还有一些其他输出,我们来看看:
-
on: 禁用所有接口
-
off: 开启所有接口
-
connectivity: 获取网络状态,可选参数checl告诉网络管理器重新检查连接性,否则显示最近已知的状态。而无需重新检查。(可能的状态如下所示)
-
none: 主机为连接到任何网络
-
portal: 无法到达完整的互联网
-
limited: 主机已连接到网络,但无法访问互联网
-
full: 主机连接到网络,并具有完全访问
-
unknown: 无法找到连接状态
nmcli connection
使用格式:
nmcli connection {show | up | down | modify | add | edit | clone | delete | monitor | reload | load | import | export} [ARGUMENTS...]
show 查看网络信息
up 启动(激活)一个连接
down 关闭一个连接
modify 修改已有的网络配置信息
add 添加网络配置信息
edit 编辑一个已有的或者添加一个新的连接
delete 删除一个连接
实例演示:
-
查看所有网络连接
nmcli c show
-
查看活动的网络连接
nmcli c show -active
-
查看指定网卡的信息
nmcli c show ens33
-
网卡状态修改
nmcli connection up ens33
-
停用网络连接
nmcli c down ens33
-
删除网络连接的配置文件
nmcli c delete ens33
-
重新加载网络配置文件
nmcli c reload
-
修改网卡配置文件
自动启动网卡。实际修改的是网卡配置文件ONBOOT=yes
nmcli c modify ens34 connection.autoconnect yes
-
设置IP地址获取方式是手动或者DHCP
# 手动设置IPv4地址,如果原本是DHCP获取地址,改手动后,如果后面不接IP地址,可能会报错
[root@m01 ~]# nmcli connection modify ens37 ipv4.method manual ipv4.addresses 172.16.10.1/16
# 设置IP地址为DHCP
[root@m01 ~]# nmcli connection modify ens37 ipv4.method auto
实际修改的是网卡配置文件BOOTPROTO,BOOTPROTO=none 表示手动;BOOTPROTO=dhcp 表示dhcp -
修改IP地址
实际修改的是网卡配置文件:IPADDR=172.17.18.19 PREFIX=24
nmcli c modify ens37 ipv4.address 172.17.18.19/24
-
添加DNS
nmcli c modify ens37 ipv4.dns 223.5.5.5
实际修改的是网卡配置文件:DNS1=223.5.5.5
-
添加第二个IP地址
nmcli c modify ens37 +ipv4.address 172.17.18.29/24
实际修改的是网卡配置文件:IPADDR1=172.17.18.29 PREFIX1=24
-
添加网卡
nmcli c add type ethernet ifname ens35 con-name ens35
nmcli connection实战应用
网卡bond或team是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余、带宽扩容或负载均衡。
常见的bond模式:
Mode=0(balance-rr) 表示负载分担round-robin,需要交换机端也做端口聚合。
Mode=1(active-backup) 表示主备模式,只有一块网卡是active,另外一块是备的standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的。
Mode=2(balance-xor) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。
Mode=3(broadcast) 表示所有包从所有interface发出,这个不均衡,只有冗余机制…和交换机的聚合强制不协商方式配合。
Mode=4(802.3ad) 表示支持802.3ad协议,和交换机的聚合LACP方式配合。
Mode=5(balance-tlb) 根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave
Mode=6(balance-alb) 在5的tlb基础上增加了rlb。
-
两块网卡绑定做bond6
# 1. 先备份原有网络配置文件
cp /etc/sysconfig/network-scripts/ifcfg-eno* .
# 2. 看一下当前有哪些网卡
[root@m01 ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 16d2cd29-5a42-4d84-91ba-eef9ac8e212a ethernet ens33
ens34 73058591-0684-482a-843f-d58630f02a29 ethernet ens34
# 3. 先创建一个bond类型的网卡,我们采用bond6
nmcli connection add con-name bond6 ifname bond6 type bond mode 6
# 4. 向新创建的bond6网卡添加两块实体网卡(就是上面看到的ens33、ens34),bond6作为主网卡
nmcli connection add con-name slave1 ifname ens33 type ethernet master bond6
nmcli connection add con-name slave2 ifname ens34 type ethernet master bond6
# 5. 修改bond6的信息:设置静态ip,地址为172.18.2.12,并且设置开机自启动,网关是172.18.2.254
nmcli connection modify bond6 ipv4.method manual connection.autoconnect yes ipv4.addresses 172.18.2.12 ipv4.gateway 172.18.2.254
# 6. 启动网卡。这时候我们就绑定成功了
nmcli connection up bond6
说明:
connection add 添加新的连接
con-name 连接名
type 设备类型
ifname 接口名
请自行测试:我们可以断开ens33或ens34,断开一个,网络可以正常通信,就说明bond6做成功了。
注意:如果做bond0的话,在vmware workstation虚拟机中做就会出现适配器不具有网络连接的现象,但是bond0能够正常启动也能够正常使用,只不过没有起到备份模式的效果。
当使用ifdown eth0后,网络出现不通现象。这和VMware的工作方式以及内核获取mac地址的方式有关。不用纠结这个。
2. 两块网卡做team绑定
team和bond一样是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量。
team不同于bond技术,team提供更好的性能和扩展性。team由内核驱动和teamd守护进程实现。
team的模式:
1. broadcast
2. roundrobin
3. activebackup
4. loadbalance
5. lacp
# 1. 创建一个网卡team0,同时会自动生成相应的配置文件
nmcli connection add type team ifname team0 con-name team0 config '{"runner": {"name": "activebackup"}}'
# 2. 配置team0的ip地址
nmcli connection modify team0 ipv4.addresses '10.0.0.7/24'
# 3. 这是team0的网卡ip为静态配置
nmcli connection modify team0 ipv4.method manual
# 4. 把ens33、34网卡绑定到team0上
nmcli connection add type team-slave ifname ens33 con-name ens33 master team0
nmcli connection add type team-slave ifname ens34 con-name ens34 master team0
# 5. 启动网卡
nmcli connection up team0
nmcli connection up ens33
nmcli connection up ens34
# 6. 查看连接状态
teamdctl team0 stat
# 返回结果有link summary: up就说明成功了,然后测试连通性就可以了。
nmcli device
使用格式:
nmcli device {status | show | set | connect | reapply | modify | disconnect | delete | monitor | wifi | lldp} [ARGUMENTS...]
实例演示:
-
查看所有网络设备详情
nmcli d show
-
查看网络设备的连接状态
nmcli d status
-
禁用网卡防止被激活
nmcli d disconnect ens34
推荐阅读
Linux 网络状态工具 ss 命令详解
这次终于搞明白VLAN技术了
放后台的Linux任务没有了,试试这个命令ifconfig已淘汰,ip登场我是如何用10分钟理解Kubernetes的
除每周二、四、六定期更新的《Linux云计算一站式教程》以外,其余时间雷哥会推送一些工作中遇到的小知识、实战经验总结的文章。后续都会收录在“实战经验”合集中。