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,×××连接以及很多其它的特殊参数。

   可以用命令行工具 nmcli 来控制 NetworkManager。

   在CentOS / RHEL 7中网络管理命令行工具,也叫nmcli。经常使用ifconfig的用户应该在CentOS 7中避免使用ifconfig了。nmcli的功能要强大、复杂的多。

## 使用语法

[root@CentOS7 ~]# nmcli help

Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
-t[erse]terse output(简洁的输出)
-p[retty]pretty output(全部输出)
-m[ode] tabular|multilineoutput mode(输出模式 可选 tabular、multiline)
-f[ields] <field1,field2,...>|all|common specify fields to output(指定输出字段)
-e[scape] yes|noescape columns separators in values(在值中转义列分隔符)
-n[ocheck]don't check nmcli and NetworkManager versions(不要检查nmcli和网络管理器版本)
-a[sk]ask for missing parameters(找失踪的参数)
-w[ait] <seconds>set timeout waiting for finishing operations(设置超时等待完成操作)
-v[ersion]show program version(显示程序版本)
-h[elp]print this help(打印帮助)
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(网络设备管理) 

OBJECT和COMMAND可以用全称也可以用简称,最少可以只用一个字母,建议用头三个字母。

OBJECT里面我们平时用的最多的就是connection和device,这里需要简单区分一下connection和device。

如connection可以简写为con;

 device可简写为dev。

device        - 指网络接口,物理网卡

connection       - 指连接,偏重于逻辑设置


多个connection可以应用到同一个device,但同一时间只能启用其中一个connection。

这样的好处是针对一个网络接口,我们可以设置多个网络连接,比如静态IP和动态IP,再根据需要up相应的connection。

要得到系统中所有接口的地址信息

## 查看设备信息

[root@localhost ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:a3:93:f4 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.140/24 brd 192.168.10.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea3:93f4/64 scope link
valid_lft forever preferred_lft forever
 
## 查看当前设备
[root@localhost ~]# nmcli connection show
NAME        UUID                        TYPE        DEVICE
eno123      7b3f7a19-0f5e-4bb1-85ab-ac77d5b46f88  802-3-ethernet  eno16777736

 

得到特定连接的详情

[root@localhost ~]# nmcli connection show  eno16777736
connection.id:                          eno16777736
connection.uuid:                        13756690-ac77-b776-4fc1-f5535cee6f16
connection.stable-id:                   --
connection.interface-name:              eno16777736
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.timestamp:                   1513912633
connection.read-only:                   no
connection.permissions:
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
connection.lldp:                        -1 (default)
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist:
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:
802-3-ethernet.wake-on-lan:             1 (default)
802-3-ethernet.wake-on-lan-password:    --
ipv4.method:                            manual
ipv4.dns:
ipv4.dns-search:
ipv4.dns-options:                       (default)
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.10.140/24
ipv4.gateway:                           192.168.10.2
ipv4.routes:
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     no
ipv4.may-fail:                          no
ipv4.dad-timeout:                       -1 (default)
ipv6.method:                            auto
ipv6.dns:
ipv6.dns-search:
ipv6.dns-options:                       (default)
ipv6.dns-priority:                      0
ipv6.addresses:
ipv6.gateway:                           --
ipv6.routes:
ipv6.route-metric:                      -1
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.addr-gen-mode:                     eui64
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
ipv6.token:                             --
GENERAL.NAME:                           eno16777736
GENERAL.UUID:                           13756690-ac77-b776-4fc1-f5535cee6f16
GENERAL.DEVICES:                        eno16777736
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        yes
GENERAL.DEFAULT6:                       no
GENERAL.×××:                            no
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/5
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/1
GENERAL.SPEC-OBJECT:                    /
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         192.168.10.140/24
IP4.GATEWAY:                            192.168.10.2
IP6.ADDRESS[1]:                         fe80::20c:29ff:fea3:93f4/64
IP6.GATEWAY:


得到网络设备状态

[root@localhost ~]# nmcli device status
DEVICE       TYPE      STATE      CONNECTION
eno16777736  ethernet    connected      eno16777736
lo        loopback    unmanaged       --

 

配置新连接

## 使用“dhcp”创建新的连接
[root@localhost ~]# nmcli connection add con-name "enodhcp" type ethernet ifname eno16777736
Connection 'enodhcp' (edd1525f-9c81-49bb-b98a-e76ad1314ab5) successfully added.

connection add         – 添加新的连接
con-name "enodhcp"     – 连接名(可自定义)
type                   – 设备类型
ifname                 – 接口名(指定网卡名称)

## 不通过dhcp分配IP,使用“static”添加地址
[root@localhost ~]# nmcli connection add con-name "enostatic" ifname eno16777736 autoconnect no type ethernet ip4 192.168.10.145 gw4 192.168.10.2
Connection 'enostatic' (8e69d847-03d7-47c7-8623-bb112f5cc842) successfully added.

connection add         – 添加新的连接
con-name "enostatic"   – 连接名(可自定义)
type ethernet          – 设备类型
ifname                 – 接口名(指定网卡名称)
ip4                    - IP地址
gw4                    - 网关

## 更新连接;这里如果你是用终端连接的话更新之后,当前终端会被卡死。断开重新用新的IP地址连接就可以
[root@localhost ~]# nmcli connection up enostatic
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

## 再查看网卡信息,IP地址已经改变
[root@localhost ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a3:93:f4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.145/32 brd 192.168.10.145 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::c7f7:1818:2ffc:f9ea/64 scope link 
       valid_lft forever preferred_lft forever

## 查看路由配置,这样可以直观的看到连接信息。
[root@localhost ~]# ip route 
default via 192.168.10.140 dev eno16777736 proto static metric 100
192.168.10.140/24 dev eno16777736 proto kernel scope link src 192.168.10.145 metric 100 

## 添加DNS设置到静态连接中
[root@localhost ~]# nmcli connection modify "enostatic" ipv4.dns 114.114.114.114

## 增加更多的DNS;因为是新添加额外的dns,所有在使用"+"号(+ipv4.dns),而不是ip4.dns。增加IP同理
[root@localhost ~]# nmcli connection modify "enostatic" +ipv4.dns 8.8.8.8

## 添加一个额外的ip地址
[root@localhost ~]# nmcli connection modify "enostatic" +ipv4.addresses 192.168.10.146/24