我正在尝试在我的笔记本电脑上调试 DHCP(我正在使用dhcping
并dhcdump
查看 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 规范 (RFC2131和2132)定义了一个选项 (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-routes
overrides 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 的默认路由访问本地网络。