我正在开发一个用于管理远程设备的工具。该工具包括 2 个部分:
- 服务器:仪表板管理器,用于查看和管理连接设备的 GUI
- 客户端:作为代理,从服务器获取任务并执行
当管理员想要更改设备的网络设置时,他将该设备指定为任务目标,新设置将成为任务的参数。例如:
{
target: DEVICE_ID,
action: 'CONFIGURE_NETWORK',
params: {
ip_addr: '192.168.1.77',
default_gateway: '192.168.1.1',
primary_dns: '8.8.8.8',
...
}
}
一旦目标设备获得此任务,客户端机构将尝试将新的设置值应用到操作系统。
过去,我们只支持Raspberry PI设备,因此也使用DHCPCD解决任务。更先进的是,如果网络设置失败,它还能够恢复。
现在我们期望支持更多种类的设备,基于 Ubuntu 16.04 及更高版本的设备,也许可以运行任何桌面环境。以及问题产生的原因。 Ubuntu家族中有很多管理网络的方法和工具。一些发行版使用 netplan,而其他发行版则附带 NetworkManager、wicd 和 DHCPCD5 等。
完成上述任务的最佳方法是什么?哪种方法适合所有变体?你能给我一些建议吗?
答案1
我能想到的最通用的方法是禁用/卸载所有这些管理工具,并使用基本的命令行工具/操作系统机制执行网络配置。
ifup
和ifdown
如果在所有支持的平台上可用(ifupdown
Ubuntu 上的软件包),请使用/etc/network/interfaces
.ifconfig
(net-tools
) 和一些使用提供的值调用它的自定义脚本应该是最基本的方法(除了实现您自己的工具,我不推荐这样做),但需要一些努力才能使其适合重要的设置。
要获取当前设置,您可以解析(不推荐)的输出ifconfig <interface>
,或者解析ip
命令(来自iproute2
),这应该更方便和确定。