关于IT运维技术的
最佳实践博客网站

rhel7和centos7使用nmcli命令管理配置网络

Red Hat Enterprise Linux 7 与 CentOS 7 中默认的网络服务由 NetworkManager 提供,这是动态控制及配置网络的守护进程,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的 ifcfg 类型的配置文件。

NetworkManager 可以用于以下类型的连接:Ethernet,VLANS,Bridges,Bonds,Teams,Wi-Fi,mobile boradband(如移动3G)以及 IP-over-InfiniBand。针对与这些网络类型,NetworkManager 可以配置他们的网络别名,IP 地址,静态路由,DNS,VPN连接以及很多其它的特殊参数。

nmcli 只是 以文本方式去管理和配置 NetworkManager的工具,从此在也不用担心敲错字段了。

一、使用 nmcli 配置给网络设备添加新的配置

一个网卡设备可以有无数个配置信息。但是最终启用的只能是某一个。这样增加了适应复杂的网络环境的能力,不同的环境使用不同的配置,来实现网络的链接。

1、查看nmcli使用说明

[root@rehl7 ~]# nmcli help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -t[erse]                                   简洁输出
  -p[retty]                                  美化输出
  -m[ode] tabular|multiline                  输出模式
  -f[ields] <field1,field2,...>|all|common   指定字段输出
  -e[scape] yes|no                           指定分隔符
  -n[ocheck]                                 不检测版本
  -a[sk]                                     询问缺失参数
  -w[ait] <seconds>                          设置超时等待完成操作
  -v[ersion]                                 显示版本
  -h[elp]                                    获得帮助

OBJECT
  g[eneral]       常规管理
  n[etworking]    全面的网络控制
  r[adio]         无线网络管理
  c[onnection]    网络连接管理
  d[evice]        网络设备管理
  a[gent]         网络代理管理

2、可以通过 TAB 键补全命令,当你忘记这个命令的语法时只需要按下 TAB 就可以看到选项列表。

[root@rehl7 ~]# nmcli
agent       device      help        radio
connection  general     networking

3、查看基本的网络开启状况

[root@rehl7 ~]# nmcli general status
状态    CONNECTIVITY  WIFI-HW  WIFI    WWAN-HW  WWAN
连接的  全部          已启用   已启用  已启用   已启用

4、查看网络链接状况

[root@rehl7 ~]# nmcli connection show
名称         UUID                                  类型            设备
eno16777736  3c4b0e86-86f3-4cb3-93e4-b7ce5a1ac203  802-3-ethernet  eno16777736

5、查看网络设备

[root@rehl7 ~]# nmcli device status
设备         类型      状态    CONNECTION
eno16777736  ethernet  连接的  eno16777736
eno33554992  ethernet  已断开  --
lo           loopback  未管理  --

6、启用和停止网络设备接口

#启用
[root@rehl7 ~]# nmcli device connect eno33554992
Device 'eno33554992' successfully activated with 'b22d152b-1a71-43e5-9207-e8881bf07810'.
#停止
[root@rehl7 ~]# nmcli device disconnect eno33554992
Device 'eno33554992' successfully disconnected.

7、给网卡设备设置静态IP

方法:

nmcli connection add type ethernet con-name NAME_OF_CONNECTION ifname interface-name ip4 IP_ADDRESS gw4 GW_ADDRESS

根据你需要的配置更改 NAME_OF_CONNECTION,IP_ADDRESS, GW_ADDRESS 参数(如果不需要网关的话可以省略最后一部分)。

例子:

[root@rehl7 ~]# nmcli connection add type ethernet con-name NEW ifname eno33554992 ip4 172.16.0.153/24 gw4 172.16.0.1
成功添加的连接 'NEW'(f7eb088f-6484-4d41-9512-2f86bc74f2b2)。

8、设置DNS服务器

nmcli connection modify NEW ipv4.dns "8.8.8.8 8.8.4.4"

9、启动新的配置到 Ethernet 连接

[root@rehl7 ~]# nmcli connection up NEW ifname eno33554992
成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/4)

10、查看新连接的配置信息

[root@rehl7 ~]# nmcli -pretty --fields ipv4 connection show NEW
===============================================================================
                       Connection profile details (NEW)
===============================================================================
ipv4.method:                            manual
ipv4.dns:                               8.8.8.8,8.8.4.4
ipv4.dns-search:
ipv4.addresses:                         172.16.0.153/24
ipv4.gateway:                           172.16.0.1
ipv4.routes:
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
-------------------------------------------------------------------------------

11、增加一个使用 DHCP 的新连接

增加新的连接,使用DHCP自动分配IP地址,网关,DNS等,你要做的就是将命令行后 ip/gw 地址部分去掉就行了,DHCP会自动分配这些参数。

#在 eno 16777736 设备上配置一个 名为 NEW_DHCP 的 DHCP 连接
[root@server0 ~]# nmcli connection add con-name NEW-DHCP type ethernet ifname eth0 
Connection 'NEW-DHCP' (7de75acb-0050-4a63-9817-cb081d52ada7) successfully added.

二、使用 nmcli 进行多网卡绑定(网络合作)

网卡(接口)绑定是将多块 网卡 逻辑地连接到一起从而允许故障转移或者提高吞吐率的方法。提高服务器网络可用性的一个方式是使用多个网卡。Linux 绑定驱动程序提供了一种将多个网卡聚合到一个逻辑的绑定接口的方法。这是个新的实现绑定的方法,并不影响 linux 内核中旧绑定驱动。

RHEL7中使用了内核和守护进程 teamd 来实施网络合作,内核高效的处理网络包,teamd 进程负责逻辑和接口处理。称为运行程序的软件实施负载均衡和主动备份逻辑。以下运行程序可供 teamd 使用:

  • broadcast 传输来自所有端口的包。
  • roundrobin 以轮循的方式传输所有端口的包。
  • activebakup 这是一个故障迁移程序,监控链接更改并选择活动的端口进行传输。
  • loadbalance 监控流量并使用哈希函数以尝试在选择传输端口的时候达到完美均衡。
  • lacp 实施802.3ad 链路聚合协议,可以使用与 loadbalance 运行程序相同的传输端口选择的可能性。

1、查看系统中可用的接口信息(网卡)

[root@server0 ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:00:00:0b brd ff:ff:ff:ff:ff:ff
4: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether c6:39:9b:d2:4b:d4 brd ff:ff:ff:ff:ff:ff
6: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 22:0a:f4:ea:a6:6a brd ff:ff:ff:ff:ff:ff

可用的接口有3个分别是:eth0 、eno1、 eno2。

实验使用: eno1 和 eno2 网卡在 “主动备份” 模式下创建一个组接口。

2、用 nmcli 命令为网络组接口创建一个连接。

方法:

 nmcli connection add type team con-name CNAME ifname INAME [config JSON]

CNAME 指代连接的名称,INAME 是接口名称,JSON (JavaScript Object Notation) 指定所使用的处理器(runner)。JSON 语法格式如下:

'{"runner":{"name":"METHOD"}}'

METHOD 是以下的其中一个:broadcast、activebackup、roundrobin、loadbalance 或者 lacp

[root@server0 ~]# nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}'
Connection 'team0' (e8496995-3e23-48ea-bbc5-3fef6527f056) successfully added.

3、验证组接口配置

[root@server0 ~]# nmcli connection show 
NAME         UUID                                  TYPE            DEVICE   
System eth0  5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  802-3-ethernet  eth0
NEW-DHCP     7de75acb-0050-4a63-9817-cb081d52ada7  802-3-ethernet  -- 
team0        e8496995-3e23-48ea-bbc5-3fef6527f056  team            team0

4、添加 eno1、eno2 作为端口接口 到 组接口 team0 中去。

方法:

nmcli con add type team-slave con-name CNAME ifname INAME master TEAM
[root@server0 ~]# nmcli connection add type team-slave con-name team0-port1 ifname eno1 master team0
Connection 'team0-port1' (2bf5449a-87ee-4614-ad89-f54df830a11e) successfully added.
[root@server0 ~]# nmcli connection add type team-slave con-name team0-port2 ifname eno2 master team0
Connection 'team0-port2' (3474f40d-a365-4714-8c37-802252fcec65) successfully added.

5、验证team0中添加的从设备信息

[root@server0 ~]# nmcli connection show 
NAME         UUID                                  TYPE            DEVICE    
System eth0  5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  802-3-ethernet  eth0   
team0-port2  3474f40d-a365-4714-8c37-802252fcec65  802-3-ethernet  eno2   
team0-port1  2bf5449a-87ee-4614-ad89-f54df830a11e  802-3-ethernet  eno1   
team0        e8496995-3e23-48ea-bbc5-3fef6527f056  team            team0  
NEW-DHCP     7de75acb-0050-4a63-9817-cb081d52ada7  802-3-ethernet  --

6、使用静态方法 为 team0 分配 IPV4

[root@server0 ~]# nmcli connection modify team0 ipv4.addresses '172.25.0.13/24 172.25.0.254'
[root@server0 ~]# nmcli connection modify team0 ipv4.method manual
[root@server0 ~]# nmcli connection up team0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)

7、验证 team0 绑定的 IP 信息

[root@server0 ~]# ip addr show team0 
7: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 22:0a:f4:ea:a6:6a brd ff:ff:ff:ff:ff:ff
    inet 172.25.0.13/24 brd 172.25.0.255 scope global team0
       valid_lft forever preferred_lft forever
    inet6 fe80::200a:f4ff:feea:a66a/64 scope link 
       valid_lft forever preferred_lft forever

8、用 teamdctl 命令检查 主动备份 配置功能。

[root@server0 ~]# teamdctl team0 state
setup:
  runner: activebackup
ports:
  eno1
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
  eno2
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
runner:
  active port: eno2

上面显示激活的接口是 eno2 ,假设 eno2 出现故障(关闭 eno2)呢?应该是eno1自动的成为激活的接口。

[root@server0 ~]# nmcli device disconnect eno2 
[root@server0 ~]# teamdctl team0 state
setup:
  runner: activebackup
ports:
  eno1
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
runner:
  active port: eno1

如果 eno2 恢复了呢?

[root@server0 ~]# nmcli device connect eno2
Device 'eno2' successfully activated with '3474f40d-a365-4714-8c37-802252fcec65'.
[root@server0 ~]# teamdctl team0 state
setup:
  runner: activebackup
ports:
  eno1
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
  eno2
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
runner:
  active port: eno1

虽然 eno2 恢复了但是 eno1已经接替了 eno2的工作,即使恢复了也不会立即成为活跃的接口。只有等待下一次 eno1 出现故障后,eno2 才会再一次接替eno1的工作。

这里其实可以采用 ping 的方式来测试。开启一个新的终端去 ping team0 的 IP,关闭其中的任意一个 eno1、eno2。观察发现一直会 ping 通的,没有出现断开的迹象。说明用户完全无感知,实现了最基本的故障迁移能力。

9、检查在 team0 有几个接口在运行

[root@server0 ~]# teamnl team0 ports
 6: eno2: up 10000Mbit FD 
 4: eno1: up 10000Mbit FD

10、查看活跃的接口是那个

[root@server0 ~]# teamnl team0 getoption activeport
4

成功把多网卡绑定成为一个 组接口。

赞(2)
未经允许不得转载:菜鸟HOW站长 » rhel7和centos7使用nmcli命令管理配置网络

留下你的脚印

  Subscribe  
提醒