前言

ISC DHCPD 服务器不仅仅能分配 IPDNSDefaultGateway 等信息,还可以推送静态路由条目,自动配置到客户端上;

最近将公司服务器和家里的 Lab 环境用 L2TP 打通了,公司服务器作为客户端在连接上 L2TP 后需要自动从家里的 dhcpd 服务器上获取分配的虚拟专用网 IP等信息;由于家里的 Lab 环境是有划分多个网段的,为了公司服务器能正常访问家里的所有网段,就必须要在公司服务器上设置静态的路由条目;当然不可能是手动去配置了,所以就在 dhcpd 上做了点配置,轻松实现了自动分配静态路由的功能;

配置

经过查阅资料,发现 windows 客户端和 Linux/unix 客户端在 DHCP 中接收静态路由的协议参数 code 码是不一样的,因此需要分别为这两种类型的客户端分别定义2种路由设置,配置方法如下:

所有配置均在 /etc/dhcp/dhcpd.conf 中设定

1. 配置文件开头,全局定义2个 option 指定对应的 code

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

2. 在对应的 subnet 段编写需要分配的静态路由条目

subnet 10.0.0.0 netmask 255.255.255.0 {
  range dynamic-bootp 10.0.0.2 10.0.0.20;
  option broadcast-address 10.0.0.255;
  option ms-classless-static-routes 24,192,168,10,10,0,0,1,24,192,168,2,10,0,0,1,24,192,168,100,10,0,0,1,24,172,16,10,10,0,0,1,24,10,0,0,10,0,0,1;
  option rfc3442-classless-static-routes 24,192,168,10,10,0,0,1,24,192,168,2,10,0,0,1,24,192,168,100,10,0,0,1,24,172,16,10,10,0,0,1,24,10,0,0,10,0,0,1;
}

以上的两条 static-routes 条目因为是针对不同类型的客户端,所以出了 option 对象名称不同,设定的路由条目内容都是完全一样的,但需要注意路由条目的写法规则:

网段掩码位数,目标网段,网关地址

单一路由条目写法如下:网段 192.168.10.0/24 网关 10.0.0.1
    24,192,168,10,10,0,0,1;

2条路由条目写法:网段1 192.168.10.0/24 网关 10.0.0.1 网段2 192.168.2.0/25 网关 10.0.0.1
    24,192,168,10,10,0,0,1,24,192,168,2,10,0,0,1;

更多路由条目的写法类似,以此往后附加即可,需要注意的是每个网段开头的掩码位数,必须要和紧接在后面的网段范围匹配,全部用逗号分隔,不是IP地址常用的点分割;
    

配置文件修改完毕后,需要 重启/重载 (restart/reload) dhcpd 服务生效

验证

使用客户端,连接上 L2TP 后查看本地路由表,确认有包含分配的 static-route条目
dhcpd-static-route.png

Last modification:March 10, 2019
如果觉得我的文章对你有用,请随意赞赏