Red Hat Enterprise Linux 7 与 CentOS 7 中默认的网络服务由 NetworkManager 提供,这是动态控制及配置网络的守护进程,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的 ifcfg 类型的配置文件。可以用命令行工具 nmcli 来控制 NetworkManager,相应的也有一个图形化的配置工具nmtui。NetworkManager 可以用于以下类型的连接:Ethernet,VLANS,Bridges,Bonds,Teams,Wi-Fi,mobile boradband(如移动3G)以及 IP-over-InfiniBand。针对与这些网络类型,NetworkManager 可以配置他们的网络别名,IP 地址,静态路由,DNS,VPN连接以及很多其它的特殊参数。

一、nmcli 配置IPv4地址

下面是新增一个连接名为static对应的物理网口为eth0,并配置开机不自动启动,并配置相应的网关与地址

1# nmcli connection add conn-name "static" ifname eth0 autoconnect no type ethernet ipv4 192.168.0.100/24 gw4  192.168.0.1    //新增连接不自动连接

针对一个已存在的接口,我们也可以通过nmcli 修改其对应的IP地址

1# nmcli connection modify static ipv4.addr "192.168.1.23/24 192.168.1.1" ipv4.method manual //修改连接的IP地址

在centos 6中我们需要事行定义好几个cfg文件,也可以实现单个网口在多个环境下IP之间的随意切换,不过在centos7里明显加强了通过命令实现这种切换的概念,如下:

1# nmcli connection  add con-name "default" type ethernet ifname eth0
2Connection 'default' (f15e2684-7aaa-4fbc-83de-ad10c7dee0eb) successfully added.
3# nmcli conn up "static"     //启用上面的静态地址配置
4# nmcli conn up "default"   //切回dhcp

默认情况下通过nmcli add 或 modify的操作只是修改了配置文件,并不会立即生效,想要生效启用,需要通过“nmcli conn up 接口名” 来启用对应的配置。所以通过这两个配置文件,我们像上面一样来回切换。

1# nmcli conn mod "static" connection.autoconnect no   关闭开机自动连接
2# nmcli conn mod "static"  ipv4.dns 192.168.0.254     设置DNS
3# nmcli conn mod "static"  +ipv4.dns 192.168.0.254   +/-号用于增加或减少备用DNS
4# nmcli conn mod "static"  +ipv4.addresses "172.10.10.100/25"  增加第二地址,并且不设备网关
5# nmcli connection modify eth0 +ipv4.routes 192.168.122.0/24 ipv4.gateway 10.10.10.1   配置路由

nmcli命令实际上编辑的还是/etc/sysconfig/network-scripts/ifcfg-*文件。在不想使用该文件时,可以通过delete删除对应的接口:

1# nmcli connection delete ens3

二、nmcli 配置IPv6地址

ipv6下的配置与ipv4使用的差数差不多,只不过将ipv4换成了ipv6,如下:

1# nmcli connection modify eth1 ipv6.addresses '2001:ac18::132/64' ipv6.method manual
2# nmcli connection up eth1
3# ping6 2001:ac18::132
4PING 2001:ac18::132(2001:ac18::132) 56 data bytes
564 bytes from 2001:ac18::132: icmp_seq=1 ttl=64 time=0.052 ms

需要注意的是测试ipv6的连接性,使用ping6而不是ping 。

三、nmcli 的其他常用用法

设置主机名

1# nmcli general hostname  361way  其等价于
2# hostnamectl set-hostname 361way

查看当前的连接

 1# nmcli connection show
 2NAME                UUID                                  TYPE            DEVICE
 3vnet1               a9be8935-fde1-4768-9611-74475e1c7e01  generic         vnet1
 4Bridge eno16777736  d2d68553-f97e-7549-7a26-b34a26f29318  bridge          br0
 5System eno16777736  0756a150-f4ee-4502-a0fb-eff8caad35e6  802-3-ethernet  --
 6ens3                49d0dcc3-3e5e-49f0-80b7-2c8f3994c046  802-3-ethernet  ens3
 7# nmcli connection show --active
 8NAME                UUID                                  TYPE            DEVICE
 9vnet1               a9be8935-fde1-4768-9611-74475e1c7e01  generic         vnet1
10virbr0              cd0fd5d5-2b71-4c1a-b66d-1801c881e37f  bridge          virbr0
11Bridge eno16777736  d2d68553-f97e-7549-7a26-b34a26f29318  bridge          br0
12ens3                49d0dcc3-3e5e-49f0-80b7-2c8f3994c046  802-3-ethernet  ens3

查看连接接口的详细信息

 1# nmcli connection show br1  //对应的不是设备名,而是name
 2Error: br1 - no such connection profile.   //是不是看到报错了,我们换成name值再试下
 3# nmcli connection show "System eno16777736"
 4connection.id:                          System eno16777736
 5connection.uuid:                        0756a150-f4ee-4502-a0fb-eff8caad35e6
 6connection.interface-name:              eno16777736
 7connection.type:                        802-3-ethernet
 8connection.autoconnect:                 yes
 9connection.autoconnect-priority:        0
10connection.timestamp:                   1447576534
11connection.read-only:                   no
12connection.permissions:
13connection.zone:                        --
14connection.master:                      br0
15connection.slave-type:                  bridge
16connection.secondaries:
17connection.gateway-ping-timeout:        0
18802-3-ethernet.port:                    --
19802-3-ethernet.speed:                   0
20802-3-ethernet.duplex:                  --
21802-3-ethernet.auto-negotiate:          yes
22802-3-ethernet.mac-address:             --
23802-3-ethernet.cloned-mac-address:      --
24802-3-ethernet.mac-address-blacklist:
25802-3-ethernet.mtu:                     auto
26802-3-ethernet.s390-subchannels:
27802-3-ethernet.s390-nettype:            --
28802-3-ethernet.s390-options:
29bridge-port.priority:                   32
30bridge-port.path-cost:                  100
31bridge-port.hairpin-mode:               no

查看设备信息

 1# nmcli device status
 2DEVICE      TYPE      STATE      CONNECTION
 3br0         bridge    connected  Bridge eno16777736
 4ens3        ethernet  connected  ens3
 5lo          loopback  unmanaged  --
 6virbr0-nic  tap       unmanaged  --
 7
 8# nmcli device show ens3
 9GENERAL.DEVICE:                         ens3
10GENERAL.TYPE:                           ethernet
11GENERAL.HWADDR:                         52:54:00:12:34:22
12GENERAL.MTU:                            1500
13GENERAL.STATE:                          100 (connected)
14GENERAL.CONNECTION:                     ens3
15GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
16WIRED-PROPERTIES.CARRIER:               on
17IP4.ADDRESS[1]:                         192.168.0.105/25
18IP4.GATEWAY:
19IP6.ADDRESS[1]:                         fe80::5054:ff:fe12:3422/64
20IP6.GATEWAY:

四、nmtui 图形化配置

1、通过nmtui 选择第一项,并选择相应的网卡后,可以配置IP地址

nmtui nmtui-network

2、通过nmtui设置主机名

nmtui-hostname

3、通过nm-connection-editor直接修改IP地址

nm-connection-editor

上面只是对于nmcli命令的简单应用,更多的用法可以参看NetworkManager(8), nmcli(1), nmcli-examples(5), NetworkManager.conf(5) 几个的man手册。