是否有命令将 MAC 地址插入到 dhcpd.conf 文件中的子网中?

是否有命令将 MAC 地址插入到 dhcpd.conf 文件中的子网中?

我正在寻找一个命令,允许我在 dhcpd.conf 文件中插入主机,而无需手动触摸该文件。

我正在使用:CentOS 版本 5.3。

该文件如下所示:

subnet 97.129.0.0 netmask 255.255.240.0 {
    deny unknown-clients;
    range 97.129.2.2 97.129.2.254;
    group {
            filename "3M-1M-OKS2016NOV.cm";
            host client1 {
                    hardware ethernet 00:04:0d:0c:0f:0a;
                    }
            host client2 {
                    hardware ethernet a0:be:cd:ea:1d:14;
                    }
            ###Block I wanto to insert
            host client_i_want_to_insert {
                    hardware ethernet e3:ee:ed:ea:1d:e4;
                    }
            ###########
    }}

答案1

  • 为了回答您的特定字符串处理问题:

    您可以使用sed插入行文件中间的字符串,适合您的用例。

    因此,假设您的文件是:

    子网 97.129.0.0 网络掩码 255.255.240.0 { 拒绝未知客户端;范围 97.129.2.2 97.129.2.254;组{ 文件名“3M-1M-OKS2016NOV.cm”;主机 client1 { 硬件以太网 00:04:0d:0c:0f:0a; } 主机 client2 { 硬件以太网 a0:be:cd:ea:1d:14; } #### }}

    你可以做:

    sed -i '/####/i\ \thost client_i_want_to_insert {\n\硬件以太网 e3:ee:ed:ea:1d:e4;\n\t}\n' /etc/dhcp/dhcpd.conf


然而,过去我也管理过几个 ISP 电缆调制解调器(我清楚地认识到该行filename "3M-1M-OKS2016NOV.cm";是提供电缆调制解调器配置文件)。

我有几条建议要补充:

- Having a host definition spanning several lines is not practical. Over time the DHCP file will become unwieldy. For scripting it is

插入或删除线条都更加困难。我建议只在一行上执行此操作,如下所示:

       host client2 { hardware ethernet a0:be:cd:ea:1d:14; }

- The names of hostnames also have to be unique. Either you increment them, or use your customer code *if* a numeric code.
- an alternative, when incrementing the host part, is putting a comment with the customer code *after* the host definition. As an

额外的好处是,如果您需要手动修复某些配置错误或进行一些快速干预,则处理文件会更容易。

       host client2 { hardware ethernet a0:be:cd:ea:1d:14; } #_cus234XP_

因此,在删除客户时,当您处理单行文字时,您只需要一个grep -vsed

此外,ISC DHCP 还允许您include创建文件。为了不必在配置文件的中间插入行,您可以执行以下操作:

   subnet 97.129.0.0 netmask 255.255.240.0 {
       deny unknown-clients;
       range 97.129.2.2 97.129.2.254;
       group {
               filename "3M-1M-OKS2016NOV.cm";
               include "customers";
       }}

然后客户文件应该是这样的:

   host client1 { hardware ethernet 00:04:0d:0c:0f:0a; } #_cus234XP_
   host client2 { hardware ethernet a0:be:cd:ea:1d:14; } #_cus235XZ_

因此,您只需将新的 CM/customers 附加到文件末尾,而无需处理sed/ awk,至少在添加新客户时是这样。


此外,我建议考虑其他可能的解决方案来为 CM 调制解调器/客户实施 DHCP 配置。

过去,我编写用于处理 ISC DHCP 文本文件的配置软件已有几年时间。该过程有一些限制:

- Each time a new item is removed/inserted, the service has to be restarted;  
- If by chance you duplicate an host, the service won't restart;
- Any kind of parsing has to be done in text mode, or done in ancillary/duplicate methods;
- If some auxiliary housekeeping is done by hand, it is prone to errors. 

然后我发现docsis_server这是一个在 MySQL for Linux 之上的“被黑客攻击的”ISC DHCP,专门为有线电视行业开发作为供应开源中间件。我最终在其上编写了我的配置软件/Web 前端。直接处理 MySQL 查询(而不是文本文件)来与 DHCP 服务交互是一个福音。

可悲的是,我认为该项目不再维护。https://github.com/bschirrmeister/docsis_server

如今,您还拥有 ISC 的 DHCP 的 Kea 项目,值得一看。在其之上开发供应方案似乎非常有趣。https://kea.isc.org

Kea 是一个开源软件系统,包括 DHCPv4、DHCPv6 服务器、动态 DNS 守护进程、REST API 接口、MySQL、PostgreSQL 和 Cassandra 数据库、RADIUS 和 NETCONF 接口以及相关实用程序。

最后,通常电缆调制解调器控制网络是 10.xxx 范围内的专用 IP 地址空间;这里没有必要为您正在使用的电缆调制解调器(例如 97.129.2.x)提供公共 IP 地址。

PS AFAIK,我所编写的配置解决方案docsis_server已经投入生产 10 年了。

答案2

awk解决方案

awk '/}}/{$0="\thost client3 {\n\t\thardware ethernet a:b:c;\n\t}\n"$0}1' file

相关内容