第三十四章 高级网络

第三十四章 高级网络34.1. 简介34.2. 网关和路由34.2.1. 路由基础34.2.2. 配置具有静态路由的路由器34.2.3. 排错34.2.4. 多播注意事项34.3. 虚拟机34.4. 无线高级身份验证34.4.1. 带EAP-TLS的WPA34.4.2. 带EAP-TTLS的WPA34.4.3. 带EAP-PEAP的WPA34.5. 无线Ad-hoc模式34.5.1. FreeBSD主机访问点34.5.1.1. 基本设置34.5.1.2. 无身份验证或加密的基于主机的接入点34.5.1.3. WPA2基于主机的接入点34.5.1.3.1. WPA2-PSK34.6. USB 网络共享34.7. 蓝牙34.7.1. 正在加载蓝牙支持34.7.2. 查找其他蓝牙设备34.7.3. 设备配对34.7.4. 使用PPP配置文件的网络访问34.7.5. 蓝牙协议34.7.5.1. 逻辑链路控制和适配协议(L2CAP)34.7.5.2. 射频通信(RFCOMM)34.7.5.3. 服务发现协议(SDP)34.7.5.4. OBEX物体推送(OPUSH)34.7.6. 排错34.8. 桥接34.8.1. 启用桥接34.8.2. 启用生成树34.8.3. 桥接接口参数34.8.4. SNMP监控34.9. 链路聚合和故障转移34.9.1. 配置示例34.9.1.1. 使用Cisco®交换机的LACP聚合34.9.1.2. 故障切换模式34.9.1.3. 以太网和无线接口之间的故障切换模式34.10. 带PXE的无盘操作34.10.1. 设置PXE环境34.10.2. 配置DHCP服务器34.10.3. 调试PXE问题34.11. 通用地址冗余协议(CARP)34.11.1. 使用CARP34.12. VLANs

34.1. 简介

本章涵盖了许多高级网络主题。

阅读本章以了解:

• 网关和路线的基础知识。 • 如何设置USB网络共享。 • 如何设置IEEE®802.11和蓝牙®设备。 • 如何让FreeBSD充当桥梁。 • 如何设置网络PXE启动。 • 如何在FreeBSD中启用和利用通用地址冗余协议(Common Address Redundancy Protocol,CARP)的功能。 • 如何在FreeBSD上配置多个VLAN。 • 如何配置蓝牙耳机。

在阅读本章之前: • 了解 /etc/rc 脚本的基础知识。 • 熟悉基本的网络术语。 • 了解FreeBSD上的基本网络配置(7. FreeBSD网络)。 • 知道如何配置和安装新的FreeBSD内核(10. 配置FreeBSD内核)。 • 知道如何安装其他第三方软件(4. 安装应用程序:软件包和端口)。

34.2. 网关和路由

Routing(路由)是允许系统找到到另一个系统的网络路径的机制。路由是一对定义好的地址,代表“destination(目的地)”和“gateway(网关)”。路由指示在尝试到达指定目的地时,通过指定的网关发送数据包。有三种类型的目标:单个主机、子网和“默认”。如果没有其他路线适用,则使用“默认路线”。还有三种类型的网关:独立主机、接口(也称为链路)和以太网硬件(MAC)地址。已知路由存储在路由表中。

本节概述了路由基础知识。然后,它演示了如何将FreeBSD系统配置为路由器,并提供了一些故障排除技巧。

34.2.1. 路由基础

要查看FreeBSD系统的路由表,请使用 netstat(1)

此示例中的条目如下:

Flags 列中可以看到每条路线的各种属性。常见的路由表标志总结了其中一些标志及其含义:

Flag目的
U路线处于活动状态(up)。
H路由目标是单个主机。
G将此目的地的任何内容发送到此网关,网关将从那里确定将其发送到哪里。
S此路由是静态(statically)配置的。
C基于此路由克隆新路由,供计算机连接。此类路由通常用于本地网络。
W该路由是基于局域网(克隆)路由自动配置的。
L路由涉及以太网(链路)硬件的引用。

在FreeBSD系统上,可以通过指定默认网关的IP地址在 /etc/rc.conf 中定义默认路由:

也可以使用 route 手动添加路由:

请注意,手动添加的路由在重新启动后将无法存活。有关手动操作网络路由表的更多信息,请参阅 route(8)

34.2.2. 配置具有静态路由的路由器

如果FreeBSD系统是双路系统,则可以将其配置为网络的默认网关或路由器。双宿主系统是指驻留在至少两个不同网络上的主机。通常,每个网络都连接到一个单独的网络接口,但IP别名可用于将多个地址绑定到一个物理接口,每个地址位于不同的子网上。

为了使系统在接口之间转发数据包,FreeBSD必须配置为路由器。互联网标准和良好的工程实践阻止FreeBSD项目默认启用此功能,但可以通过在 /etc/rc.conf 中添加以下行将其配置为在启动时启动:

要立即启用路由,请将 sysctl(8) 变量 net.inet.ip.forwarding 设置为 1 。若要停止路由,请将此变量重置为 0

路由器的路由表需要额外的路由,以便它知道如何到达其他网络。可以使用静态路由手动添加路由,也可以使用路由协议自动学习路由。静态路由适用于小型网络,本节介绍如何为小型网络添加静态路由条目。

考虑以下网络:

34.2.2

在这种情况下,RouterA 是一台FreeBSD机器,充当互联网其他部分的路由器。它的默认路由设置为 10.0.0.1 ,这允许它与外界连接。RouterB 已配置为使用 192.168.1.1 作为其默认网关。

在添加任何静态路由之前,RouterA 上的路由表如下:

使用当前路由表,RouterA 没有到 192.168.2.0/24 网络的路由。以下命令使用 192.168.1.2 作为下一跳将 Internal Net 2 网络添加到 RouterA 的路由表中:

现在,RouterA 可以访问 192.168.2.0/24 网络上的任何主机。但是,如果FreeBSD系统重新启动,路由信息将不会持久。如果静态路由需要持久化,请将其添加到 /etc/rc.conf

static_routes 配置变量是一个由空格分隔的字符串列表,其中每个字符串都引用一个路由名称。变量 route_intralnet2 包含该路由名称的静态路由。

static_routes 中使用多个字符串会创建多个静态路由。下面显示了为 192.168.0.0/24192.168.1.0/24 网络添加静态路由的示例:

34.2.3. 排错

当为网络分配地址空间时,服务提供商会配置其路由表,以便将网络的所有流量发送到站点的链接。但是外部站点如何知道将数据包发送到网络的ISP?

有一个系统可以跟踪所有分配的地址空间,并定义它们与互联网骨干网或承载全国和世界各地互联网流量的主干线的连接点。每台骨干机都有一组主表的副本,这些表将特定网络的流量引导到特定的骨干运营商,并从那里沿着服务提供商链向下,直到到达特定网络。

服务提供商的任务是向骨干站点通告它们是连接点,因此是站点的向内路径。这被称为路由传播。

有时,路由传播会出现问题,一些站点无法连接。也许试图找出路由故障位置的最有用的命令是 traceroute 。当 ping 失败时,它很有用。

使用 traceroute 时,请包含要连接的远程主机的地址。输出将显示尝试路径上的网关主机,最终到达目标主机,或因缺乏连接而终止。有关更多信息,请参阅 traceroute(8)

34.2.4. 多播注意事项

FreeBSD原生支持多播应用程序和多播路由。多播应用程序不需要任何特殊配置即可在FreeBSD上运行。支持多播路由需要将以下选项编译到自定义内核中:

多播路由守护进程mrouted可以使用 net/mrouted 包或端口安装。此守护进程实现DVMRP多播路由协议,并通过编辑 /usr/local/etc/mrouted.conf 进行配置,以设置隧道和DVMRP。mrouted 的安装还会安装 map-mbonemrinfo ,以及它们相关的手册页。请参考这些配置示例。

34.3. 虚拟机

FreeBSD的一个常见用途是虚拟站点托管,其中一台服务器在网络上显示为多台服务器。这是通过将多个网络地址分配给单个接口来实现的。

给定的网络接口有一个“real”地址,可以有任意数量的“alias”地址。这些别名通常是通过在 /etc/rc.conf 中放置别名条目来添加的,如本例所示:

别名条目必须以 alias0 开头,并使用序列号,如 alias0alias1 等。配置过程将在第一个缺失的数字处停止。

别名网络掩码的计算很重要。对于给定的接口,必须有一个地址正确表示网络的网络掩码。属于此网络的任何其他地址必须具有全1的网络掩码,表示为 255.255.255.2550xffffff

例如,考虑 fxp0 接口连接到两个网络的情况:10.1.1.0 网络掩码为 255.255.255.0202.0.75.16 网络掩码为 255.255.255.240 。该系统将配置为出现在 10.1.1.110.1.1.5202.0.75.17202.0.75.20 的范围内。只有给定网络范围内的第一个地址应该具有真实的网络掩码。其余所有(10.1.1.210.1.1.5202.0.75.18202.0.75.20 )必须配置 255.255.255.255 的网络掩码。

以下 /etc/rc.conf 条目为此场景正确配置了适配器:

一种更简单的表达方式是用空格分隔的IP地址范围列表。第一个地址将被赋予所指示的子网掩码,其他地址的子网面具为 255.255.255.255

34.4. 无线高级身份验证

FreeBSD支持连接到无线网络的不同方式。本节介绍如何对无线网络执行高级身份验证。

要连接到无线网络并进行基本身份验证,请参阅【7. 网络】一章中的【7.4.4. 连接和身份验证到无线网络】一节。

34.4.1. 带EAP-TLS的WPA

使用WPA的第二种方法是使用802.1X后端身份验证服务器。在这种情况下,WPA被称为WPA Enterprise,以区别于不太安全的WPA Personal。WPA Enterprise中的身份验证基于可扩展身份验证协议(Extensible Authentication Protocol,EAP)。

EAP没有加密方法。相反,EAP被嵌入到加密隧道中。EAP认证方法有很多,但EAP-TLS、EAP-TTLS和EAP-PEAP是最常见的。

具有传输层安全性的EAP(EAP with Transport Layer Security,EAP-TLS)是一种得到良好支持的无线认证协议,因为它是第一个获得Wi-Fi联盟认证的EAP方法。EAP-TLS需要三个证书才能运行:安装在所有计算机上的证书颁发机构(CA)的证书、身份验证服务器的服务器证书和每个无线客户端的一个客户端证书。在这种EAP方法中,身份验证服务器和无线客户端都通过出示各自的证书来相互验证,然后验证这些证书是否由组织的CA签名。

如前所述,配置是通过 /etc/wpa_supplicant.conf 完成的:

① 此字段指示网络名称(SSID)。 ② 此示例使用RSN IEEE®802.11i协议,也称为WPA2。 key_mgmt 行指要使用的密钥管理协议。在这个例子中,它是使用EAP身份验证的WPA。 ④ 此字段指示连接的EAP方法。 identity 字段包含EAP的标识字符串。 ca_cert 字段表示CA证书文件的路径名。需要此文件来验证服务器证书。 client_cert 行给出了客户端证书文件的路径名。此证书对网络的每个无线客户端都是唯一的。 private_key 字段是客户端证书私钥文件的路径名。 private_key_passwd 字段包含私钥的密码。

然后,在 /etc/rc.conf 中添加以下行:

下一步是启动网卡:

也可以使用 wpa_supplicant(8)ifconfig(8) 手动打开接口。

34.4.2. 带EAP-TTLS的WPA

使用EAP-TLS,身份验证服务器和客户端都需要证书。使用EAP-TTLS时,客户端证书是可选的。此方法类似于web服务器,即使访问者没有客户端证书,它也会创建安全的SSL隧道。EAP-TTLS使用加密的TLS隧道来安全传输身份验证数据。

可以将所需的配置添加到 /etc/wpa_supplicant.conf 中:

① 此字段指定连接的EAP方法。 identity 字段包含加密TLS隧道内EAP身份验证的标识字符串。 password 字段包含EAP身份验证的密码短语。 ca_cert 字段表示CA证书文件的路径名。需要此文件来验证服务器证书。 ⑤ 此字段指定加密TLS隧道中使用的身份验证方法。在这个例子中,使用了带有MD5挑战的EAP。“内部身份验证”阶段通常被称为“phase2”。

接下来,在 /etc/rc.conf 中添加以下行:

下一步是打开网卡:

34.4.3. 带EAP-PEAP的WPA

受保护的EAP(Protected EAP,PEAP)被设计为EAP-TTLS的替代品,是继EAP-TLS之后使用最多的EAP标准。在混合操作系统的网络中,PEAP应该是EAP-TLS之后最受支持的标准。

PEAP类似于EAP-TTLS,因为它通过在客户端和身份验证服务器之间创建加密的TLS隧道来使用服务器端证书对客户端进行身份验证,从而保护随后的身份验证信息交换。PEAP身份验证与EAP-TTLS不同,因为它以明文形式广播用户名,并且只有密码在加密的TLS隧道中发送。EAP-TTLS将使用TLS隧道作为用户名和密码。

/etc/wpa_supplicant.conf 中添加以下行以配置EAP-PEAP相关设置:

① 此字段指定连接的EAP方法。 identity 字段包含加密TLS隧道内EAP身份验证的标识字符串。 password 字段包含EAP身份验证的密码短语。 ca_cert 字段表示CA证书文件的路径名。需要此文件来验证服务器证书。 ⑤ 此字段包含身份验证第一阶段(TLS隧道)的参数。根据使用的身份验证服务器,指定一个特定的标签进行身份验证。大多数时候,标签将是“client EAP encryption”,这是通过使用 peaplabel=0 设置的。更多信息可以在 wpa_supplicant.conf(5) 中找到。 ⑥ 此字段指定加密TLS隧道中使用的身份验证协议。在PEAP的情况下,它是 auth=MSCHAPV2

将以下内容添加到 /etc/rc.conf

然后,打开网卡:

34.5. 无线Ad-hoc模式

IBSS模式,也称为ad-hoc模式,专为点对点连接而设计。例如,要在机器 AB 之间建立ad-hoc网络,请选择两个IP地址和一个SSID。

在A上:

adhoc 参数表示接口正在IBSS模式下运行。

B 现在应该能够检测到 A

输出中的 I 确认 A 处于ad-hoc模式。现在,用不同的IP地址配置 B

AB 现在都准备好交换信息了。

34.5.1. FreeBSD主机访问点

FreeBSD可以充当接入点(Access Point,AP),无需购买硬件AP或运行ad-hoc网络。当FreeBSD机器充当互联网等其他网络的网关时,这可能特别有用。

34.5.1.1. 基本设置

在将FreeBSD机器配置为AP之前,内核必须配置为对无线网卡的适当网络支持以及所使用的安全协议。有关更多详细信息,请参阅基本设置。

加载无线网络支持后,检查无线设备是否支持基于主机的接入点模式,也称为hostap模式:

此输出显示卡的功能。HOSTAP 字确认此无线网卡可以充当AP。还列出了各种支持的密码:WEP、TKIP和AES。此信息指示可以在AP上使用哪些安全协议。

无线设备只能在创建网络伪设备期间进入hostap模式,因此必须先销毁之前创建的设备:

然后在设置其他参数之前,使用正确的选项重新生成:

再次使用 ifconfig(8) 查看wlan0接口的状态:

hostap 参数表示接口正在基于主机的接入点模式下运行。

通过在 /etc/rc.conf 中添加以下行,可以在启动时自动完成接口配置:

34.5.1.2. 无身份验证或加密的基于主机的接入点

虽然不建议在没有任何身份验证或加密的情况下运行AP,但这是检查AP是否正常工作的一种简单方法。此配置对于调试客户端问题也很重要。

一旦配置了AP,从另一台无线机器发起扫描以找到AP:

客户端机器找到了AP并可以与之关联:

34.5.1.3. WPA2基于主机的接入点

本节重点介绍使用WPA2安全协议设置FreeBSD访问点。有关WPA和基于WPA的无线客户端配置的更多详细信息,请参阅带有EAP-TLS的WPA。

hostapd(8) 守护进程用于处理启用WPA2的AP上的客户端身份验证和密钥管理。

在充当AP的FreeBSD机器上执行以下配置操作。一旦AP正常工作,hostapd(8) 可以在引导时通过 /etc/rc.conf 中的以下行自动启动:

在尝试配置 hostapd(8) 之前,请先配置“基本设置”中介绍的基本设置。

34.5.1.3.1. WPA2-PSK

WPA2-PSK适用于无法或不希望使用后端身份验证服务器的小型网络。

配置在 /etc/hostapd.conf 中完成:

① 用于接入点的无线接口。 ② 执行 hostapd(8) 时使用的详细程度。值 1 表示最小级别。 hostapd(8) 用于存储域套接字文件以与外部程序(如 hostapd_cli(8) )通信的目录的路径名。此示例中使用默认值。 ④ 该组允许访问控制界面文件。 ⑤ 将出现在无线扫描中的无线网络名称或SSID。 ⑥ 启用WPA并指定所需的WPA身份验证协议。值 2 配置WPA2的AP,建议使用。仅在需要过时的WPA时设置为 1 ⑦ WPA身份验证的ASCII密码。 ⑧ 要使用的密钥管理协议。此示例设置WPA-PSK。 ⑨ 接入点接受的加密算法。在这个例子中,只接受CCMP(AES)密码。CCMP是TKIP的替代品,在可能的情况下是首选。仅当存在无法使用CCMP的站点时,才应允许使用TKIP。

下一步是启动 hostapd(8)

AP运行后,客户端可以与之关联。有关更多详细信息,请参阅基本设置。可以使用 ifconfig wlan0 list sta 查看与AP关联的站点。

34.6. USB 网络共享

许多手机都提供通过USB共享数据连接的选项(通常称为“tethering,网络共享”)。此功能使用RNDIS、CDC或自定义Apple®iPhone®/iPad®协议之一。

• Android™设备通常使用 urndis(4) 驱动程序。 • Apple®设备使用 ipheth(4) 驱动程序。 • 较旧的设备通常会使用 cdce(4) 驱动程序。

在连接设备之前,请将相应的驱动程序加载到内核中:

一旦设备连接,ue0 将像普通网络设备一样可用。确保设备上启用了“USB网络共享”选项。

要使此更改永久化并在启动时将驱动程序作为模块加载,请在 /boot/loader.conf 中放置以下相应行:

34.7. 蓝牙

蓝牙是一种无线技术,用于创建在2.4GHz非授权频段运行的个人网络,范围为10米。网络通常由移动电话、手持设备和笔记本电脑等便携式设备组成。与Wi-Fi无线技术不同,蓝牙提供更高级别的服务配置文件,如类似FTP的文件服务器、文件推送、语音传输、串行线路模拟等。

本节介绍在FreeBSD系统上使用USB蓝牙适配器。然后,它描述了各种蓝牙协议和实用程序。

34.7.1. 正在加载蓝牙支持

FreeBSD中的蓝牙栈是使用 netgraph(4) 框架实现的。ng_ubt(4) 支持各种各样的蓝牙USB加密狗。基于Broadcom BCM2033的蓝牙设备由 ubtbcmfw(4)ng_ubt(4) 驱动程序支持。 ng_bt3c(4) 驱动程序支持3Com蓝牙PC卡3CRWB60-A。ng_h4(4)hcserial(8) 支持基于串行和UART的蓝牙设备。

在连接设备之前,确定它使用上述驱动程序中的哪一个,然后加载驱动程序。例如,如果设备使用 ng_ubt(4) 驱动程序:

如果蓝牙设备将在系统启动期间连接到系统,则可以通过将驱动程序添加到 /boot/loader.conf 来配置系统,以便在启动时加载模块:

加载驱动程序后,插入USB加密狗。如果驱动程序加载成功,控制台和 /var/log/messages 中应显示类似以下内容的输出:

要启动和停止蓝牙堆栈,请使用其启动脚本。在拔下设备之前,最好停止堆栈。启动蓝牙堆栈可能需要启动 hcsecd(8) 。启动堆栈时,输出应类似于以下内容:

34.7.2. 查找其他蓝牙设备

主机控制器接口(Host Controller Interface,HCI)提供了一种访问蓝牙基带功能的统一方法。在FreeBSD中,为每个蓝牙设备创建一个netgraph HCI节点。有关更多详细信息,请参阅 ng_hci(4)

最常见的任务之一是在射频范围内发现蓝牙设备。此操作称为查询。使用 hccontrol(8) 完成查询和其他HCI相关操作。下面的示例显示了如何找出哪些蓝牙设备在范围内。设备列表应在几秒钟后显示。请注意,只有当远程设备设置为可发现(discoverable)模式时,它才会回答询问。

BD_ADDR 是蓝牙设备的唯一地址,类似于网卡的MAC地址。该地址是与设备进一步通信所必需的,并且可以为 BD_ADDR 分配一个人类可读的名称。有关已知蓝牙主机的信息包含在 /etc/bluetooth/hosts 中。以下示例显示了如何获取分配给远程设备的人类可读名称:

如果在远程蓝牙设备上执行查询,它将发现计算机为“your.host.name(ubt0)”。分配给本地设备的名称可以随时更改。

远程设备可以在 /etc/bluetooth/hosts 中分配别名。有关 /etc/bluetooth/hosts 文件的更多信息,请参阅 bluetooth.hosts(5)

蓝牙系统在两个蓝牙单元之间提供点对点连接,或在多个蓝牙设备之间共享的点对多点连接。以下示例显示了如何创建与远程设备的连接:

create_connection 接受 BT_ADDR 以及 /etc/bluetooth/hosts 中的主机别名。

以下示例显示了如何获取本地设备的活动基带连接列表:

当需要终止基带连接时, connection handle 很有用,尽管通常不需要手动完成。堆栈将自动终止不活动的基带连接。

键入 hccontrol help 以获取可用HCI命令的完整列表。大多数HCI命令不需要超级用户权限。

34.7.3. 设备配对

默认情况下,蓝牙通信未经过身份验证,任何设备都可以与任何其他设备通话。蓝牙设备(如蜂窝电话)可以选择要求身份验证以提供特定服务。蓝牙身份验证通常使用PIN码完成,PIN码是一个长度不超过16个字符的ASCII字符串。用户需要在两台设备上输入相同的PIN码。用户输入PIN码后,两台设备都将生成链接密钥。之后,链接密钥可以存储在设备中或持久存储器中。下次,两台设备都将使用之前生成的链接密钥。此过程称为配对。请注意,如果任一设备丢失了链接密钥,则必须重复配对。

hcsecd(8) 守护进程负责处理蓝牙身份验证请求。默认配置文件为 /etc/bluetooth/hcsecd.conf 。PIN码设置为 1234 的手机示例部分如下:

PIN码的唯一限制是长度。某些设备,如蓝牙耳机,可能内置了固定的PIN码。-d 开关强制 hcsecd(8) 保持在前台,因此很容易看到发生了什么。将远程设备设置为接收配对,并启动与远程设备的蓝牙连接。远程设备应指示已接受配对并请求PIN码。输入 hcsecd.conf 中列出的相同PIN码。现在计算机和远程设备已配对。或者,可以在远程设备上启动配对。

可以将以下行添加到 /etc/rc.conf 中,以配置 hcsecd(8) 在系统启动时自动启动:

以下是 hcsecd(8) 守护进程输出的示例:

34.7.4. 使用PPP配置文件的网络访问

拨号网络(Dial-Up Networking,DUN)配置文件可用于将手机配置为无线调制解调器,以连接到拨号互联网接入服务器。它还可以用于配置计算机以接收来自手机的数据呼叫。

具有PPP配置文件的网络接入可用于为单个蓝牙设备或多个蓝牙设备提供LAN接入。它还可以通过串行电缆仿真使用PPP网络提供PC到PC的连接。

在FreeBSD中,这些配置文件是用 ppp(8)rfcomm_pppd(8) 包装器实现的,它将蓝牙连接转换为ppp可以使用的东西。在使用配置文件之前,必须在 /etc/ppp/ppp.conf 中创建一个新的PPP标签。有关示例,请参阅 rfcomm_pppd(8)

在这个例子中, rfcomm_pppd(8) 用于在DUNRFCOMM通道上打开与 BD_ADDR00:80:37:29:19:a4 的远程设备的连接:

实际信道号将使用SDP协议从远程设备获得。可以手动指定RFCOMM通道,在这种情况下, rfcomm_pppd(8) 将不会执行SDP查询。使用 sdpcontrol(8) 找出远程设备上的RFCOMM通道。

为了使用PPPLAN服务提供网络访问, sdpd(8) 必须正在运行,并且必须在 /etc/ppp/ppp.conf 中为LAN客户端创建一个新条目。有关示例,请参阅 rfcomm_pppd(8) 。最后,在有效的RFCOMM通道号上启动RFCOMMPPP服务器。RFCOMMPPP服务器将自动向本地SDP守护进程注册蓝牙LAN服务。下面的示例显示了如何启动RFCOMMPPP服务器。

34.7.5. 蓝牙协议

本节概述了各种蓝牙协议、其功能和相关实用程序。

34.7.5.1. 逻辑链路控制和适配协议(L2CAP)

逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol,L2CAP)为上层协议提供面向连接和无连接的数据服务。L2CAP允许更高级别的协议和应用程序发送和接收长度高达64千字节的L2CAP数据包。

L2CAP基于信道(channel)的概念。信道是基带连接之上的逻辑连接,其中每个信道以多对一的方式绑定到单个协议。多个通道可以绑定到同一协议,但一个通道不能绑定到多个协议。在信道上接收到的每个L2CAP数据包都被定向到适当的更高层协议。多个信道可以共享同一基带连接。

在FreeBSD中,为每个蓝牙设备创建一个netgraph L2CAP节点。该节点通常连接到下游蓝牙HCI节点和上游蓝牙套接字节点。L2CAP节点的默认名称是“devicel2cap”。有关更多详细信息,请参阅 ng_l2cap(4)

一个有用的命令是 l2ping(8) ,它可以用来ping其他设备。某些蓝牙实现可能不会返回发送给它们的所有数据,因此以下示例中的 0 bytes 是正常的。

l2control(8) 实用程序用于在L2CAP节点上执行各种操作。此示例显示了如何获取本地设备的逻辑连接(信道)列表和基带连接列表:

另一个诊断工具是 btsockstat(1) 。它类似于 netstat(1) ,但用于蓝牙网络相关的数据结构。下面的示例显示了与上述 l2control(8) 相同的逻辑连接。

34.7.5.2. 射频通信(RFCOMM)

RFCOMM(Radio Frequency Communication)协议通过L2CAP协议提供串行端口的仿真。RFCOMM是一种简单的传输协议,具有用于模拟9个RS-232(EIATIA-232-E)串行端口电路的附加规定。它支持两个蓝牙设备之间多达60个同时连接(RFCOMM信道)。

就RFCOMM而言,完整的通信路径涉及在通信端点上运行的两个应用程序,它们之间有一个通信段。RFCOMM旨在涵盖使用其所在设备的串行端口的应用程序。通信段是从一个设备到另一个设备的直接连接蓝牙链路。

RFCOMM只关心直接连接情况下设备之间的连接,或者网络情况下设备和调制解调器之间的连接。RFCOMM可以支持其他配置,例如一侧通过蓝牙无线技术通信,另一侧提供有线接口的模块。

在FreeBSD中,RFCOMM是在蓝牙套接字层实现的。

34.7.5.3. 服务发现协议(SDP)

服务发现协议(Service Discovery Protocol,SDP)为客户端应用程序提供了发现服务器应用程序提供的服务的存在以及这些服务的属性的手段。服务的属性包括所提供服务的类型或类别以及利用该服务所需的机制或协议信息。

SDP涉及SDP服务器和SDP客户端之间的通信。服务器维护一个服务记录列表,该列表描述了与服务器相关联的服务的特征。每个服务记录都包含有关单个服务的信息。客户端可以通过发出SDP请求从SDP服务器维护的服务记录中检索信息。如果客户端或与客户端关联的应用程序决定使用服务,则必须打开与服务提供商的单独连接才能使用该服务。SDP提供了一种发现服务及其属性的机制,但它没有提供利用这些服务的机制。

通常,SDP客户端根据服务的某些所需特征搜索服务。然而,有时需要在没有任何关于服务的先验信息的情况下,发现SDP服务器的服务记录描述了哪些类型的服务。寻找任何提供的服务的过程称为浏览。

蓝牙SDP服务器 sdpd(8) 和命令行客户端 sdpcontrol(8) 包含在标准FreeBSD安装中。以下示例显示了如何执行SDP浏览查询。

请注意,每个服务都有一个属性列表,例如RFCOMM通道。根据服务的不同,用户可能需要记录一些属性。某些蓝牙实现不支持服务浏览,可能会返回空列表。在这种情况下,可以搜索特定服务。下面的示例显示了如何搜索OBEX对象推送(OBEX Object Push,OPUSH)服务:

在FreeBSD上向蓝牙客户端提供服务是通过 sdpd(8) 服务器完成的。可以将以下行添加到 /etc/rc.conf 中:

然后,可以使用以下命令启动 sdpd(8) 守护进程:

想要向远程客户端提供蓝牙服务的本地服务器应用程序将向本地SDP守护进程注册该服务。这种应用程序的一个例子是 rfcomm_pppd(8) 。一旦启动,它将向本地SDP守护进程注册蓝牙LAN服务。

通过本地控制信道发出SDP浏览查询,可以获得向本地SDP服务器注册的服务列表:

34.7.5.4. OBEX物体推送(OPUSH)

串行端口配置文件(Serial Port Profile,SPP)允许蓝牙设备执行串行电缆仿真。此配置文件允许传统应用程序通过虚拟串行端口抽象使用蓝牙作为电缆替代品。

在FreeBSD中,rfcomm_sppd(1) 实现了SPP,伪tty用作虚拟串行端口抽象。下面的示例显示了如何连接到远程设备的串行端口服务。RFCOMM通道不必指定,因为 frcomm_sppd(1) 可以通过SDP从远程设备获取它。要覆盖此内容,请在命令行上指定RFCOMM通道。

连接后,伪tty可以用作串行端口:

伪tty打印在stdout上,可以通过包装器脚本读取:

34.7.6. 排错

默认情况下,当FreeBSD接受新连接时,它会尝试执行角色切换并成为主节点。一些不支持角色切换的旧蓝牙设备将无法连接。由于角色切换是在建立新连接时执行的,因此无法询问远程设备是否支持角色切换。但是,有一个HCI选项可以禁用本地端的角色切换:

要显示蓝牙数据包,请使用第三方软件包hcidump,该软件包可以使用 comms/hcidump 软件包或端口安装。此实用程序类似于 tcpdump(1) ,可用于在终端上显示蓝牙数据包包含的内容,并将蓝牙数据包转储到文件中。

34.8. 桥接

有时,将网络(如以太网段)划分为网段是有用的,而不必创建IP子网并使用路由器将网段连接在一起。以这种方式将两个网络连接在一起的设备称为“网桥,bridge”。

网桥通过学习其每个网络接口上设备的MAC地址来工作。仅当源和目标MAC地址位于不同网络上时,它才会在网络之间转发流量。在许多方面,网桥就像一个端口很少的以太网交换机。具有多个网络接口的FreeBSD系统可以配置为充当网桥。

桥接在以下情况下可能很有用:

本节介绍如何使用 if_bridge(4) 将FreeBSD系统配置为网桥。网络图桥接驱动程序也是可用的,在 ng_bridge(4) 中进行了描述。

34.8.1. 启用桥接

在FreeBSD中,if_bridge(4) 是一个内核模块,在创建桥接接口时由 ifconfig(8) 自动加载。通过将 device if_bridge 添加到自定义内核配置文件中,也可以将桥支持编译到自定义内核中。

该桥是使用接口克隆创建的。要创建网桥界面,请执行以下操作:

创建网桥接口时,会自动为其分配一个随机生成的以太网地址。maxaddrtimeout 参数控制网桥将在其转发表中保留多少个MAC地址,以及在最后一次看到每个条目后删除它之前的多少秒。其他参数控制STP的操作方式。

接下来,指定要添加哪些网络接口作为网桥的成员。为了让网桥转发数据包,所有成员接口和网桥都需要启动:

网桥现在可以在 fxp0fxp1 之间转发以太网帧。在 /etc/rc.conf 中添加以下行,以便在启动时创建网桥:

如果网桥主机需要IP地址,请在网桥接口上设置,而不是在成员接口上设置。地址可以静态设置或通过DHCP设置。此示例设置静态IP地址:

还可以为网桥接口分配IPv6地址。要使更改永久化,请将地址信息添加到 /etc/rc.conf

34.8.2. 启用生成树

为了使以太网正常运行,两个设备之间只能存在一条活动路径。STP协议检测环路并将冗余链路置于阻塞状态。如果其中一个活动链路发生故障,STP会计算一个不同的树,并启用其中一个被阻塞的路径来恢复与网络中所有点的连接。

快速生成树协议(RSTP或802.1w)提供了与传统STP的向后兼容性。RSTP提供更快的收敛,并与相邻交换机交换信息,以快速转换到转发模式,而不会产生环路。FreeBSD支持RSTP和STP作为操作模式,RSTP是默认模式。

可以使用 ifconfig(8) 在成员接口上启用STP。对于当前接口为 fxp0fxp1 的网桥,请使用以下命令启用STP:

此桥的生成树ID为 00:01:02:4b:d4:50 ,优先级为 32768 。由于 root id 相同,因此表示这是树的根桥。

网络上的另一个网桥也启用了STP:

root id 00:01:02:4b:d4:50 priority 32768 ifost 400000 port 4 显示根网桥为 00:01:02:4b:d4:50 ,从该网桥的路径成本为 400000 。通往根网桥的路径是通过 port 4 ,即fxp0。

34.8.3. 桥接接口参数

几个 ifconfig 参数对于桥接接口是唯一的。本节总结了这些参数的一些常见用法。 ifconfig(8) 中描述了可用参数的完整列表。

网桥接口还支持监视模式,在这种模式下,数据包在 bpf(4) 处理后被丢弃,不再被处理或转发。这可用于将两个或多个接口的输入多路复用到单个 bpf(4) 流中。这对于重建通过两个单独接口传输RX/TX信号的网络抽头的流量非常有用。例如,要将来自四个网络接口的输入作为一个流读取:

34.8.4. SNMP监控

桥接接口和STP参数可以通过FreeBSD基础系统中包含的 bsnmpd(1) 进行监控。导出的网桥MIB符合IETF标准,因此可以使用任何SNMP客户端或监控包来检索数据。

要在网桥上启用监视,请通过删除开头的 # 符号在 /etc/snmpd.config 中取消注释此行:

可能需要在此文件中修改其他配置设置,如社区名称和访问列表。有关更多信息,请参阅 bsnmpd(1)snmp_bridge(3) 。保存这些编辑后,将此行添加到 /etc/rc.conf

然后,启动 bsnmpd(1)

以下示例使用Net-SNMP软件(net-mgmt/net-snmp)从客户端系统查询网桥。也可以使用 net-mgmt/bsnmptools 端口。从运行Net-SNMP的SNMP客户端,将以下行添加到 $HOME/.snmp/snmp.conf 中,以导入网桥MIB定义:

要使用IETF BRIDGE-MIB(RFC4188)监视单个网桥,请执行以下操作:

dot1dStpTopChanges.0 值为 2 ,表示STP网桥拓扑已更改两次。拓扑更改意味着网络中的一个或多个链路已更改或发生故障,并且已计算出新的树。发生这种情况时, dot1dStpTimeSinceTopologyChange.0 值将显示出来。

要监视多个网桥接口,可以使用专用BEGEMOT-bridge-MIB:

要更改通过 mib-2.dot1dBridge 子树监视的网桥接口,请执行以下操作:

34.9. 链路聚合和故障转移

FreeBSD提供了 lagg(4) 接口,可用于将多个网络接口聚合到一个虚拟接口中,以提供故障转移和链路聚合。只要至少有一个聚合网络接口建立了链接,故障转移就允许流量继续流动。链路聚合在支持LACP的交换机上效果最佳,因为该协议在响应单个链路故障的同时双向分配流量。

滞后接口支持的聚合协议决定了哪些端口用于传出流量,以及特定端口是否接受传入流量。 lagg(4) 支持以下协议:

34.9.1. 配置示例

本节演示如何配置Cisco®交换机和FreeBSD系统以实现LACP负载平衡。然后,它展示了如何在故障转移模式下配置两个以太网接口,以及如何在以太网和无线接口之间配置故障转移模式。

34.9.1.1. 使用Cisco®交换机的LACP聚合

此示例将FreeBSD机器上的两个 fxp(4) 以太网接口连接到Cisco®交换机上的前两个以太网端口,作为单个负载平衡和容错链路。可以添加更多接口以提高吞吐量和容错能力。替换示例中显示的Cisco®端口、以太网设备、通道组号和IP地址的名称,以匹配本地配置。

帧排序在以太网链路上是强制性的,两个站之间的任何流量总是通过同一物理链路流动,将最大速度限制在一个接口的速度。传输算法试图使用尽可能多的信息来区分不同的流量,并平衡可用接口上的流量。

在Cisco®交换机上,将 FastEthernet0/1FastEthernet0/2 接口添加到通道组 1

在FreeBSD系统上,使用物理接口 fxp0fxp1 创建 lagg(4) 接口,并将接口的IP地址设置为 10.0.0.3/24

接下来,验证虚拟接口的状态:

标记为 ACTIVE 的端口是与远程交换机协商的LAG的一部分。流量将通过这些活动端口进行传输和接收。在上述命令中添加 -v 以查看LAG标识符。

要查看Cisco®交换机上的端口状态:

有关更多详细信息,请键入 show lacp neighbor detail

要在重新启动时保留此配置,请在FreeBSD系统上的 /etc/rc.conf 中添加以下条目:

34.9.1.2. 故障切换模式

如果主接口上的链路丢失,故障转移模式可用于切换到辅助接口。要配置故障转移,请确保底层物理接口已启动,然后创建 lagg(4) 接口。在这个例子中, fxp0 是主接口, fxp1 是辅助接口,虚拟接口被分配了 10.0.0.15/24 的IP地址:

虚拟网卡应该看起来像这样:

流量将在 fxp0 上传输和接收。如果链接在 fxp0 上丢失, fxp1 将成为活动链接。如果链接在主界面上恢复,它将再次成为活动链接。

要在重新启动后保留此配置,请在 /etc/rc.conf 中添加以下条目:

34.9.1.3. 以太网和无线接口之间的故障切换模式

对于笔记本电脑用户,通常希望将无线设备配置为仅在以太网连接不可用时使用的辅助设备。使用 lagger(4) ,可以配置故障转移,出于性能和安全原因,该故障转移更倾向于以太网连接,同时保持通过无线连接传输数据的能力。

这是通过用无线接口的MAC地址覆盖以太网接口的MAC来实现的。

在这个例子中,以太网接口 re0 是主接口,无线接口 wlan0 是故障转移。wlan0 接口是从 ath0 物理无线接口创建的,以太网接口将配置无线接口的MAC地址。首先,打开无线接口(用本地2个字母的国家代码替换FR),但不要设置IP地址。替换 wlan0 以匹配系统的无线接口名称:

确定无线接口的MAC地址,如下所示:

ether 行将包含指定接口的MAC地址。现在,更改以太网接口的MAC地址以匹配:

确保 re0 接口已启动,然后创建以 re0 为主控、故障转移到 wlan0lager(4) 接口:

虚拟界面应该看起来像这样:

然后,启动DHCP客户端以获取IP地址:

要在重新启动后保留此配置,请在 /etc/rc.conf 中添加以下条目:

34.10. 带PXE的无盘操作

Intel®预引导执行环境(Preboot eXecution Environment,PXE)允许操作系统通过网络引导。例如,FreeBSD系统可以通过网络引导,并使用从NFS服务器安装的文件系统在没有本地磁盘的情况下运行。PXE支持通常在BIOS中可用。要在机器启动时使用PXE,请在BIOS设置中选择 Boot from network 选项,或在系统初始化期间键入功能键。

为了提供操作系统通过网络启动所需的文件,PXE设置还需要正确配置的DHCP、TFTP和NFS服务器,其中:

当计算机PXE启动时,它通过DHCP接收有关从何处获取初始引导加载程序文件的信息。主机收到此信息后,它通过TFTP下载引导加载程序,然后执行引导加载程序。在FreeBSD中,引导加载程序文件是 /boot/pxeboot 。在 /boot/pxeboot 执行后,FreeBSD内核被加载,其余的FreeBSD引导序列继续进行,如【15. FreeBSD引导过程】中所述。

本节介绍如何在FreeBSD系统上配置这些服务,以便其他系统可以PXE引导到FreeBSD。有关更多信息,请参阅 diskless(8)

34.10.1. 设置PXE环境

本节中显示的步骤配置内置NFS和TFTP服务器。下一节将演示如何安装和配置DHCP服务器。在这个例子中,包含PXE用户使用的文件的目录是 /b/tftpboot/FreeBSD/install 。重要的是,此目录存在,并且在 /etc/inetd.conf/usr/local/etc/dhcpd.conf 中设置相同的目录名。

  1. 创建包含要NFS挂载的FreeBSD安装的根目录:

  2. 通过将此行添加到 /etc/rc.conf 来启用NFS服务器:

  3. 通过在 /etc/exports 中添加以下内容,通过NFS导出无盘根目录:

  4. 启动NFS服务器:

  5. 通过在 /etc/rc.conf 中添加以下行来启用 inetd(8)

  6. /etc/inetd.conf 中取消注释以下行,确保其不以 # 符号开头:

  7. 启动 inetd(8)

  8. 通过解压缩官方档案或重建FreeBSD内核和用户区,将基本系统安装到 ${NFSROOTDIR} 中(有关更详细的说明,请参阅【26.6. 从源代码更新FreeBSD】,但在运行 make installkernelmake installworld 命令时,不要忘了添加 DESTDIR=${NFSROOTDIR}

  9. 测试TFTP服务器是否正常工作,是否可以下载将通过PXE获得的引导加载程序:

  10. 编辑 ${NFSROOTDIR}/etc/fstab 并创建一个条目以通过NFS挂载根文件系统:

    myhost.example.com 替换为NFS服务器的主机名或IP地址。在此示例中,根文件系统以只读方式挂载,以防止NFS客户端删除根文件系统的内容。

  11. 在PXE环境中为正在PXE启动的客户端计算机设置根密码:

  12. 如果需要,通过编辑 ${NFSROOTDIR}/etc/ssh/sshd_config 并启用 PermitRootLogin ,为正在PXE启动的客户端计算机启用 ssh(1) 根登录。此选项记录在 sshd_config(5) 中。

  13. ${NFSROOTDIR} 中执行PXE环境的任何其他所需自定义。这些定制可能包括安装软件包或使用 vipw(8) 编辑密码文件。

从NFS根卷启动时, /etc/rc 检测到NFS启动并运行 /etc/rc.initdiskless 。在这种情况下, /etc/var 需要是内存支持的文件系统,这样这些目录是可写的,但NFS根目录是只读的:

当系统启动时,将创建并挂载 /etc/var 的内存文件系统,并将 cpio.gz 文件的内容复制到其中。默认情况下,这些文件系统的最大容量为5兆字节。如果档案不适合,这通常是安装二进制包时 /var/var 的情况,请通过将所需的512字节扇区数(例如,5兆字节是10240个扇区)分别放在 /etc/var 文件系统的 ${NFSROOTDIR}/conf/base/etc/md_size${NFSREOTDIR}/conf-base/var/md_size 文件中来请求更大的大小。

34.10.2. 配置DHCP服务器

DHCP服务器不需要与TFTP和NFS服务器是同一台机器,但它需要在网络中可访问。

DHCP不是FreeBSD基础系统的一部分,但可以使用 net/isc-dhcp44-server 端口或软件包安装。

安装后,编辑配置文件 /usr/local/etc/dhcpd.conf 。配置下一个服务器、文件名和根路径设置,如本例所示:

next-server 指令用于指定TFTP服务器的IP地址。

filename 指令定义了/boot/pxeboot的路径。使用相对文件名,这意味着/b/tftpboot不包含在路径中。

root-path 选项定义了NFS根文件系统的路径。

保存编辑后,在启动时通过在 /etc/rc.conf 中添加以下行来启用DHCP:

然后启动DHCP服务:

34.10.3. 调试PXE问题

配置并启动所有服务后,PXE客户端应该能够通过网络自动加载FreeBSD。如果特定客户端无法连接,当该客户端机器启动时,进入BIOS配置菜单并确认其设置为从网络启动。

本节介绍了一些故障排除技巧,用于在没有客户端能够PXE启动的情况下隔离配置问题的根源。

  1. 使用 net/wireshark 包或端口调试PXE启动过程中涉及的网络流量,如下图所示。

    34.10.3

    1. 客户端广播DHCPDISCOVER消息。
    2. DHCP服务器用IP地址、下一个服务器、文件名和根路径值进行响应。
    3. 客户端向下一个服务器发送TFTP请求,要求检索文件名。
    4. TFTP服务器响应并向客户端发送文件名。
    5. 客户端执行 filename ,即 pxeboot(8) ,然后加载内核。当内核执行时,根路径指定的根文件系统通过NFS挂载。
  2. 在TFTP服务器上,读取 /var/log/xferlog 以确保从正确位置检索到pxeboot。要测试此示例配置:

    tftpd(8)tftp(1) 中的BUGS部分记录了TFTP的一些局限性。

  3. 确保可以通过NFS挂载根文件系统。要测试此示例配置:

  4. 对于基于UEFI PXE的引导,请将 boot/pxeboot 文件替换为 boot/loader.efi 文件:

34.11. 通用地址冗余协议(CARP)

公共地址冗余协议(Common Address Redundancy Protocol,CARP)允许多个主机共享相同的IP地址和虚拟主机ID(Virtual Host ID,VHID),以便为一个或多个服务提供高可用性(high availability)。这意味着一个或多个主机可能会发生故障,其他主机将透明地接管,这样用户就不会看到服务故障。

除了共享IP地址外,每个主机都有自己的IP地址用于管理和配置。共享IP地址的所有机器都具有相同的VHID。每个虚拟IP地址的VHID在网络接口的广播域中必须是唯一的。

FreeBSD内置了使用CARP的高可用性,尽管配置它的步骤因FreeBSD版本而异。本节为FreeBSD 10之前和之后的版本提供了相同的示例配置。

此示例使用三台主机配置故障转移支持,所有主机都具有唯一的IP地址,但提供相同的web内容。它有两个不同的主机名为 hosta.example.orghostb.example.org ,并有一个名为 hostc.example.org 的共享备份。

这些机器使用轮转DNS配置进行负载平衡。除了主机名和管理IP地址之外,主计算机和备份计算机的配置完全相同。这些服务器必须具有相同的配置并运行相同的服务。发生故障转移时,只有备份服务器可以访问相同的内容,才能正确应答对共享IP地址上的服务的请求。备份机器有两个额外的CARP接口,每个主内容服务器的IP地址对应一个。当发生故障时,备份服务器将获取故障主机的IP地址。

34.11.1. 使用CARP

通过在 /boot/loader.conf 中为CARP.ko内核模块添加一个条目来启用CARP的引导时支持:

要立即加载模块而不重新启动,请执行以下操作:

对于喜欢使用自定义内核的用户,请在自定义内核配置文件中包含以下行,并按照【10. 配置FreeBSD内核】中的描述编译内核:

主机名、管理IP地址和子网掩码、共享IP地址和VHID都是通过在 /etc/rc.conf 中添加条目来设置的。此示例适用于 hosta.example.org

下一组条目是 hostb.example.org 。由于它代表第二个主节点,因此它使用了不同的共享IP地址和VHID。但是,使用 pass 指定的密码必须相同,因为CARP只会监听和接受来自具有正确密码的机器的广告。

第三台机器 hostc.example.org 被配置为处理来自任一主机的故障转移。此机器配置了两个CARPVHID,一个用于处理每个主主机的虚拟IP地址。设置CARP播发偏斜 advskew 是为了确保备份主机比主服务器晚播发,因为 advskew 控制着有多个备份服务器时的优先级顺序。

配置两个CARPVHID意味着 hostc.example.org 将注意到是否有任何一个主服务器不可用。如果主服务器未能在备份服务器之前进行通告,备份服务器将获取共享IP地址,直到主服务器再次可用。

配置完成后,重新启动网络或重新启动每个系统。现在已启用高可用性。

CARP功能可以通过 cap(4) 手册页中记录的几个 sysctl(8) 变量进行控制。使用 devd(8) 可以从CARP事件触发其他操作。

34.12. VLANs

VLAN是一种将网络虚拟划分为许多不同子网络的方法,也称为分段。每个网段都有自己的广播域,并与其他VLAN隔离。

在FreeBSD上,网卡驱动程序必须支持VLAN。要查看哪些驱动程序支持vlan,请参阅 vlan(4) 手册页。

配置VLAN时,必须知道几条信息。首先,哪个网络接口?第二,什么是VLAN标签?

要在运行时配置VLAN,NIC为 em0 ,VLAN标签为 5 ,命令如下:

要在启动时配置VLAN,必须更新 /etc/rc.conf 。要复制上述配置,需要添加以下内容:

可以添加其他VLAN,只需将标签添加到 vlans_em0 字段,并在该VLAN标签的接口上添加配置网络的额外线路。

为接口分配一个符号名称是有用的,这样当相关硬件发生变化时,只需要更新几个配置变量。例如,安全摄像头需要在 em0 上的VLAN 1上运行。稍后,如果将 em0 卡替换为使用 ixgb(4) 驱动程序的卡,则所有对 em0.1 的引用都不必更改为 ixgb0.1

要配置VLAN 5 ,请在NIC em0 上分配接口名称摄像头,并为接口分配一个带有 24 位前缀的 192.168.20.20 IP地址,使用以下命令:

对于名为 video 的接口,请使用以下命令:

要在启动时应用更改,请在 /etc/rc.conf 中添加以下行: