1.8. NetworkManager 及网络脚本

在之前的 Red Hat Enterprise Linux 发行本中,默认使用网络脚本配置联网。术语网络脚本通常是指 /etc/init.d/network 及所有它调用的已安装脚本。用户提供的文件通常被视为配置文件,但也可以将其解读为对脚本的修改。
虽然 NetworkManager 提供默认联网服务,但 Red Hat 开发人员仍致力于确保脚本和 NetworkManager 之间可相互协作。习惯于使用脚本的管理员仍可继续使用脚本。我们的预期是两个系统可同时存在,并可很好地合作。大多数之前发行本中的用户 shell 脚本仍可正常工作。但 Red Hat 建议您在使用前对其进行测试。

运行网络脚本

使用 systemctl 程序运行脚本则会清除所有现有环境变量,并确保一个干净的执行模式。该命令的格式如下:
systemctl start|stop|restart|status network
请勿直接调用 /etc/init.d/servicename start|stop|restart|status 运行任何服务。
注:在 Red Hat Enterprise Linux 7 中,首先启动 NetworkManager,此时 /etc/init.d/network 会使用 NetworkManager 检查,以避免破坏 NetworkManager 的连接。NetworkManager 主要在使用 sysconfig 配置文件的主要应用程序中使用,而 /etc/init.d/network 主要是作为备用程序在此要程序中使用。
/etc/init.d/network 脚本不是事件驱动,它可采用以下方式之一运行:
  1. 手动(运行 systemctl start|stop|restart network 命令之一),
  2. 如果启用网络服务,则会在引导和关机时运行(systemctl enable network 命令的结果)。
这是一个手动过程,不会与任何引导后发生的事件互动。用户还可以手动调用 ifupifdown 脚本。

自定义命令及网络脚本

只有在那些设备由 /etc/init.d/network 服务控制时方可执行脚本 /sbin/ifup-local 中的自定义命令(ifdown-pre-localifdown-local)。如果修改 initscripts 本身(比如 /etc/sysconfig/network-scripts/ifup-eth),那么 initscripts 软件包更新会覆盖那些修改。因此建议避免直接修改 initscripts,而是使用 /sbin/if*local 脚本,以便在更新软件包后仍可保留您所做的更改。Initscripts 只检查是否有相关的 /sbin/if*local,并在该文件存在时运行该文件。Initscripts 不会在 /sbin/if*local 脚本中添加任何内容,initscripts RPM(或任意软件包)也不会拥有或修改那些文件。
网络连接启动或断开时,可采用某些方法执行自定义任务,旧的网络脚本及 NetworkManager 均有此功能。启用 NetworkManager 后,ifupifdown 脚本会询问 NetworkManager,是否由 NetworkManager 管理在 ifcfg 文件的 DEVICE= 行中发现的接口。如果是 NetworkManager 管理该设备,且该设备未处于连接状态,则 ifup 会要求 NetworkManager 启动该连接。
  • 如果该设备由 NetworkManager 管理,且它已经处于连接状态,则不需要任何操作。
  • 如果该设备不是由 NetworkManager 管理,那么该脚本会使用旧的非 NetworkManager 机制(即出现 NetworkManager 之前使用的方法)启动该连接。
如果要调用 ifdown,且该设备由 NetworkManager 管理,那么 ifdown 会要求 NetworkManager 终止该连接。
该脚本会动态检查 NetworkManager,因此如果未运行 NetworkManager,则该脚本会故障转移至旧的、早于 NetworkManager 的基于脚本的机制。