/etc/dhcp/dhclient.conf 中的“rfc3442-classless-static-routes”是什么

/etc/dhcp/dhclient.conf 中的“rfc3442-classless-static-routes”是什么

我正在尝试在我的笔记本电脑上调试 DHCP(我正在使用dhcpingdhcdump查看 DHCP 服务器发回的内容)。以下是我的/etc/dhcp/dhclient.conf.

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

send host-name = gethostname();

request subnet-mask, broadcast-address, time-offset, routers,
domain-name-servers, interface-mtu,
rfc3442-classless-static-routes;

我想,我知道所有这些选项的含义,除了rfc3442-classless-static-routes.另外,我rfc3442-classless-static-routes在 DHCP 回复中没有看到任何相关内容。

它的含义是什么rfc3442-classless-static-routes?在什么情况下我会使用它?

(这文档没有任何意义)

答案1

最初的 DHCP 规范 (RFC21312132)定义了一个选项 (33),允许 DHCP 服务的管理员在需要时向客户端发布静态路由。

不幸的是,最初的设计如今存在缺陷,因为它假设有类网络地址,很少使用。

rfc3442-classless-static-routes选项允许您使用无类网络地址(或 CIDR)。

CIDR 需要明确指定子网掩码,但原始 DHCP 选项 33 没有空间用于此。因此,此选项(如 RFC 3442 中定义)仅启用更新的替代 DHCP 选项(选项 121),该选项使用 CIDR 表示法定义静态路由。

基本上,如果您需要使用 DHCP 向设备发布静态路由这些静态路由使用 CIDR,那么您需要启用此选项。

如果您已将一个网络分成多个较小的网络,并且需要通知每个路由器流量如何从一个网络到达另一个网络,而无需使用多种可用的动态路由协议之一,则可以使用静态路由。您基本上使用一条语句来设置每个路由器,其效果是“要访问网络 abcd,请通过 fghi 发送流量”

如果您在路由器中设置的路由是有类的,则无需启用此选项。但是,如果路由是 CIDR,那么您将需要启用此选项。幸运的是,许多家庭/咖啡馆网络使用192.168.0.0子网为255.255.255.0(或/24) 的网络,这是真正的 C 类网络,因此您可以避免此选项。

另一方面,一些家庭/咖啡馆网络在该10.0.0.0网络上运行。默认情况下,这是 A 类网络。例如,如果您要将其分成许多10.0.x.0子网,那么这些子网都将是 CIDR 网络,这意味着您需要启用此选项。

仅当您还需要将此路由信息发布到你的主人通过 DHCP。是否需要向主机发布这些静态路由信息由网络设计决定。我大胆猜测基本的家庭/咖啡馆网络不需要它,因为静态路由通常是在路由器上定义的。

上面的配置只是定义了一个新选项(有许多dhclient已经理解的预定义选项)作为选项 121,它由 8 位无符号整数数组组成。然后,如果在 DHCP 服务器上设置了该选项,它会将客户端配置为请求该选项。

如果 DHCP 服务器返回此选项的值,则dhclient退出挂钩脚本 ( /etc/dhclient/dhclient-exit-hooks.d/rfc3442-classless-routes) 会读取该值并相应地配置路由表。

答案2

dhclient.conf可以像这样使用它:

supersede rfc3442-classless-static-routes 25,1,2,3,0,192,168,240,1;

用于通过 192.168.240.1 添加路由 1.2.3.0/25 。

rfc3442-classless-static-routesoverrides routers,因此如果有默认路由,则需要添加默认路由,并以零开头作为网络掩码。

在钩子脚本中,您可以像这样使用它:

if [ "$reason" = 'BOUND' ]; then
        new_routers_rfc=$( echo "$new_routers" | tr '.' ' ' )
#       new_rfc3442_classless_static_routes="16 192 168 192 168 240 1 8 10 192 168 240 1 0 192 168 241 120"
        new_rfc3442_classless_static_routes="16 192 168 $new_routers_rfc 8 10 $new_routers_rfc 0 192 168 241 120"
fi

用于添加路线

default via 192.168.241.120
10.0.0.0/8 via 192.168.240.1
192.168.0.0/16 via 192.168.240.1

该脚本替换默认路由并使用来自 dhcp 的默认路由访问本地网络。

相关内容