使用 NetworkManager.conf 和使用 nmcli 之间有区别吗

使用 NetworkManager.conf 和使用 nmcli 之间有区别吗
  1. 在 NetworkManager.conf 中,我可以指定

    [keyfile]
    unmanaged-devices=interface-name:vboxnet0
    
  2. 我也可以使用 nmcli,如下所示

    nmcli device set vboxnet0 managed no
    
  3. 这两种方法有什么区别吗?特别是,2. 每次重启后它都会起作用吗?

答案1

两者的作用相同。第二种方法是在使用第一种方法之前测试它是否有效。提交它,因此它不是永久性的(NetworkManager.conf重启后会恢复到原来的状态)。

答案2

两者都会使设备不受管理,但并不完全相同。

NetworkManager 默认喜欢管理设备,因此有几种方法可以使其不受管理。这些只是其中两种。还有

  • udev 规则 ( ENV{NM_UNMANAGED}="1")
  • [device*].managed=0在 NetworkManager.conf 中
  • NM_CONTROLLED=no在 ifcfg 文件中

  • nmcli device set $IFNAME managed $OPTION基本上就是进行一次 D-Bus 调用。这意味着:

    • 非 root 用户也可以完成此操作(如果 policykit 允许)
    • 它可以在运行时改变
  • [keyfile].unmanaged-devices反而

    • 需要 root 权限
    • systemctl reload NetworkManager仅在使用或重新加载配置后才生效killall -HUP NetworkManager

同样相关的是,由于有多种方法可以使设备不受管理,哪种方法可以胜出?

  • 如 中所述man NetworkManager.conf[keyfile].unmanaged-devices(以及 ifcfg 的NM_CONTROLLED=no)始终使设备处于未管理状态。您无法通过其他方式覆盖它。
  • 另一方面,UDEV 规则[device*].managed可以通过 D-Bus 推翻。因此,如果您设置
   [device-my-unmanaged]
   match-device=eth0
   managed=0

然后nmcli device set eth0 managed yes仍然可以工作。


最后,如果您通过 D-Bus (nmcli) 更改它,那么它也会被记住在/run/NetworkManager/devices/状态文件中。这意味着,它将在服务重启后继续存在,但不会在重新引导后继续存在。


是否有一种编程方式来编辑 NetworkManager.conf(我的意思是使用命令而不是以编程方式编辑文件)

嗯,有sed:)

实际上,我发现将配置片段拖放到 中更容易/{usr/lib,etc,run}/NetworkManager/conf.d,这样您就不需要编辑文件了。您可以拖放/删除您的片段,如果您在片段中留下注释,就可以清楚地知道谁创建了它。阅读man NetworkManager.conf有关 conf.d 文件的合并顺序。

相关内容