将您的 Linux 计算机连接到网络通常非常简单,除非情况并非如此。在本文中,我将讨论基于 Red Hat 的 Linux 发行版的主要网络配置文件,并了解两个网络启动服务:历史悠久的 network 启动服务和备受争议的 NetworkManager。
Linux 可以轻松管理多个网络接口适配器。笔记本电脑通常包括有线和无线接口,并且可能还支持用于蜂窝网络的 WiMax 接口。Linux 桌面计算机也支持多个网络接口,您可以将 Linux 计算机用作多网络客户端,或用作内部网络的路由器;我的几台系统就是这种情况。
接口配置文件
每个网络接口在 /etc/sysconfig/network-scripts 目录中都有自己的配置文件。每个接口都有一个名为 ifcfg-<interface-name>X 的配置文件,其中 X 是接口的编号,从零或 1 开始,具体取决于使用的命名约定;例如,第一个以太网接口的配置文件是 /etc/sysconfig/network-scripts/ifcfg-eth0。
/etc/sysconfig/network-scripts 目录中的大多数其他文件都是用于启动、停止和执行各种网络配置活动的脚本。
每个接口配置文件都通过接口的 MAC 地址绑定到特定的物理网络接口。
网络接口命名约定
网络接口的命名约定曾经很简单、不复杂,而且我认为也很容易。使用 ethX 对我来说很有意义,而且很容易输入。它不需要额外的步骤来弄清楚哪个又长又晦涩的名称属于哪个接口。不幸的是,添加新的接口常常会强制重命名网络接口,这会破坏脚本和配置。这一切都改变了,而且不止一次。
在经历了短暂的冗长且难以理解的网络接口名称之后,我们现在有了第三套命名约定,它看起来只是略微好一些。诸如 ethX 之类的名称仍然被 CentOS 6.x 使用。最新的命名约定,名称如 eno1 和 enp0s3,被 RHEL 7、CentOS 7 和更新版本的 Fedora 使用。RHEL 6 和 CentOS 6 的接口命名约定在 Red Hat 部署指南的 附录 A. 一致的网络设备命名 中进行了描述。RHEL 7、CentOS 7 和当前版本的 Fedora 在 Red Hat 网络指南的 第 8 章. 一致的网络设备命名 中进行了描述。
配置文件示例
此示例网络接口配置文件 ifcfg-eth0 为 CentOS 6 服务器安装定义了静态 IP 地址配置。
# Intel Corporation 82566DC-2 Gigabit Network Connection
DEVICE=eth0
HWADDR=00:16:76:02:BA:DB
ONBOOT=yes
IPADDR=192.168.0.10
BROADCAST=192.168.0.255
NETMASK=255.255.255.0
NETWORK=192.168.0.0
SEARCH="example.com"
BOOTPROTO=static
GATEWAY=192.168.0.254
DNS1=192.168.0.254
DNS2=8.8.8.8
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
此文件在启动时启动接口,为其分配静态 IP 地址,定义域和网络网关,指定两个 DNS 服务器,并且不允许非 root 用户启动和停止接口。
以下接口配置文件 ifcfg-eno1 为桌面工作站提供了 DHCP 配置。
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
NAME=eno1
UUID=a67804ff-177a-4efb-959d-c3f98ba0947e
ONBOOT=yes
HWADDR=E8:40:F2:3D:0E:A8
IPV6_PEERDNS=no
IPV6_PEERROUTES=no
在第二个配置文件示例中,DHCP 条目、IP 地址、搜索域和所有其他网络信息都未定义,因为它们由 DHCP 服务器提供。像 DNS 服务器这样的配置项可以通过在接口配置文件中添加 DNS1 和 DNS2 行来覆盖,如之前的静态配置示例中所示。
请注意,第二个示例包含 UUID 行。据我所知,此行对配置文件的功能没有影响。我通常将其注释掉甚至删除,并且从未对我的网络产生不利影响。
在两个接口配置文件中,HWADDR 行指定了物理网络接口的 MAC 地址。这会将物理接口绑定到接口配置文件。如果您更换接口,则必须更改文件中的 MAC 地址。
有几种方法可以找到 NIC 的 MAC 地址。我通常使用 ifconfig 命令,该命令显示所有已安装的 NIC、其 MAC 地址和各种统计信息。许多新的 NIC 都在包装盒上或 NIC 本身上印有 MAC 地址。但是,大多数接口配置文件是在安装期间或在首次检测到新安装的 NIC 后自动生成的,并且 MAC 地址包含在新接口配置文件中。
ONBOOT 行指定在启动时激活接口。如果将此行更改为“no”,则必须手动或在用户登录后通过 NetworkManager 激活接口。
USERCTL 行指定非特权用户无法管理接口;也就是说,他们无法打开和关闭接口。将此参数设置为“yes”允许普通用户激活和停用接口。
请注意,接口配置文件中的行不区分顺序,并且可以按任何顺序正常工作。按照惯例,选项名称以大写字母表示,值以小写字母表示。选项值可以用引号引起来,但这并非必要,除非该值超过一个单词或数字。
配置选项
接口配置文件有很多配置选项。以下是一些更常见的选项:
- DEVICE:设备的逻辑名称,例如 eth0 或 enp0s2。
- HWADDR:绑定到该文件的 NIC 的 MAC 地址,例如 00:16:76:02:BA:DB
- ONBOOT:主机启动时启动此设备上的网络。选项为 yes/no。通常设置为“no”,并且网络在用户登录到桌面后才启动。如果您需要在无人登录时启动网络,请将其设置为“yes”。
- IPADDR:分配给此 NIC 的 IP 地址,例如 192.168.0.10
- BROADCAST:此网络的广播地址,例如 192.168.0.255
- NETMASK:此子网的子网掩码,例如 C 类掩码 255.255.255.0
- NETWORK:此子网的网络 ID,例如 C 类 ID 192.168.0.0
- SEARCH:在查找不合格的主机名(例如“example.com”)时要搜索的 DNS 域名。
- BOOTPROTO:此接口的启动协议。选项为 static、DHCP、bootp、none。“none”选项默认为 static。
- GATEWAY:此子网的网络路由器或默认网关,例如 192.168.0.254
- ETHTOOL_OPTS:此选项用于为网络接口设置特定的接口配置项,例如速度、双工状态和自动协商状态。由于此选项有多个独立的值,因此这些值应包含在一组引号中,例如:“autoneg off speed 100 duplex full”。
- DNS1:主 DNS 服务器,例如 192.168.0.254,它是本地网络上的服务器。当使用 NetworkManager 时,或者当 peerdns 指令设置为 yes 时,此处指定的 DNS 服务器将添加到 /etc/resolv.conf 文件中,否则 DNS 服务器必须手动添加到 /etc/resolv.conf 中,并且此处将被忽略。
- DNS2:辅助 DNS 服务器,例如 8.8.8.8,它是免费的 Google DNS 服务器之一。请注意,接口配置文件中不支持第三个 DNS 服务器,尽管可以在非易失性 resolv.conf 文件中配置第三个 DNS 服务器。
- TYPE:网络类型,通常为 Ethernet。我在此处见过的唯一其他值是 Token Ring,但这现在大多无关紧要。
- PEERDNS:“yes”选项表示要通过插入此文件中 DNS1 和 DNS2 选项指定的 DNS 服务器条目来修改 /etc/resolv.conf。“No”表示不更改 resolv.conf 文件。当 BOOTPROTO 行中指定 DHCP 时,“Yes”是默认值。
- USERCTL:指定非特权用户是否可以启动和停止此接口。选项为 yes/no。
- IPV6INIT:指定是否将 IPV6 协议应用于此接口。选项为 yes/no。
如果指定了 DHCP 选项,则大多数其他选项将被忽略。唯一必需的选项是 BOOTPROTO、ONBOOT 和 HWADDR。您可能会发现有用的其他未忽略的选项是 DNS 和 PEERDNS 选项,如果您想覆盖 DHCP 服务器提供的 DNS 条目。
已弃用的 network 文件
您可能会遇到一个旧的且现在已弃用的文件。对于当前版本的 Fedora、RHEL 和 CentOS,network 文件通常只包含一个注释行。它位于 /etc/sysconfig 中,过去用于启用或禁用网络。它也用于设置网络主机名,如下例所示:
NETWORKING=yes
HOSTNAME=host.example.com
自 Fedora 版本 19 以来,此文件一直存在但未使用。它仍然在 RHEL/CentOS 6.x 中使用,但在 RHEL/CentOS 7.x 中不再使用。网络主机名现在在 /etc/hostname 文件中设置。
其他网络文件
/etc/sysconfig/network-files 目录包含许多其他文件,所有这些文件通常都是可执行的 BASH 脚本,而不是配置文件。至少对我而言,这是 Linux 文件系统层次结构标准 (FHS) 的一个令人烦恼的例外,该标准明确规定只有配置文件而不是可执行文件才能位于 /etc 树中。
您可能会在 /etc/sysconfig/network-files 中找到的另一个网络配置文件是 route-<interface> 文件。如果您想在多宿主系统上设置静态路由,请为每个接口创建一个路由文件。例如,以下文件名为 route-eth0,并为该特定接口定义了到网络和各个主机的路由。
default 192.168.2.1 dev eth0
10.10.10.0/24 via 192.168.0.1 dev eth0
192.168.1.0/24 via 192.168.0.1 dev eth0
192.168.96.11 via 192.168.97.1
192.168.15.100 via 192.168.15.32
192.168.96.12 via 192.168.97.1
192.168.97.100 via 192.168.97.1
除非您将主机用作具有一些复杂路由需求的路由器,否则不常用此文件。有关配置路由的更多详细信息,请参阅您的 Red Hat Enterprise Linux 或 CentOS 版本的 网络指南。
网络启动
随着无线网络和移动设备的出现,为每个新的无线网络重新配置网络接口变得复杂且耗时。在添加新的网络接口时,也可能会产生命名冲突。
network
旧的 network 服务在 2004 年之前在基于 Red Hat 的发行版中默认使用,用于管理网络启动和停止任务。SystemV 启动脚本使用静态配置文件在启动时或通过命令行使用简单的 service network start 命令启动有线或无线网络。此服务仍然可用,尽管这些命令通过 systemd 重定向。
network 服务无法监视可插拔设备或不断变化的无线网络,因此它不能轻易地用于笔记本电脑或上网本式计算机。
在笔记本电脑上配置有线网络以及在具有多个网络接口的服务器或台式机上配置有线网络也存在问题。当在具有多个网络接口的主机中更换有缺陷的接口时,我遇到了问题,因为接口名称通常在系统启动期间发生更改。
NetworkManager
Red Hat 在 2004 年引入了 NetworkManager,以简化和自动化网络配置和连接,尤其是无线连接。其目的是防止用户必须手动配置每个新的无线网络。虽然它旨在使非技术用户更容易进行网络管理,但它需要 Linux 管理员进行一些调整,因为许多熟悉的配置功能现在由新的配置文件和脚本层处理。这意味着标准配置文件每次网络重启时(包括每次重启时)都可能被 NetworkManager 覆盖。
udev 守护程序是一个内核设备管理器,它应该为所有设备(包括网络设备和可移动大容量存储设备)提供一致且持久的设备命名。它还用于将网络设备名称(即 eth0 或 eno1,例如)与网络接口上的 MAC 地址进行匹配。
它的工作原理,某种程度上
udev 设备管理器检测到何时向系统添加了新设备(例如新的网络接口),并创建一条规则来识别和命名它(如果规则尚不存在)。这方面的工作原理的细节在较新版本的 Fedora、CentOS 和 RHEL 中发生了变化。当前的设备命名过程在 RHEL 7 网络指南 中进行了详细描述,其中还描述了名称的派生方式。
当前的约定是使用接口配置文件的内容来生成规则。但是,如果接口配置文件不存在,则插入新设备或连接到新的无线网络会导致 udev 通知 NetworkManager 新设备或无线连接。然后,NetworkManager 创建新的接口配置文件。
udev 守护程序在网络规则文件中为每个网络接口创建一个条目。NetworkManager 使用这些条目以及 /etc/sysconfig/network-scripts/ 目录中的接口配置文件中的信息来初始化每个接口。
管理员的选择
可以使用较旧的 network 服务并禁用 NetworkManager。有很多关于如何禁用 NetworkManager 并返回使用 network 服务的操作指南,包括 这个,因此我在此处不再赘述这些细节。
我个人建议不要返回使用较旧的 network 服务,因为一旦我理解了 NetworkManager 和 udev 如何协同工作,为现有设备和新设备提供一致的命名方案和自动配置,这一切就变得有意义了,并且使管理网络接口变得更加容易。在我看来,NetworkManager 是两全其美的选择。
与 Linux 一样,使用哪个服务的决定始终由您自己选择。
8 条评论