CentOS 7 DHCP 客户端 - 如何使用“无类别静态路由”(“代码 121”)?

CentOS 7 DHCP 客户端 - 如何使用“无类别静态路由”(“代码 121”)?

根据这个答案...

https://unix.stackexchange.com/a/457577/61742

...我可以使用以下配置在 DHCP 客户端中使用来自 DHCP 服务器的推送路由,方法是将以下配置放入/etc/dhclient.conf或归档.../etc/dhcp3/dhclient.conf

option classless-static-routes code 121 = array of { ip-address, ip-address };

但是在CentOS 7中这个文件不存在,但是以下文件......

[root@localhost ~]# ps -eaf | grep dhcli
root       780   650  0 15:02 ?        00:00:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s8.pid -lf /var/lib/NetworkManager/dhclient-00cb8299-feb9-55b6-a378-3fdc720e0bc6-enp0s8.lease -cf /var/lib/NetworkManager/dhclient-enp0s8.conf enp0s8
root       783   650  0 15:02 ?        00:00:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s17.pid -lf /var/lib/NetworkManager/dhclient-8512e951-6012-c639-73b1-5b4d7b469f7f-enp0s17.lease -cf /var/lib/NetworkManager/dhclient-enp0s17.conf enp0s17
root      2218  1152  0 15:36 pts/0    00:00:00 grep --color=auto dhcli

注意:记下“-cf”参数的值(文件:/var/lib/NetworkManager/dhclient-enp0s8.conf/var/lib/NetworkManager/dhclient-enp0s17.conf)。

我的问题是:在 CentOS 7 DHCP 客户端上使用“无类静态路由”(代码 121)的正确方法是什么?

谢谢!


加:

这是我的 ISC KEA DHCP (DHCPv4) 的配置...

cat /usr/local/etc/kea/kea-dhcp4.conf

[...]
"option-def": [{
        "name": "rfc3442-classless-static-routes",
        "code": 121,
        "space": "dhcp4",
        "type": "record",
        "record-types": "uint8,uint8,uint8,ipv4-address"
    }
],
"option-data": [{
        "name": "rfc3442-classless-static-routes",
        "data": "10,1,4, 10.1.6.4"
}]
[...]

目标是将 10.1.4.0/24 的请求路由到我的 DHCP 客户端中的 IP 10.1.6.4/32。

ip route add 10.1.4.0/24 dev enp0s8 via 10.1.6.4注意:与我在每个 DHCP 客户端中使用该命令得到的结果是一样的。

答案1

无耻抄袭从这个答案:

如果您希望通过 DHCP 执行此操作,请确保您已根据 RedHat 知识库文章正确配置了 DHCP 客户端在这里

为了确保在使用 NetworkManager 时正确处理 DHCP 服务器提供的 RFC3442 标准无类静态路由,应将以下行放入/etc/dhclient.conf或(如果使用每个接口 DHCP 选项)中/etc/dhclient-<ifname>.conf

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; 
option ms-classless-static-routes code 249 = array of unsigned integer 8; 
also request rfc3442-classless-static-routes;
also request ms-classless-static-routes;

这些行将确保从 DHCP 服务器请求 RFC3442 无类别静态路由,并确保 NetworkManager 正确处理它们。

答案2

事实上,这个答案是对 @Isaac 的答案和一些陷阱的补充 - 可能看起来有点明显,但对我来说不是 - 关于所提出的问题。

首先,尽管所呈现的宇宙中有一些模式,但有必要了解 DHCP 服务器中的配置内容与 DHCP 客户端中的预期内容之间的相关性。实际上,“option-def”->“name”等参数可以在“rfc3442-classless-static-routes”和“classless-static-routes”之间变化,“option-def”->“record-types”在“rfc3442-classless-static-routes”之间变化。 uint8、uint8、uint8、ipv4-address”和“uint8、uint8、uint8、uint8、uint8、uint8、uint8、uint8”等等...也就是说,这取决于 DHCP 客户端期望从“其他侧”基本上。

对于 CentOS 7,线程中指出了什么https://unix.stackexchange.com/a/459963/61742默认情况下已经配置,那么只需在 ISC KEA DHCP (DHCPv4)(我的情况)中配置 CentOS 7 从“另一端”等待什么。

最后,配置看起来像这样......

cat /usr/local/etc/kea/kea-dhcp4.conf

[...]
"option-def": [{
        "name": "rfc3442-classless-static-routes",
        "code": 121,
        "space": "dhcp4",
        "type": "record",
        "array": true,
        "record-types": "uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8"
    }
],
"option-data": [{
        "name": "rfc3442-classless-static-routes",
        "data": "24,10,1,4,10,1,6,4"
}]
[...]

...由于 CentOS 7 配置为...

cat /var/lib/NetworkManager/dhclient-enp0s8.conf

[...]
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; 
also request rfc3442-classless-static-routes;
[...]

一些澄清:

“record-types”是一个掩码,即“date”中通知的数组的每个位置中的内容,正如 CentOS 7 中所期望的那样,是一个“无符号整数 8 的数组”(uint8)。

“数据”根据以下示例工作:如果我想要以下路由,10.1.4.0/24 via 10.1.6.4那么我会通知"24,10,1,4,10,1,6,4".请注意,应省略 中的零,10.1.4.0/24因为它是 3 个八位位组 (/24) 的掩码。

提示:“option-data”参数可以放置在“subnet4”(文件“/usr/local/etc/kea/kea-dhcp4.conf”)中的多个位置,这取决于您希望如何分发路由配置。

特别感谢@Isaac、@Rui F Ribeiro 和@AB!

相关内容