测试主机/桌面:Linux Dystantest 4.2.0-42-generic #49~14.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
RNDIS 设备/小工具:Linux colibri-imx6 3.14.52-v2.6b2+g7c83cef #1 SMP 6 月 29 日星期三 15:57:37 CEST 2016 armv7l GNU/Linux
假设我有一个由多个嵌入式盒子组成的系统,每个盒子中有 6 个相同的 RNDIS USB 小工具设备。
默认的 /etc/systemd/network/rndis.network 文件如下所示:
[匹配]
类型=小工具
[网络]
地址=192.168.11.1/24
DHCP服务器=是
因此,我们基本上只是打开 dhcpd 并将引导地址硬编码为 11.1。我在任何地方都找不到 dhcpd 进程,我的供应商告诉我它是 systemd 的固有部分 - 没有 /etc/dhcpd.conf,除了属于 systemd 的配置文件之外,我找不到其他配置文件。
主要问题是,我不能将 N x 6 设备全部硬编码为 11.1。因此,我在这些设备上的嵌入式应用程序将 IP 更改为 192.168."serialnum"."channelnum" 之类的内容。
到目前为止,一切都很好。唯一的问题是,如果我在 ubuntu 系统上发布/更新,它仍然总是获得 IP 192.168.11.X,而不是 192.168."serialnum".X
因此,显然内在的 dhcpd 仍然从初始配置文件中获取子网,而不是从客户端请求新租约时使用的接口的实际 IP 中获取子网。
我在任何地方都找不到任何有关更改此内容的文档。我知道常规服务器应该在启动时保留其 IP,但这是一个嵌入式设备,因此它的行为必须有所不同,并且在 dhcp 服务器系统上具有“半”动态 IP。 systemd 文档的 [DHCPServer] 部分没有指定任何使其动态的内容,也没有指定任何允许我重新启动 dhcp 服务器以使其使用新子网的 dhcpd.service 文件。
我可以将 dhcp 服务器放在 ubuntu 机器上而不是嵌入式小工具机器上,但这将为我的 win32 客户创建一个支持~噩梦~,所以这是不可能的。
我可以付钱给我们的一位技术人员,让他们在我们制作的每个系统的每个通道上的 rndis.network 文件中手动设置 IP,但是当我在这里设置了一台服务器(如果我可以让它遵循任何规则)时,这也显得很愚蠢当前子网是在发出新租约时。