freebsd 使用手册-dhcp
--------------------------------------------------------------------------------

freebsd 集成

  freebsd 完全地集成了 isc 或 openbsd 的 dhcp 客户端, dhclient (取决于您运行的 freebsd 版本)。 dhcp 客户端被安装程序直接支持, 并且是基本系统的一部分。 这使得您不再需要去了解那些已经运行了 dhcp 服务器的网络的具体配置参数。 从 freebsd 3.2 开始, 每一个发行版中均包含 dhclient。

  sysinstall 能够支持 dhcp。 在 sysinstall 中配置网络接口时, 它询问的第二个问题便是: “do you want to try dhcp c of the interface? (您是否希望在此接口上尝试 dhcp 配置?)”。 如果做肯定的回答, 则将运行 dhclient, 一旦成功,则将自动地填写网络配置信息。

  要在系统启动时使用 dhcp, 您必须做两件事:

您的内核中, 必须包含 bpf 设备。 如果需要这样做, 需要将 device bpf 添加到内核的编译配置文件中, 并重新编译内核。
bpf 设备已经是 freebsd 发行版中默认的 generic 内核的一部分了, 因此如果您没有对内核进行定制,则不用创建一份新的内核配置文件, dhcp 就能工作了。

注意: 对于那些安全意识很强的人来说, 您应该知道 bpf 也是包侦听工具能够正确工作的条件之一 (当然, 它们还需要以 root 身份运行才行)。 bpf 是 使用 dhcp 所必须的, 但如果您对安全非常敏感,则很可能会有理由不把 bpf 加入到您的内核配置中,直到您真的需要使用 dhcp 为止。

编辑您的 /etc/rc.c 并加入下面的设置:

ifc
注意: 务必将 fxp0 替换为您希望自动配置的网络接口的名字, 您可以在 第 11.8 节 找到更进一步的介绍。

如果您希望使用另一位置的 dhclient, 或者需要给 dhclient 传递其他参数, 还可以添加下面的配置 (根据需要进行修改):

dhcp_program="/sbin/dhclient"
dhcp_flags=""

  dhcp 服务器, dhcpd, 是作为 net/isc-dhcp3-server port 的一部分提供的。 这个 port 包括了 isc dhcp 服务器及其文档。

文件
/etc/dhclient.c

dhclient 需要一个配置文件, /etc/dhclient.c 一般说来, 这个文件中只包括注释,而默认值基本上都是合理的。 这个配置文件在 dhclient.c 联机手册中进行了进一步的阐述。

/sbin/dhclient

dhclient 是一个静态连编的, 它被安装到 /sbin 中。 dhclient(8) 联机手册给出了关于 dhclient 的进一步细节。

/sbin/dhclient-script

dhclient-script 是一个 freebsd 专用的 dhcp 客户端配置脚本。在 dhclient-script(8) 中对它进行了描述, 但一般来说, 用户不需要对其进行任何修改, 就能够让一切正常运转了。

/var/db/dhclient.leases

dhcp 客户程序会维护一个数据库来保存有效的 lease, 它们被以日志的形式保存到这个文件中。 dhclient.leases(5) 给出了更为细致的介绍。

  dhcp 协议的完整描述是 rfc 2131。 关于它的其他信息资源的站点 http://www.dhcp.org/ 也提供了详尽的资料。

安装和配置 dhcp 服务器

  dhcp 套件中的服务器部分并没有作为 freebsd 的一部分来提供, 因此您需要安装 net/isc-dhcp3-server port 才能提供这个服务。

安装 dhcp 服务器
  为了在您的 freebsd 系统上进行配置以便作为 dhcp 服务器来使用, 需要把 bpf(4) 设备编译进内核。 要完成这项工作, 需要将 device bpf 加入到您的内核配置文件中, 并重新联编内核。

  bpf 设备是 freebsd 所附带的 generic 内核中已经联入的组件, 因此您并不需要为了让 dhcp 正常工作而特别地定制内核。

注意: 如果您有较强的安全意识, 应该注意 bpf 同时也是让听包程序能够正确工作的设备 (尽管这类程序仍然需要以特权用户身份运行)。 bpf 是 使用 dhcp 所必需的, 但如果您对安全非常敏感, 您可能会不希望将 bpf 放进内核, 直到您真的认为 dhcp 是必需的为止。

  接下来要做的是编辑示范的 dhcpd.c 它由 net/isc-dhcp3-server port 安装。 默认情况下, 它的名字应该是 /usr/local/etc/dhcpd.conf.sample, 在开始修改之前,您需要把它复制为 /usr/local/etc/dhcpd.c

配置 dhcp 服务器
  dhcpd.c 包含了一系列关于子网和主机的定义,下面的例子可以帮助您理解它:

option domain-name "example.com";
option domain-name-servers 192.168.4.100;
option subnet-mask 255.255.255.0;

default-lease-time 3600;
max-lease-time 86400;
ddns-update-style n

subnet 192.168.4.0 netmask 255.255.255.0 {
range 192.168.4.129 192.168.4.254;
option routers 192.168.4.1;
}

host mailhost {
hardware ethernet 02:03:04:05:06:07;
fixed-address mailhost.example.com;
}

这个选项指定了提供给客户机作为默认搜索域的域名。 请参考 resolv.c 以了解关于这一概念的详情。

这个选项用于指定一组客户机使用的 dns 服务器, 它们之间以逗号分隔。

提供给客户机的子网掩码。

客户机可以请求租约的有效期, 而如果没有, 则服务器将指定一个租约有效期, 也就是这个值 (单位是秒)。

这是服务器允许租出地址的最大时长。 如果客户机请求了更长的租期, 则它将得到一个地址,但其租期仅限于 max-lease-time 秒。

这个选项用于指定 dhcp 服务器在一个地址被接受或释放时是否应对应尝试更新 dns。 在 isc 实现中, 这一选项是 必须指定的。

指定地址池中可以用来分配给客户机的 ip 地址范围。 在这个范围之间, 以及其边界的 ip 地址将分配给客户机。

定义客户机的默认网关。

主机的硬件 mac 地址 (这样 dhcp 服务器就能够在接到请求时知道请求的主机身份)。

指定总是得到同一 ip 地址的主机。 请注意在此处使用主机名是对的, 因为 dhcp 服务器会在返回租借地址信息之前自行解析主机名。
  在配制好 dhcpd.c 之后, 应在 /etc/rc.c 中启用 dhcp 服务器, 也就是增加:

dhcpd_enable="yes"
dhcpd_ifaces="dc0"
  此处的 dc0 接口名应改为 dhcp 服务器需要监听 dhcp 客户端请求的接口 (如果有多个, 则用空格分开)。

  接下来, 可以用下面的命令来启动服务:

# /usr/local/etc/rc.d/isc-dhcpd.sh start
  如果未来您需要修改服务器的配置, 请务必牢记发送 sighup 信号给 dhcpd 并 不会 导致配置文件的重新加载,而这在其他服务程序中则是比较普遍的约定。 您需要发送 sigterm 信号来停止进程, 然后使用上面的命令来重新启动它。

文件
/usr/local/sbin/dhcpd

dhcpd 是静态连接的, 并安装到 /usr/local/sbin 中。 随 port 安装的 dhcpd(8) 联机手册提供了关于 dhcpd 更为详尽的信息。

/usr/local/etc/dhcpd.c

dhcpd 需要配置文件, 即 /usr/local/etc/dhcpd.c 才能够向客户机提供服务。这个文件需要包括应提供给客户机的所有信息, 以及关于服务器运行的其他信息。此配置文件的详细描述可以在随 port 安装的 dhcpd.c 联机手册上找到。

/var/db/dhcpd.leases

dhcp 服务器会维护一个它签发的租用地址数据库, 并保存在这个文件中,这个文件是以日志的形式保存的。 随 port 安装的 dhcpd.leases(5) 联机手册提供了更详细的描述。

/usr/local/sbin/dhcrelay

dhcrelay 在更为复杂的环境中, 可以用来支持使用 dhcp 服务器转发请求给另一个独立网络上的 dhcp 服务器。 如果您需要这个功能, 需要安装 net/isc-dhcp3-relay port。 dhcrelay(8) 联机手册提供了更为详尽的介绍。