CentOS-Stream-10 搭建DHCP服务器(一)

1.安装epel-release

2.安装kea。

yum install kea* -y
cd /etc/kea/

3.默认配置文档详解。

cp kea-dhcp4.conf kea-dhcp4.bak
vim kea-dhcp4.conf
{


"Dhcp4": {
    // 添加需要监听的网络接口名称。
    "interfaces-config": {
        // 你可能只需添加接口名称(例如 "eth0"),或该接口上的特定 IPv4 地址(例如 "eth0/192.0.2.1")。
        "interfaces": [ ]

        // Kea DHCPv4 服务器默认使用原始套接字进行监听。这能确保接收所有数据包,包括那些尚未分配 IPv4 地址的直连客户端发送的数据包。
        // 但如果你的流量始终通过中继转发,使用常规 UDP 套接字通常更为合适。若需启用此方式,取消以下行的注释:

        // "dhcp-socket-type": "udp"
    },

    // Kea 支持控制通道功能,该功能可让服务器在运行期间接收管理命令。
    // 它是一个 Unix 域套接字,用于接收 JSON 格式的命令,例如 config-set(设置新配置)、
    // config-reload(通知 Kea 从文件重新加载配置)、statistic-get(获取统计信息)等诸多命令。
    "control-socket": {
        "socket-type": "unix",
        "socket-name": "kea4-ctrl-socket"
    },

    // 使用 Memfile 租约数据库后端,将租约存储在 CSV 文件中。
    // 根据 Kea 的编译配置,它可能还支持 SQL 数据库(MySQL 和 / 或 PostgreSQL)。
    // 这些数据库后端需要更多参数,例如数据库名称、主机地址,可能还需要用户名和密码。
    // 每个后端都有专用的配置示例。
    "lease-database": {
        // Memfile 是最简单易用的后端。它是一个内存中的 C++ 数据库,会将其状态存储在 CSV 文件中。
        "type": "memfile",
        "lfc-interval": 3600
    },

    // Kea 允许将主机预留信息存储在数据库中。如果你的网络规模较小,
    // 或预留的主机数量不多,将这些信息保存在配置文件中可能更简便。
    // 若网络规模较大,使用数据库存储通常更为合适。
    // 如需启用该功能,取消以下内容的注释:
    // "hosts-database": {
    //     "type": "mysql",
    //     "name": "kea",
    //     "user": "kea",
    //     "password": "1234",
    //     "host": "localhost",
    //     "port": 3306
    // },
    
    // 配置过期租约回收与租约亲和性功能。
    // 过期租约每 10 秒回收一次,每 25 秒会删除已过期超过 3600 秒的回收租约。
    // 单次租约回收周期的限制为 100 个租约或 250 毫秒,
    // 若连续 5 个回收周期后数据库中仍存在过期租约,系统将记录警告日志。
    // 若 “flush-reclaimed-timer-wait-time” 和 “hold-reclaimed-time” 均非 0,
    // 当客户端发送释放消息时,租约将标记为过期,而非从租约存储中直接删除。
    "expired-leases-processing": {
        "reclaim-timer-wait-time": 10,
        "flush-reclaimed-timer-wait-time": 25,
        "hold-reclaimed-time": 3600,
        "max-reclaim-leases": 100,
        "max-reclaim-time": 250,
        "unwarned-reclaim-cycles": 5
    },

    // 此处指定的全局计时器适用于所有子网,除非特定子网中定义了子网专属值。
    "renew-timer": 900,
    "rebind-timer": 1800,
    "valid-lifetime": 3600,

    
    
    "option-data": [
        // 指定选项时,通常需要明确(名称或代码)及数据二者之一。
        // 完整的选项配置包含名称、代码、命名空间、CSV 格式和数据。
        // 命名空间默认值为 “dhcp4”,通常无需修改,除非使用封装选项。
        // CSV 格式默认值为 “true”,这一设置通常也适用,除非你希望将
        // 整个选项值指定为长十六进制字符串。例如,配置域名服务器可按如下方式操作:
        // {
        //     "name": "domain-name-servers",
        //     "code": 6,
        //     "csv-format": "true",
        //     "space": "dhcp4",
        //     "data": "192.0.2.1, 192.0.2.2"
        // }
        // 但这样写过于繁琐,因此更简便的写法如下:
        {
            "name": "domain-name-servers",
            "data": "192.0.2.1, 192.0.2.2"
        },

        // 通常,用户更倾向于通过名称引用选项,这样就无需记忆对应的代码。
        // 不过,也有部分用户偏好使用数值形式。例如,“domain-name”(域名)选项对应的代码为 15,
        // 因此你既可以用 “name”: "domain-name" 引用它,也可以用 “code”: 15 引用。
        {
            "code": 15,
            "data": "example.org"
        },

        // 域名搜索也是一个常用选项。它会告知客户端尝试解析指定域名内的名称。
        {
            "name": "domain-search",
            "data": "mydomain.example.com, example.com"
        },

        // 数值中包含逗号的字符串选项,需对逗号进行转义(即每个逗号前添加两个反斜杠)。
        // 这是因为逗号被预留用于分隔复合选项中的各个字段。同时,为符合 JSON 规范(该规范不允许使用 "," 格式),
        // 因此需要采用这种稍不常见的双反斜杠表示法。
        // JSON 支持的合法转义字符包括:反斜杠后接 "/bfnrt" 中的任意字符,
        // 或反斜杠后接 "u" 再加四位十六进制数(目前 Kea 仅支持 \u0000 至 \u00ff 范围内的码点)。
        // CSV 处理会将 '\' 转换为 '',将 ',' 转换为 ','
        // 其他情况(例如 '\x')则保持原样转换为 '\x'。但由于这一处理基于 JSON 字符串值,
        // 因此在 JSON 输入中,每个反斜杠字符都必须加倍书写。
        {
            "name": "boot-file-name",
            "data": "EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00"
        },

        // 接收整数值的选项可采用十进制或十六进制格式指定。// 十六进制格式既可以是纯数字形式(例如 abcd),
        // 也可以添加 0x 前缀(例如 0xabcd)。
        {
            "name": "default-ip-ttl",
            "data": "0xf0"
        }

        // 注意:Kea 会自行提供部分选项。具体包括:
        // IP 地址租约类型(代码 51,基于有效租期参数)、
        // 子网掩码(代码 1,基于子网定义)、
        // 续订时间(代码 58,基于续订计时器参数)、
        // 重新绑定时间(代码 59,基于重新绑定计时器参数)。
    ],

    // 此处还可定义其他全局参数,包括选项定义
    //(若你需使用厂商选项、自定义选项,或处理 Kea 目前尚未原生支持的选项,该功能会非常实用)。

    // 你也可以定义客户端类。若已定义客户端类,传入的数据包可能会被分配至特定类中。
    // 一个客户端类可代表具有某些共同特征的任意设备组,例如 Windows 设备、iPhone 设备、
    // 需要特殊选项的故障打印机等。// 基于类信息,你可以允许或拒绝客户端使用特定子网,
    // 为其添加特殊选项,或修改部分固定字段的值。
    "client-classes": [
        {
            // 该参数指定此类的名称。// 若你需要引用此类,该名称会非常实用。
            "name": "voip",

            // 这是一个判定规则。该表达式会在每个传入数据包到达时执行计算,
            // 计算结果需为布尔值(true 或 false)。若结果为 true,
            // 则该数据包会被归入指定的类。此类表达式共有数十种。
            "test": "substring (option [60].hex,0,6) == 'Aastra'",

            // 若客户端属于此类,你可定义额外行为。例如,将 DHCPv4 数据包中的特定字段设置为指定值。
            "next-server": "192.0.2.254",
            "server-hostname": "hal9000",
            "boot-file-name": "/dev/null"

            // 若你希望此类中的设备接收特殊选项,也可在此处定义选项值。
        }
    ],

    // 此处还可配置钩子(hooks)功能。Kea 支持一种强大的机制,
    // 允许加载外部库以提取信息,甚至能影响服务器处理数据包的方式。
    // 这些外部库包括额外的取证日志功能、更灵活的主机预留方式,甚至可添加额外命令。
    // "hooks-libraries": [
    //   {
    //       // 取证日志库会生成 Kea 所服务所有设备的取证类审计追踪记录,
    //       
    //       // 包含设备标识符(如 MAC 地址)、网络位置、活跃时间等信息。
    //      
    //       "library": "/usr/lib64/kea/hooks/libdhcp_legal_log.so",
    //       "parameters": {
    //           "base-name": "kea-forensic4"
    //       }
    //   },
    //   {
    //       // 灵活标识符(flex-id)。Kea 软件提供了一种处理主机预留的方式,
    //       // 支持预留地址、前缀、选项、客户端类及其他功能。
    //       // DHCPv4 中,预留可基于硬件地址、DUID、电路标识(circuit-id)或客户端标识(client-id);
    //       // DHCPv6 中,则基于硬件地址或 DUID。
    //       // 但在某些场景下,预留需求更为复杂,例如使用上述未提及的其他选项、
    //       // 特定选项的部分内容,甚至结合多个选项和字段来唯一标识客户端。
    //       
    //       
    //       
    //       
    //       "library": "/usr/lib64/kea/hooks/libdhcp_flex_id.so",
    //       "parameters": {
    //           "identifier-expression": "relay4[2].hex"
    //       }
    //   },
    //   {
    //       // 主机存储所需的 MySQL 主机后端钩子库。
    //       "library": "/usr/lib64/kea/hooks/libdhcp_mysql.so"
    //   }
    // ],

    // 以下是简单的 IPv4 子网声明示例。取消注释即可启用。
    // 这是一个用 [] 标识的列表,包含多个用 {} 标识的结构体。
    // 每个结构体描述一个子网,可包含多个参数。
    // 其中一个参数是 "pools"(地址池),它同样是一个结构体列表。
    "subnet4": [
        {
            // 该配置定义整个子网。Kea 会使用此信息确定客户端的接入位置。
            // 这对应你网络中的完整子网。
            // 子网标识符应对每个子网保持唯一。
            "id": 1,

            // 这是每个子网的必填参数。
            "subnet": "192.0.2.0/24",

            // 地址池(Pools)定义子网中由 Kea 管理的实际部分。
            // 从技术角度来说,这是可选参数,但对于 DHCP 正常工作而言,
            // 该参数几乎是必需的。若省略此参数,客户端将无法获取地址,
            // 除非已为其配置了主机预留
            "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ],

            // 这是子网选择器之一。
            // 若 DHCPv4 服务器需接收本地客户端(与服务器处于同一子网)的请求,
            // 请取消 “interface”(接口)参数的注释,并指定对应的接口名称。
            // 服务器通过该指定接口接收的请求,将分配至当前子网。
            // 此规则适用于 DORA 交互流程及重新绑定状态的客户端。
            // 续订状态的客户端会以单播方式发送消息,服务器将通过其续订的地址确定客户端所属的子网。
            // 使用该参数时,“relay”(中继)参数通常无需配置。
            // "interface": "eth0",

            // 这是另一个子网选择器。
            // 请取消 “relay”(中继)参数的注释,并指定中继地址列表。
            // 当服务器通过其中任一中继接收查询时,会选择该子网进行租约分配。
            // 使用该参数时,“interface”(接口)参数通常无需配置。
            // "relay": {
            //    "ip-addresses": [ "10.0.0.1" ]
            // },

            // 这些是子网专属选项。
            // 在大多数情况下,你至少需要定义路由选项(routers option),
            // 因为缺少该选项时,客户端将无法访问默认网关,也就无法连接互联网。
            "option-data": [
                {
                    // 对于每个 IPv4 子网,你很可能至少需要指定一个路由器。
                    "name": "routers",
                    "data": "192.0.2.1"
                }
            ],

            // Kea 提供主机预留机制。
            // Kea 支持通过多种不同类型的标识符进行预留配置:
            // 硬件地址(hw-address,即客户端的硬件 / MAC 地址)、
            // DUID(客户端插入的唯一标识符)、
            // 客户端标识(client-id,客户端插入的标识符)
            // 以及电路标识(circuit-id,中继代理插入的标识符)。
            // Kea 还支持灵活标识符(flex-id),允许你指定一个表达式,该表达式会对每个传入的数据包进行计算。
            // 计算结果将用作标识客户端的依据。//// 注意:Kea 中的预留配置是子网专属的。
            // 这与 ISC DHCP 的机制不同。// 迁移配置时请务必注意这一点。
            "reservations": [

                // 这是针对特定硬件 / MAC 地址的预留配置。 这是一种相当简单的预留方式:仅分配一个地址,无其他额外配置。
                {
                    "hw-address": "1a:1b:1c:1d:1e:1f",
                    "ip-address": "192.0.2.201"
                },

                // 这是针对特定客户端标识(client-id)的预留配置。
                // 该配置还表明,此客户端将获取一个预留主机名。
                // 主机名可针对任意类型的标识符进行定义,并非仅局限于客户端标识(client-id)。
                {
                    "client-id": "01:11:22:33:44:55:66",
                    "ip-address": "192.0.2.202",
                    "hostname": "special-snowflake"
                },

                // 第三个预留配置基于 DUID(设备唯一标识符)。
                // 该配置为此特定客户端定义了专属的特殊选项值。
                // 若 “域名服务器(domain-name-servers)” 选项已在全局、子网或类级别定义,
                // 则客户端专属的选项值将优先生效。
                {
                    "duid": "01:02:03:04:05",
                    "ip-address": "192.0.2.203",
                    "option-data": [ {
                        "name": "domain-name-servers",
                        "data": "10.1.1.202, 10.1.1.203"
                    } ]
                },

                // 第四个预留配置基于电路标识(circuit-id)。
                // 这是由中继代理插入的一个选项,中继代理负责将客户端的数据包转发至服务器。
                // 本示例中,还为此主机分配了厂商专属选项。
                //使用预留功能时,建议配置以下参数:
                // 全局预留开关(reservations-global)、子网内预留开关(reservations-in-subnet)、
                // 地址池外预留开关(reservations-out-of-pool,子网级参数)
                // 以及主机预留标识符类型(host-reservation-identifiers,全局参数)。
                {
                    "client-id": "01:12:23:34:45:56:67",
                    "ip-address": "192.0.2.204",
                    "option-data": [
                        {
                            "name": "vivso-suboptions",
                            "data": "4491"
                        },
                        {
                            "name": "tftp-servers",
                            "space": "vendor-4491",
                            "data": "10.1.1.202, 10.1.1.203"
                        }
                    ]
                },
                // 此预留配置适用于需要设置特定 DHCPv4 字段的客户端。
                // 支持配置的三个字段分别是下一跳服务器(next-server)、
                // 服务器主机名(server-hostname)和启动文件名(boot-file-name)。
                {
                    "client-id": "01:0a:0b:0c:0d:0e:0f",
                    "ip-address": "192.0.2.205",
                    "next-server": "192.0.2.1",
                    "server-hostname": "hal9000",
                    "boot-file-name": "/dev/null"
                },
                // 此预留配置使用灵活标识符(flexible identifier)。
                // 管理员无需依赖特定字段,而是可以定义一个表达式,
                // 其语法与客户端分类所用表达式类似,例如 substring (relay [0].option [17],0,6)。
                // 随后,服务器会根据该表达式对传入数据包的计算结果,匹配对应的预留配置。
                // 表达式可指定为十六进制格式,或用单引号包裹的纯文本格式。
                // 注意:灵活标识符功能需加载 flex_id 钩子库方可生效。
                {
                    "flex-id": "'s0mEVaLue'",
                    "ip-address": "192.0.2.206"
                }
                // 你可以在此处添加更多预留配置。
            ]
            // 你可以在此处添加更多预留配置。
        }
    ],

    // DHCPv4 服务器还支持众多其他参数。
    // 此处未列出这些参数,是为了避免一次性提供过多信息给用户造成困扰。

    // 日志配置从此处开始。Kea 采用不同的日志记录器记录各类操作。有关详细信息(如日志记录器名称)
    "loggers": [
    {
        // 本节配置适用于 kea-dhcp4,它是 DHCPv4 组件的基础日志记录器。
        // 该配置指定 DHCPv4 服务器将所有日志消息(级别为 INFO 及以上)写入文件。
        "name": "kea-dhcp4",
        "output-options": [
            {
                // 指定输出文件。支持以下几种特殊值:
                // - stdout(输出至标准输出)
                // - stderr(输出至标准错误输出)
                // - syslog(记录至系统日志)
                // - syslog:name(使用指定名称记录至系统日志)
                // 其他任意值均视为文件名
                "output": "kea-dhcp4.log"

                // 适用于 systemd 的精简日志格式,避免冗余信息。
                // "pattern": "%-5p %m\n",

                // 该配置控制日志输出是否在每次写入后刷新至磁盘。
                // "flush": false,

                // 该配置指定日志文件轮换前的最大大小。
                // "maxsize": 1048576,

                // 该配置指定需保留的日志轮换文件最大数量。
                // "maxver": 8
            }
        ],
        // 该配置指定需保留的日志消息级别。支持的值包括:FATAL(致命错误)、ERROR(错误)、WARN(警告)、INFO(信息)、DEBUG(调试)。
        "severity": "INFO",

        // 若指定日志级别为 DEBUG(调试),则使用此数值配置。
        // 0 表示日志详细程度最低,99 表示详细程度最高。
        // 请注意,若启用最高详细程度,Kea 可能会生成海量日志。
        "debuglevel": 0
    }
  ]
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

txzz8888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值