企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[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 . . . | 在系统上持久设置主机名。 |