当我在网络脚本中将 dhcp 更改为 static 然后重新启动服务时systemctl restart NetworkManager
。静态 IP 设置应该更新,但没有更新。所以我尝试
ip link set dev enp0s3 down
进而up
没有更新ip
然后我尝试用ifdown enp0s3
thenifup enp0s3
有效
为什么它与 一起工作ifup
?
答案1
前言:ip
和ifconfig
是实用程序控制和监控联网。它们通常不用于读取/写入持久配置文件 - 这就是为什么ip link
不起作用。持久配置管理必须通过其他方式来完成,例如NetworkManager
.
(这可能是不用说的,但是,作为旁注,iproute2
,它提供了ip
,已经/正在被采用被许多发行版作为 的替代品net-tools
,它提供了ifconfig
.出于兼容性原因,它们通常都作为发行版中的默认包提供)。
为什么ifup
有效和systemctl restart NetworkManager
无效:
在 CentOS 上(我已检查过 CentOS 7),ifup
和ifdown
由 提供;它们对由同一包提供的initscripts
中的脚本进行操作。因此,能够应用您在那里所做的更改并不奇怪。/etc/sysconfig/network-scripts/
ifup
NetworkManager - CentOS 从上游继承的默认网络服务提供程序 - 在 Red Hat 和 Fedora 上配置为使用插件ifcfg-rh
从 读取/写入网络配置/etc/sysconfig/network-scripts/ifcfg-*
。但它不监控那些文件。
man nm-settings-ifcfg-rh
警告说
用户可以手动创建或修改 ifcfg-rh 连接文件,即使这不是管理配置文件的推荐方法。但是,如果他们选择这样做,则必须将其更改通知 NetworkManager(请参阅 nm-settings(5) 中的 Monitor-connection-file 和 nmcli con(重新)加载)。
因此,systemctl reload NetworkManager
不应从 CentOS 上的文件重新加载网络连接的配置。为此,您可以调用nmcli connection reload
或更改NetworkManager
配置,如下所示man NetworkManager.conf
:
Monitor-connection-files
配置的设置插件是否应设置文件监视器并在 NetworkManager 运行时立即获取对连接文件所做的更改。默认情况下禁用此功能; NetworkManager 仅在启动时以及通过 ReloadConnections D-Bus 调用显式请求时读取连接文件。 [...]
答案2
ip
直接改变硬件的状态,就像ifconfig
.ifconfig
和之间的唯一区别ip
是ip
具有不同的语法,并且ifconfig
不支持某些功能。
ifup
另一方面ifdown
,运行大量脚本,读取/etc/network/interfaces
文件和其他配置文件,然后执行操作。这包括添加您可能放入的静态 IP 设置/etc/network/interfaces
。
原则上,网络管理器也应该选择这些,但我不运行网络管理器(大多数时候它妨碍我),所以我不能告诉你为什么它不起作用。
因此:如果您希望考虑网络配置文件,请使用ifup
/ifdown
和网络管理器。如果您想直接更改界面设置,请使用ip
和ifconfig
。