[TOC]
# IPv4 联网配置
## 目标
能够使用 nmcli 和 /etc/sysconfig/network-scripts 目录中的配置文件来配置 IPv4 联网。
## IPv4 联网
本节假定读者对于 IPv4 联网概念具有基本了解。特别是,读者应在一定程度上了解 IPv4 地址、网络前缀(和网络掩码)、默认网关和基本路由、网络接口、/etc/hosts 以及名称解析。
## NetworkManager 概述
在红帽 Linux 7 中,网络接口的配置是由称为 NetworkManager 的系统守护进程来管理的。对于 NetworkManager :
* 设备是网络接口。
* 连接是可以为设备配置的设置的集合。
*对于任何一个设备,在同一时间只能有一个连接处于活动状态。可能存在多个连接,以供不同设备使用或者以便同一设备更改配置。
* 每个连接具有一个用于标识自身的名称或 ID。
* 连接的持久性配置存储在 /etc/sysconfig/network-scripts/ifcfg-name 中,其中 name 是连接的名称(但文件名中的空格通常会替换为下划线)。如需要,可手动编辑此文件。
* nmcli 实用程序可用于通过 shell 提示符来创建和编辑连接文件。
## 查看联网信息
命令 nmcli dev status 将显示所有网络设备的状态:
~~~
[student@demo~]$ nmcli dev status
DEVICE TYPE STATE CONNECTION
eno1 ethernet connected enol
eth0 ethernet connected static-eth0
eno2 ethernet disconnected --
lo loopback unmanaged --
~~~
命令 nmcli con show 将显示所有连接的列表。要仅列出活动的连接,可用 --active 选项。
~~~
[student@demo~]$ nmcli con show
NAME UUID TYPE DEVICE
eno2 ff9f7d69-db83-4fed-9f32-939f8b5f8lcd 802-3-ethernet --
static-eth0 72ca57a2-f780-40da-b146-99f71c43le2b 802-3-ethernet eth0
eno1 87b53c56-lf5d-4a29-a869-8a7bdaf56dfa 802-3-ethernet eno1
[root@demo~]# nmcli con show --active
NAME UUID TYPE DEVICE
static-eth0 72ca57a2-f780-40da-b146-99f71c43le2b 802-3-ethernet eth0
eno1 87b53c56-lf5d-4a29-a869-8a7bdaf56dfa 802-3-ethernet eno1
~~~
ip addr show 命令仍将显示系统上网络接口的当前配置。要仅列出单的接口,请添加接口名称作为最后一个参数:
~~~
[student@demo~]$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,①UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
②link/ether 52:54:00:00:00:0b brd ff:ff:ff:ff:ff:ff
③inet 172.25.0.11/16 brd 172.25.255.255 scope global eth0
valid_lft forever preferred_lft forever
④inet6 fe80::5054:ff:fe00:b/64 scope link
valid_lft forever preferred_lft forever
~~~
①某个活动接口为 UP。
②link/ether 行指定设备的硬件(MAC)地址。
③inet 行显示 IPv4 地址、其网络前缀长度和作用域。
④inet6 行显示 IPv6 地址、其网络前缀长度和作用域。
## 添加网络连接
nmcli con add 命令用于添加新的网络连接。随后的示例命令 nmcli con add 假定正在添加的网络连接的名称尚未在使用中。
以下命令将为接口 eno2 添加一个新连接,此连接将使用 DHCP 获取 IPv4 联网信息并在系统启动后自动连接。由于 con-name 为 eno2,因此配置将保存在 /etc/sysconfig/network-scripts/ifcfg-eno2 中。
~~~
[root@demo~]# nmcli con add con-name eno2 type ethernet ifname eno2
~~~
下一个示例改为以静态方式配置 eno2 接口,且使用 IPv4 地址和网络前缀 192.168.0.5/24 及默认网关 192.168.0.254,但是仍在启动时自动连接并将其配置保存到相同文件中。此示例以 shell 转义符换行。
~~~
[root@demo~]# nmcli con add con-name type ethernet ifname eno2 \
> ip4 192.168.0.5/24 gw4 192.168.0.254
~~~
## 控制网络连接
nmcli con name 命令将在其绑定到的网络接口上激活 name 连接。请注意,命令采用连接的名称,而非网络接口的名称。切记,nmcli con show 可用于列出所有可用连接的名称。
~~~
[root@demo~]# nmcli con up static-eth0
~~~
nmcli dev disconnect device 命令将断开与网络接口设备连接并将其关闭。此命令可以缩写为nmcli dev dis device:
~~~
[root@demo~]# nmcli dev dis eth0
~~~
### 重要
使用 nmcli dev dis device 可停用网络接口。
命令 nmcli con down name 通常并非是停用网络接口的最佳方法。此命令将关闭连接。但在默认情况下,大部分有限系统连接是在启用了 autoconnect 的情况下配置的。这将在其网络接口可用后立即激活连接。由于连接的网络接口仍可用,因此 nmcli con down name 将关闭接口,但是 NetworkManager 会立即将其重新开启,除非连接完全与接口断开。
## 修改网络连接设置
NetworkManager 连接具有两种类型的设置。有静态连接属性,它们是由管理员配置并存储在/etc/sysconfig/network-script/ifcfg-* 中的配置文件中。还可能有活动连接数据,这些数据是从DHCP 服务器获取的,不会持久储存。
要列出某个连接的当前设置,请运行 nmcli con show name 命令,其中 name 是连接名称。小写的设置是静态属性,管理员可以更改;全大写的设置是活动设置,临时用于连接实例。
~~~
[root@demo~]# nmcli con show static-eth0
connection.id: static-eth0
connection.uuid: 87b5356-1f5d-4a29-a869-8a7bdaf56df
a
connection.interface-name: --
connection.type: 802-3-ethernet
connection.autoconnect: yes
connection.timestamp: 1401803453
connection.read-only: no
connection.permission:
connection.zone: --
connection.master: --
connection.slave-type: --
connection.secondaries:
connection.gateway-ping-timeout: 0
802-3-ethernet.port: --
802-3-ethernet.speed: 0
802-3-ethernet.duplex: --
802-3-ethernet.auto-negotiate: yes
802-3-ethernet.mac-address: CA:9D:E9:2A:CE:F0
802-3-ethernet.cloned-mac-address: --
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:
ipv4.method: manual
ipv4.dns: 192.168.0.254
ipv4.dns-search: example.com
ipv4.addresses: { ip=192.168.0.2/24,gw=192.168.0.2
54 }
ipv4.routes:
ipv4.ignore-auto-routes: no
ipv4.ingore-auto-dns: no
ipv4.dhcp-client-id: --
ipv4.dncp-send-hostname: yes
ipv4.dhcp-hostname: --
ipv4.never-default: no
ipv4.may-fail: yes
...
~~~
nmcli con mod name 命令可用于更改连接的设置。这些更改还保存在连接的/etc/sysconfig/network-script/ifcfg-name 文件中。nm-settings man-page 中记录了可用的不同设置。
要针对 static-eth0 连接将 IPv4 地址设置为 192.0.2.2 并将网关设置为 192.0.2.254:
~~~
[root@demo~]# nmcli con mod static-eth0 ipv4.address "192.0.2.2/24 192.0.2.254"
~~~
### 重要
如果某个连接之前通过 DHCPv4 服务器获取其 IPv4 信息,而现在更改为仅通过静态配置文件来获取,那么设置 ipv4.method 也应从 auto 更改为 manual。同样,连接在激活后可能挂起或无法成功完成,或者除了静态地址外还有从 DHCP 获取 IPv4 地址。
很多设置可能具有多个值。通过向设置名称的开头添加 + 或 - 符号,可以在列表中添加或从列表中
删除特定值。
要将 DNS 服务器 192.0.2.1 添加到要与 static-eth0 连接一起使用的名称服务器的列表:
~~~
[root@demo~]# nmcli con mod name static-eth0 +ipv4.dns 192.0.2.1
~~~
默认情况下,通过 nmcli con mod name 进行的更改将自动保存到 /etc/sysconfig/network-scripts/ifcfg-name。还可以使用文本编辑器手动编辑此文件。执行此操作后,运行 nmcli con reload 以便 NetworkManager 读取配置更改。
出于向后兼容性的原因,此文件中保存的指令具不同于 nm-settings 名称的名称和语法。下表将部分关键设置名称映射到 ifcfg-* 指令。
nm-settings 与 ifcfg-* 指令的比较
| nmcli con mod | ifcfg-* file | 影响 |
| --- | --- | --- |
| ipv4.method manual | BOOTPROTO=none | IPV4 以静态方式配置。 |
| ipv4.method auto | BOOTPROTO=dhcp |将从 DHCPv4 服务器中查找配置设置。如果还设置了静态地址,则在我们从 DHCPv4 中获取信息之前,将不会激活这些静态地址。 |
| ipv4.address “192.0.2.1/24 192.0.2.254“ | IPADDR0=192.0.2.1 PREEIX0=24 GATEWAY0=192.0.2.254 | 设置静态 IPv4 地址、网络前缀和默认网关。如果为连接设置了多个,则 ifcfg-* 指令将以 1、2、3 等等结尾,而不是以 0 结尾。 |
| ipv4.dns 8.8.8.8 | DNS0=8.8.8.8 | 修改 /etc/resolv.conf 以使用此 nameserver。 |
| ipv4.dns-search example.com | DOMAIN=example.com | 修改 /etc/resolv.conf 以在search 指令中使用此域。 |
| ipv4.ignore-auto-dns ture | PEERDNS=no | 忽略来自 DHCP 服务器的 DNS服务器信息。 |
| connection.autoconnect yes | ONBOOT=yes | 在启动时自动激活此连接。 |
| connection.id eth0 | NAME=eth0 | 此连接的名称。 |
| connection.interface-name eth0 | DEVICE=eth0 | 连接与具有此名称的网络接口绑定。 |
| 802-3-ethernet.mac-address . . . | HWADDR= . . . | 连接与具有此 MAC 地址的网络接口绑定。 |
### 重要
由于 NetworkManager 趋向于修改 /etc/resolv.conf 文件,因此直接编辑此文件可能会被覆盖。
要更改此文件夹中的设置,最好是在相关 /etc/sysconfig/network-scripts/ifcfg-* 文件中设置 DNSn 和 DOMAIN 指令。
## 删除网络连接
nmcli con del name 将从系统中删除名为 name 的连接,同时断开它与设备的连接并删除文件 /etc/sysconfig/network-scripts/ifcfg-name。
## 修改系统主机名
hostname 命令显示或临时修改系统的完全限定主机名。
~~~
[root@demo~]# hostname
demo.example.com
~~~
可以在 /etc/hostname 文件中指定静态主机名。hostnamectl 命令用于修改此文件,也可用于查看系统的完全限定主机名的状态。如果此文件不存在,则主机名在接口被分配了 IP 地址时由反向 DNS 查询设定。
~~~
[root@demo~]# hostnamectl set-hostname demo.example.com
[root@demo~]# hostname status
Static hostname: demo.example.com
Icon name: computer
Chassis: n/a
Machine ID: 9f6fb63045a845d79e5e870b914c61c9
Boot ID: aa6c3259825e4b8c92bd0f601089ddf7
Virtualization: kvm
Operating System: Red Hat Enterprise Linux Server 7.0 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.0:GA:server
kernel: Linux 3.10.0-121.el7.x86_64
Architecture: x86_64
[root@demo~]# cat /etc/hostname
demo.example.com
~~~
### 重要
静态主机名存储在 /etc/hostname 中。以前的 Red Hat Enterprise Linux 版本将主机名作为变量存储在 /etc/sysconfig/network 文件中。
## 命令摘要
下表是此部分中讨论的关键命令的列表。
| 命令 | 用途 |
| --- | --- |
| nmcli dev status | 显示所有连接网络的 NetworkManager 状态。 |
| nmcli con show | 列出所有连接。 |
| nmcli con show name | 列出 name 连接的当前设置。 |
| nmcli con add con-name name . . . | 添加一个名为 name 的新连接。 |
| nmcli con mod name . . . | 修改 name 连接。 |
| nmcli con reload | 告知 NetworkManager 重新读取配置文件(在手动编辑配置文件之后使用)。 |
| nmcli con up name | 激活 name 连接。 |
| nmcli dev dis dev | 在网络接口 dev 上停用并断开当前连接。 |
| nmcli con del name | 删除 name 连接及其配置文件。 |
| ip addr show | 显示当前网络接口地址配置。 |
| hostnamectl set-hostname . . . | 在系统上持久设置主机名。 |