32.3.1. 无线网络基础知识

大多数无线网络是基于 IEEE® 802.11 标准的。一个基本的无线网络由多个站组成,这些站与在 2.4GHz 或 5GHz 频段广播的无线电进行通信,尽管这因地制宜,也在不断变化,以实现 2.3GHz 和 4.9GHz 范围内的通信。

802.11 网络以两种方式组织。在基础设施模式中,一个站作为主站,所有其他站都与它相关联,该网络被称为 BSS,主站被称为接入点(AP)。在 BSS 中,所有通信都要通过 AP;即使一个站想与另一个无线站通信,信息也必须通过 AP。在第二种形式的网络中,没有主站,各站直接通信。这种形式的网络被称为 IBSS,通常被称为 ad-hoc 网络。

802.11 网络首先部署在 2.4GHz 频段,使用由 IEEE® 802.11 和 802.11b 标准定义的协议。这些规范包括工作频率和 MAC 层特性,包括成帧和传输速率,因为通信可以在不同的速率下进行。后来,802.11a 标准定义了在 5GHz 频段的操作,包括不同的信令机制和更高的传输速率。再后来,802.11g 标准定义了在 2.4GHz 频段使用 802.11a 信令和传输机制,以便向后兼容 802.11b 网络。

与基础传输技术分开,802.11 网络有各种安全机制。最初的 802.11 规范定义了一个简单的安全协议,称为 WEP。该协议使用一个固定的预共享密钥和 RC4 加密密码来编码网络上传输的数据。各站必须就固定密钥达成一致,以便进行通信。这个方案被证明是很容易被破解的,现在除了阻止临时用户加入网络外,很少使用。目前的安全实践是由 IEEE® 802.11i 规范给出的,该规范定义了新的加密密码和一个额外的协议,以验证接入点的站和交换数据通信的密钥。加密密钥是定期刷新的,并且有检测和反击入侵企图的机制。另一个常用于无线网络的安全协议规范被称为 WPA,它是 802.11i 的前身。WPA 规定了 802.11i 中的要求的一个子集,它是为在传统硬件上实现而设计的。具体来说,WPA 只需要从原始 WEP 密码中衍生出来的 TKIP 密码。802.11i 允许使用 TKIP,但也要求支持更强大的密码,AES-CCM,用于加密数据。WPA 中不需要 AES 密码,因为它被认为计算成本太高,无法在传统的硬件上实现。

另一个需要注意的标准是 802.11e。它定义了在 802.11 网络中部署多媒体应用的协议,如流媒体视频和 IP 语音(VoIP)。与 802.11i 一样,802.11e 也有一个被称为 WME(后来改名为 WMM)的前体规范,它被一个行业团体定义为 802.11e 的一个子集,现在就可以部署,在等待 802.11e 的最终批准时实现多媒体应用。关于 802.11e 和 WME/WMM 最重要的一点是,它通过服务质量 (QoS) 协议和增强的媒体访问协议,在无线网络上实现了流量的优先化。正确地执行这些协议可以实现高速的数据突发和优先的流量。

FreeBSD 支持使用 802.11a、 802.11b 和 802.11g 的网络。WPA 和 802.11i 安全协议也同样被支持 (与 11a、 11b 和 11g 中的任何一种结合使用),WME/WMM 协议所要求的 QoS 和流量优先级也被支持在有限的无线设备中。

32.3.2. 快速入门

将计算机连接到现有无线网络是一种非常常见的情况。此过程显示所需的步骤。

  1. 从网络管理员处获取无线网络的 SSID(服务集标识符)和 PSK(预共享密钥)。

  2. 识别无线适配器。FreeBSD GENERIC 内核包括许多常见的无线适配器的驱动程序。如果无线适配器是这些型号之一,它将被列在 sysctl(8)net.wlan.devices 变量中。

    1. % sysctl net.wlan.devices

    如果未列出无线适配器,则可能需要额外的内核模块,或者它可能是 FreeBSD 不支持的模型。

    此示例显示了 Atheros ath0 无线适配器。

  3. 将此网络的条目添加到 /etc/wpa_supplicant.conf。如果该文件不存在,请创建它。将 myssidmypsk 替换为网络管理员提供的 SSID 和 PSK。

    1. network={
    2. ssid="myssid"
    3. psk="mypsk"
    4. }
  4. 将条目添加到 /etc/rc.conf 以在启动时配置网络:

    1. wlans_ath0="wlan0"
    2. ifconfig_wlan0="WPA SYNCDHCP"
  5. 重新启动计算机,或重新启动网络服务以连接到网络:

    1. # service netif restart

32.3.3. 基本设置

32.3.3.1. 内核配置

要使用无线网络,需要无线网卡,并且需要为内核配置适当的无线网络支持。内核被分成多个模块,因此只需要配置所需的支持。

最常用的无线设备是那些使用 Atheros 制造的部件的设备。这些设备受 ath(4) 支持,并且需要将以下行添加到 /boot/loader.conf 中:

  1. if_ath_load="YES"

Atheros 驱动程序分为三个独立的部分:驱动程序(ath(4)),处理芯片特定功能的硬件支持层(ath_hal(4))以及用于选择传输帧速率的算法。当此支持作为内核模块加载时,将自动处理任何依赖项。要加载对其他类型的无线设备的支持,请为该设备指定模块。此示例适用于基于 Intersil Prism 部件 (wi(4)) 驱动程序的设备:

  1. if_wi_load="YES"
注意
本节中的示例使用 ath(4) 设备,并且必须根据配置更改示例中的设备名称。可用的无线驱动程序和支持的适配器的列表可以在 FreeBSD 硬件说明中找到,可以在 FreeBSD 网站的 “版本信息“ 页面上找到。如果无线设备的本机 FreeBSD 驱动程序不存在,则可以在 NDIS 驱动程序包装器的帮助下使用 Windows® 驱动程序。

此外,还必须加载为要使用的安全协议实现加密支持的模块。它们由 wlan(4) 模块按需动态加载,但目前必须手动配置。提供以下模块:wlan_wep(4)wlan_ccmp(4)wlan_tkip(4)wlan_ccmp(4)wlan_tkip(4) 驱动程序仅在使用 WPA 或 802.11i 安全协议时才需要。如果网络不使用加密,则不需要 wlan_wep(4) 支持。要在引导时加载这些模块,请将以下行添加到 /boot/loader.conf

  1. wlan_wep_load="YES"
  2. wlan_ccmp_load="YES"
  3. wlan_tkip_load="YES"

一旦这些信息被添加到 /boot/loader.conf 中,请重新启动 FreeBSD 机器。或者,使用 kldload(8) 手动加载模块。

注意
对于不想使用模块的用户,可以通过将以下行添加到自定义内核配置文件中来将这些驱动程序编译到内核中:
  1. device wlan # 802.11 support
  2. device wlan_wep # 802.11 WEP support
  3. device wlan_ccmp # 802.11 CCMP support
  4. device wlan_tkip # 802.11 TKIP support
  5. device wlan_amrr # AMRR transmit rate control algorithm
  6. device ath # Atheros pci/cardbus NIC's
  7. device ath_hal # pci/cardbus chip support
  8. options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors
  9. device ath_rate_sample # SampleRate tx rate control for ath
在内核配置文件中使用此信息,重新编译内核并重新启动 FreeBSD 机器。

有关无线设备的信息应显示在启动消息中,如下所示:

  1. ath0: <Atheros 5212> mem 0x88000000-0x8800ffff irq 11 at device 0.0 on cardbus1
  2. ath0: [ITHREAD]
  3. ath0: AR2413 mac 7.9 RF2413 phy 4.5

32.3.3.2. 设置正确的区域

由于世界各地的监管情况不同,因此有必要正确设置适用于你所在位置的域,以便获得有关可以使用哪些渠道的正确信息。

可用的区域定义可以在 /etc/regdomain.xml 中找到。要在运行时设置数据,请使用 ifconfig

  1. # ifconfig wlan0 regdomain ETSI country AT

要保留这些设置,请将其添加到 /etc/rc.conf

  1. # sysrc create_args_wlan0="country AT regdomain ETSI"

32.3.4. 基础设施模式

基础结构 (BSS) 模式是通常使用的模式。在此模式下,许多无线接入点连接到有线网络。每个无线网络都有自己的名称,称为 SSID。无线客户端连接到无线访问点。

32.3.4.1. FreeBSD 客户端

32.3.4.1.1. 如何查找接入点

要扫描可用网络,请使用 ifconfig(8)。此请求可能需要一些时间才能完成,因为它需要系统切换到每个可用的无线频率并探测可用的接入点。只有超级用户才能启动扫描:

  1. # ifconfig wlan0 create wlandev ath0
  2. # ifconfig wlan0 up scan
  3. SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
  4. dlinkap 00:13:46:49:41:76 11 54M -90:96 100 EPS WPA WME
  5. freebsdap 00:11:95:c3:0d:ac 1 54M -83:96 100 EPS WPA
注意
在扫描之前,该接口必须是激活的。随后的扫描请求不需要再次将接口标记为 up。

扫描请求的输出列出了每个发现的 BSS/IBSS 网络。除了列出网络的名称,即 SSID,输出还显示 BSSID,即接入点的 MAC 地址。CAPS 字段确定了每个网络的类型和在那里工作的站点的能力(参见 ifconfig(8)list scan 的定义了解更多细节)。

还可以通过以下方式显示已知网络的当前列表:

  1. # ifconfig wlan0 list scan

此信息可由适配器自动更新,也可通过 scan 请求手动更新。旧数据会自动从缓存中删除,因此随着时间的推移,除非进行更多扫描,否则此列表可能会缩小。

32.3.4.1.2. 基本设置

本节提供了一个简单的示例,说明如何使无线网络适配器在不加密的情况下在 FreeBSD 中工作。熟悉这些概念后,强烈建议使用 WPA 设置无线网络。

配置无线网络有三个基本步骤:选择接入点、对工作站进行身份验证以及配置 IP 地址。以下各节讨论每个步骤。

32.3.4.1.2.1. 选择接入点

大多数情况下,让系统使用内置启发式方法选择接入点就足够了。当接口被标记为 up 或它在 /etc/rc.conf 中列出时,这是默认行为:

  1. wlans_ath0="wlan0"
  2. ifconfig_wlan0="DHCP"

如果有多个接入点,则可以通过其 SSID 选择特定的接入点:

  1. wlans_ath0="wlan0"
  2. ifconfig_wlan0="ssid your_ssid_here DHCP"

在有多个接入点具有相同的 SSID 的环境中(通常这样做是为了简化漫游),可能需要关联到一个特定设备。在这种情况下,可以指定接入点的 BSSID,无论是否使用 SSID:

  1. wlans_ath0="wlan0"
  2. ifconfig_wlan0="ssid your_ssid_here bssid xx:xx:xx:xx:xx:xx DHCP"

还有其他方法可以限制接入点的选择,例如限制系统将扫描的频率集。这对于多频段无线网卡可能很有用,因为扫描所有可能的通道可能非常耗时。要将操作限制为特定频段,请使用 mode 参数:

  1. wlans_ath0="wlan0"
  2. ifconfig_wlan0="mode 11g ssid your_ssid_here DHCP"

这个例子将强制网卡在 802.11g 下工作,该标准仅适用于 2.4GHz 频率,所以任何 5GHz 频道都不会被考虑。这也可以通过 channel 参数和 chanlist 参数来实现,前者可以将操作锁定在一个特定的频率上,后者可以指定一个用于扫描的频道列表。关于这些参数的更多信息可以在在 ifconfig(8) 中找到。

32.3.4.1.2.2. 身份验证

选择接入点后,工作站需要先进行身份验证,然后才能传递数据。身份验证可以通过多种方式进行。最常见的方案是开放式身份验证,它允许任何站点加入网络并进行通信。这是首次设置无线网络时用于测试目的的身份验证。其他方案要求在数据流量流动之前完成加密握手,使用预共享密钥或机密,或者使用涉及后端服务(如 RADIUS )的更复杂的方案。开放式身份验证是默认设置。下一个最常见的设置是 WPA-PSK,也称为 WPA Personal,在 WPA-PSK 中进行了描述。

注意
如果将 Apple® AirPort® Extreme 基站用作接入点,则需要配置共享密钥身份验证和 WEP 密钥。这可以在 /etc/rc.conf 中配置,也可以使用 wpa_supplicant(8) 进行配置。对于单个 AirPort® 基站,可以访问以下配置:
  1. ifconfig_wlan0="authmode shared wepmode on weptxkey 1 wepkey 01234567 DHCP"
一般来说,应该避免共享密钥认证,因为它以一种高度约束的方式使用 WEP 密钥材料,使得破解密钥更加容易。如果为了与传统设备兼容而必须使用 WEP,最好使用带有开放认证的 WEP。关于 WEP 的更多信息可以在 WEP 中找到。
32.3.4.1.2.3. 使用 DHCP 获取 IP 地址

一旦选择了一个接入点并设置了认证参数,就必须获得一个 IP 地址以便进行通信。大多数情况下,IP 地址是通过 DHCP 获得的。为了实现这一点,请编辑 /etc/rc.conf,将 DHCP 添加到设备的配置中。

  1. wlans_ath0="wlan0"
  2. ifconfig_wlan0="DHCP"

无线接口现在已准备好启动:

  1. # service netif start

接口运行后,使用 ifconfig(8) 查看接口 ath0 的状态:

  1. # ifconfig wlan0
  2. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  3. ether 00:11:95:d5:43:62
  4. inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
  5. media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
  6. status: associated
  7. ssid dlinkap channel 11 (2462 Mhz 11g) bssid 00:13:46:49:41:76
  8. country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7
  9. scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7
  10. roam:rate 5 protmode CTS wme burst

status: associated 关联行表示它已连接到无线网络。bssid 00:13:46:49:41:76 是接入点的 MAC 地址,authmode OPEN 表示通信没有被加密。

32.3.4.1.2.4. 静态 IP 地址

如果无法从 DHCP 服务器获取 IP 地址,请设置 DHCP 固定 IP 地址。用地址信息替换上面显示的 DHCP 关键字。请务必保留用于选择接入点的任何其他参数:

  1. wlans_ath0="wlan0"
  2. ifconfig_wlan0="inet 192.168.1.100 netmask 255.255.255.0 ssid your_ssid_here"

32.3.4.1.3. WPA

Wi-Fi 保护访问 (WPA) 是一种与 802.11 网络一起使用的安全协议,用于解决缺乏适当身份验证和 WEP 的弱点。WPA 利用 802.1X 身份验证协议,并使用多个密码之一而不是 WEP 来实现数据完整性。WPA 要求的唯一密码是临时密钥完整性协议 (TKIP)。TKIP 是一种密码,它通过添加完整性检查、篡改检测和响应检测到的入侵的措施来扩展 WEP 使用的基本 RC4 密码。TKIP 旨在仅通过软件修改在旧硬件上工作。它代表了一种妥协,可以提高安全性,但仍然不能完全免受攻击。WPA 还指定 AES-CCMP 密码作为 TKIP 的替代密码,这是可能的首选。对于此规范,通常使用术语 WPA2 或 RSN。

WPA 定义了身份验证和加密协议。身份验证通常使用以下两种技术之一完成:通过 802.1X 和后端身份验证服务(如 RADIUS),或者通过使用预先共享的密钥在工作站和接入点之间进行最小的握手。前者通常被称为 WPA Enterprise,后者被称为 WPA Personal。由于大多数人不会为他们的无线网络设置 RADIUS 后端服务器,因此 WPA-PSK 是迄今为止 WPA 最常遇到的配置。

无线连接的控制以及与服务器的密钥协商或认证是使用 wpa_supplicant(8) 完成的。此程序需要一个配置文件 /etc/wpa_supplicant.conf 才能运行。有关此文件的更多信息,请参见 wpa_supplicant.conf(5)

32.3.4.1.3.1. WPA-PSK

WPA-PSK,也称为 WPA Personal,基于预共享密钥(PSK),该密钥从给定的密码生成,在无线网络中用作主密钥。这意味着每个无线用户将共享相同的密钥。WPA-PSK 适用于无法或不需要使用身份验证服务器的小型网络。

警告
始终使用足够长且由丰富字母组成的强密码,以免被轻易猜到或攻击。

第一步是使用 SSID 和网络的预共享密钥配置 /etc/wpa_supplicant.conf

  1. network={
  2. ssid="freebsdap"
  3. psk="freebsdmall"
  4. }

然后,在 /etc/rc.conf 中,指示将使用 WPA 完成无线设备配置,并使用 DHCP 获取 IP 地址:

  1. wlans_ath0="wlan0"
  2. ifconfig_wlan0="WPA DHCP"

然后,调出界面:

  1. # service netif start
  2. Starting wpa_supplicant.
  3. DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5
  4. DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
  5. DHCPOFFER from 192.168.0.1
  6. DHCPREQUEST on wlan0 to 255.255.255.255 port 67
  7. DHCPACK from 192.168.0.1
  8. bound to 192.168.0.254 -- renewal in 300 seconds.
  9. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  10. ether 00:11:95:d5:43:62
  11. inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
  12. media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
  13. status: associated
  14. ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
  15. country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
  16. AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
  17. bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
  18. wme burst roaming MANUAL

或者,尝试使用 /etc/wpa_supplicant.conf 中的信息手动配置接口:

  1. # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
  2. Trying to associate with 00:11:95:c3:0d:ac (SSID='freebsdap' freq=2412 MHz)
  3. Associated with 00:11:95:c3:0d:ac
  4. WPA: Key negotiation completed with 00:11:95:c3:0d:ac [PTK=CCMP GTK=CCMP]
  5. CTRL-EVENT-CONNECTED - Connection to 00:11:95:c3:0d:ac completed (auth) [id=0 id_str=]

下一个操作是启动 dhclient(8) 从 DHCP 服务器获取 IP 地址:

  1. # dhclient wlan0
  2. DHCPREQUEST on wlan0 to 255.255.255.255 port 67
  3. DHCPACK from 192.168.0.1
  4. bound to 192.168.0.254 -- renewal in 300 seconds.
  5. # ifconfig wlan0
  6. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  7. ether 00:11:95:d5:43:62
  8. inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
  9. media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
  10. status: associated
  11. ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
  12. country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
  13. AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
  14. bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
  15. wme burst roaming MANUAL
注意
如果 /etc/rc.conf 有一个 ifconfig_wlan0="DHCP" 条目,dhclient(8) 将在 wpa_supplicant(8) 与接入点关联后自动启动。

如果 DHCP 是不可能的或不需要的,在 wpa_supplicant(8) 对工作站进行身份验证后设置一个静态 IP 地址:

  1. # ifconfig wlan0 inet 192.168.0.100 netmask 255.255.255.0
  2. # ifconfig wlan0
  3. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  4. ether 00:11:95:d5:43:62
  5. inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255
  6. media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
  7. status: associated
  8. ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
  9. country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
  10. AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
  11. bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
  12. wme burst roaming MANUAL

不使用 DHCP 时,还必须手动设置默认网关和域名服务器:

  1. # route add default your_default_router
  2. # echo "nameserver your_DNS_server" >> /etc/resolv.conf
32.3.4.1.3.2. 使用 EAP-TLS 的 WPA

使用 WPA 的第二种方法是使用 802.1X 后端身份验证服务器。在这种情况下,WPA 被称为 WPA Enterprise,以将其与安全性较低的 WPA Personal 区分开来。WPA 企业版中的身份验证基于可扩展身份验证协议 (EAP)。

EAP 不附带加密方法。相反,EAP 嵌入在加密隧道中。有许多 EAP 身份验证方法,但 EAP-TLS、EAP-TTLS 和 EAP-PEAP 是最常见的。

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

与之前一样,配置是通过 /etc/wpa_supplicant.conf 完成的:

  1. network={
  2. ssid="freebsdap"
  3. proto=RSN
  4. key_mgmt=WPA-EAP
  5. eap=TLS
  6. identity="loader"
  7. ca_cert="/etc/certs/cacert.pem"
  8. client_cert="/etc/certs/clientcert.pem"
  9. private_key="/etc/certs/clientkey.pem"
  10. private_key_passwd="freebsdmallclient"
  11. }
此字段指示网络名称 (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

  1. wlans_ath0="wlan0"
  2. ifconfig_wlan0="WPA DHCP"

下一步是调出接口:

  1. # service netif start
  2. Starting wpa_supplicant.
  3. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
  4. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
  5. DHCPACK from 192.168.0.20
  6. bound to 192.168.0.254 -- renewal in 300 seconds.
  7. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  8. ether 00:11:95:d5:43:62
  9. inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
  10. media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
  11. status: associated
  12. ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
  13. country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
  14. AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
  15. bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
  16. wme burst roaming MANUAL

也可以使用 wpa_supplicant(8)ifconfig(8) 手动调出接口。

32.3.4.1.3.3. 使用 EAP-TTLS 的 WPA

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

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

  1. network={
  2. ssid="freebsdap"
  3. proto=RSN
  4. key_mgmt=WPA-EAP
  5. eap=TTLS
  6. identity="test"
  7. password="test"
  8. ca_cert="/etc/certs/cacert.pem"
  9. phase2="auth=MD5"
  10. }
此字段指定连接的 EAP 方法。
identity 字段包含加密 TLS 隧道内用于 EAP 身份验证的身份字符串。
password 字段包含用于 EAP 身份验证的密码短语。
ca_cert 字段表示CA证书文件的路径名。需要此文件来验证服务器证书。
此字段指定加密的 TLS 隧道中使用的身份验证方法。在此示例中,使用具有 MD5-Challenge 的 EAP。“内部身份验证”阶段通常称为“阶段 2”。

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

  1. wlans_ath0="wlan0"
  2. ifconfig_wlan0="WPA DHCP"

下一步是调出接口:

  1. # service netif start
  2. Starting wpa_supplicant.
  3. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
  4. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
  5. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
  6. DHCPACK from 192.168.0.20
  7. bound to 192.168.0.254 -- renewal in 300 seconds.
  8. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  9. ether 00:11:95:d5:43:62
  10. inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
  11. media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
  12. status: associated
  13. ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
  14. country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
  15. AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
  16. bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
  17. wme burst roaming MANUAL
32.3.4.1.3.4. WPA 与 EAP-PEAP
注意
PEAPv0/EAP-MSCHAPv2 是最常见的 PEAP 方法。在本章中,术语 PEAP 用于指代该方法。

受保护的 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 相关设置:

  1. network={
  2. ssid="freebsdap"
  3. proto=RSN
  4. key_mgmt=WPA-EAP
  5. eap=PEAP
  6. identity="test"
  7. password="test"
  8. ca_cert="/etc/certs/cacert.pem"
  9. phase1="peaplabel=0"
  10. phase2="auth=MSCHAPV2"
  11. }
此字段指定连接的 EAP 方法。
identity 字段包含加密 TLS 隧道中 EAP 身份验证的标识字符串。
password 字段包含 EAP 身份验证的通行短语。
ca_cert 字段指示 CA 证书文件的路径名。需要此文件来验证服务器证书。
此字段包含身份验证的第一阶段( TLS 隧道)的参数。根据所使用的身份验证服务器,指定用于身份验证的特定标签。大多数情况下,标签将是“客户端 EAP 加密”,这是通过使用 peaplabel=0 设置的。更多信息可以在 wpa_supplicant.conf(5) 中找到。
此字段指定加密的 TLS 隧道中使用的身份验证协议。在 PEAP 的情况下,它是 auth=MSCHAPV2

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

  1. wlans_ath0="wlan0"
  2. ifconfig_wlan0="WPA DHCP"

然后,调出界面:

  1. # service netif start
  2. Starting wpa_supplicant.
  3. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
  4. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
  5. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
  6. DHCPACK from 192.168.0.20
  7. bound to 192.168.0.254 -- renewal in 300 seconds.
  8. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  9. ether 00:11:95:d5:43:62
  10. inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
  11. media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
  12. status: associated
  13. ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
  14. country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
  15. AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
  16. bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
  17. wme burst roaming MANUAL

32.3.4.1.4. WEP

有线等效保密 (WEP) 是原始 802.11 标准的一部分。没有身份验证机制,只有一种容易破解的弱形式的访问控制。

WEP 可以使用 ifconfig(8) 进行设置:

  1. # ifconfig wlan0 create wlandev ath0
  2. # ifconfig wlan0 inet 192.168.1.100 netmask 255.255.255.0 \
  3. ssid my_net wepmode on weptxkey 3 wepkey 3:0x3456789012
  • weptxkey 指定将在传输中使用哪个 WEP 密钥。此示例使用第三个键。这必须与接入点上的设置相匹配。当不确定接入点使用哪个键时,请尝试 1 (第一个键)获取此值。

  • wepkey 选择其中一个 WEP 键。它应该采用 index:key 格式。默认情况下使用 1 密钥;仅当使用第一个键以外的键时才需要设置索引。

    | 注意 | | ————————————————————————— | | 将 0x3456789012 替换为配置为在接入点上使用的密钥。|

有关详细信息,请参阅 ifconfig(8)

wpa_supplicant(8) 设备可用于配置 WEP 的无线接口。上面的示例可以通过将以下行添加到 /etc/wpa_supplicant.conf 来设置:

  1. network={
  2. ssid="my_net"
  3. key_mgmt=NONE
  4. wep_key3=3456789012
  5. wep_tx_keyidx=3
  6. }

然后:

  1. # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
  2. Trying to associate with 00:13:46:49:41:76 (SSID='dlinkap' freq=2437 MHz)
  3. Associated with 00:13:46:49:41:76

32.3.5. 点对点模式

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

在计算机 A

  1. # ifconfig wlan0 create wlandev ath0 wlanmode adhoc
  2. # ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap
  3. # ifconfig wlan0
  4. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
  5. ether 00:11:95:c3:0d:ac
  6. inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
  7. media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>
  8. status: running
  9. ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac
  10. country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
  11. protmode CTS wme burst

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

B 现在应该能够检测到 A

  1. # ifconfig wlan0 create wlandev ath0 wlanmode adhoc
  2. # ifconfig wlan0 up scan
  3. SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
  4. freebsdap 02:11:95:c3:0d:ac 2 54M -64:-96 100 IS WME

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

  1. # ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap
  2. # ifconfig wlan0
  3. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
  4. ether 00:11:95:d5:43:62
  5. inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
  6. media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>
  7. status: running
  8. ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac
  9. country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
  10. protmode CTS wme burst

AB 两者现在都已准备好交换信息。

32.3.6. FreeBSD 主机接入点

FreeBSD 可以充当接入点 (AP),从而无需购买硬件 AP 或运行 ad-hoc 网络。当 FreeBSD 机器充当另一个网络(如 Internet)的网关时,这可能特别有用。

32.3.6.1. 基本设置

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

注意
Windows® 驱动程序的 NDIS 驱动程序包装器当前不支持 AP 操作。只有原生 FreeBSD 无线驱动程序支持 AP 模式。

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

  1. # ifconfig wlan0 create wlandev ath0
  2. # ifconfig wlan0 list caps
  3. drivercaps=6f85edc1<STA,FF,TURBOP,IBSS,HOSTAP,AHDEMO,TXPMGT,SHSLOT,SHPREAMBLE,MONITOR,MBSS,WPA1,WPA2,BURST,WME,WDS,BGSCAN,TXFRAG>
  4. cryptocaps=1f<WEP,TKIP,AES,AES_CCM,TKIPMIC>

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

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

  1. # ifconfig wlan0 destroy

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

  1. # ifconfig wlan0 create wlandev ath0 wlanmode hostap
  2. # ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1

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

  1. # ifconfig wlan0
  2. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
  3. ether 00:11:95:c3:0d:ac
  4. inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
  5. media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>
  6. status: running
  7. ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
  8. country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
  9. protmode CTS wme burst dtimperiod 1 -dfs

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

接口配置可以在引导时自动完成,方法是将以下行添加到 /etc/rc.conf

  1. wlans_ath0="wlan0"
  2. create_args_wlan0="wlanmode hostap"
  3. ifconfig_wlan0="inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1"

32.3.6.2. 基于主机的接入点,无需认证或加密

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

配置 AP 后,从另一台无线计算机启动扫描以查找 AP:

  1. # ifconfig wlan0 create wlandev ath0
  2. # ifconfig wlan0 up scan
  3. SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
  4. freebsdap 00:11:95:c3:0d:ac 1 54M -66:-96 100 ES WME

客户端计算机找到了 AP,并且可以与之关联:

  1. # ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap
  2. # ifconfig wlan0
  3. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
  4. ether 00:11:95:d5:43:62
  5. inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
  6. media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
  7. status: associated
  8. ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
  9. country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7
  10. scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7
  11. roam:rate 5 protmode CTS wme burst

32.3.6.3. WPA2 基于主机的接入点

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

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

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

  1. hostapd_enable="YES"

在尝试配置 hostapd(8) 之前,首先配置基本设置中引入 的基本设置

32.3.6.3.1. WPA2-PSK

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

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

  1. interface=wlan0
  2. debug=1
  3. ctrl_interface=/var/run/hostapd
  4. ctrl_interface_group=wheel
  5. ssid=freebsdap
  6. wpa=2
  7. wpa_passphrase=freebsdmall
  8. wpa_key_mgmt=WPA-PSK
  9. wpa_pairwise=CCMP
用于接入点的无线接口。
hostapd(8) 执行期间使用的详细级别。值为 1 表示最小级别。
hostapd(8) 用于存储域套接字文件的目录的路径名,以便与外部程序(如 hostapd_cli(8)) 进行通信。此示例中使用默认值。
允许访问控制接口文件的组。
将显示在无线扫描中的无线网络名称或 SSID。
启用 WPA 并指定需要哪种 WPA 认证协议。值为 2 时,建议将 AP 配置为 WPA2。只有在需要过时的 WPA 时才设置为 1
用于 WPA 身份验证的 ASCII 密码。
要使用的密钥管理协议。此示例设置 WPA-PSK。
接入点接受的加密算法。在此示例中,仅接受 CCMP (AES) 密码。CCMP 是 TKIP 的替代方案,在可能的情况下是强烈建议的。只有当存在无法使用 CCMP 的站点时,才应允许 TKIP。

下一步是启动 hostapd(8)

  1. # service hostapd forcestart
  1. # ifconfig wlan0
  2. wlan0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
  3. ether 04:f0:21:16:8e:10
  4. inet6 fe80::6f0:21ff:fe16:8e10%wlan0 prefixlen 64 scopeid 0x9
  5. nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
  6. media: IEEE 802.11 Wireless Ethernet autoselect mode 11na <hostap>
  7. status: running
  8. ssid No5ignal channel 36 (5180 MHz 11a ht/40+) bssid 04:f0:21:16:8e:10
  9. country US ecm authmode WPA2/802.11i privacy MIXED deftxkey 2
  10. AES-CCM 2:128-bit AES-CCM 3:128-bit txpower 17 mcastrate 6 mgmtrate 6
  11. scanvalid 60 ampdulimit 64k ampdudensity 8 shortgi wme burst
  12. dtimperiod 1 -dfs
  13. groups: wlan

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

32.3.6.4. 基于主机的 WEP 接入点

不建议使用 WEP 设置 AP,因为没有身份验证机制,并且加密很容易破解。某些旧版无线网卡仅支持 WEP,而这些网卡仅支持 AP,无需身份验证或加密。

无线设备现在可以进入主机模式,并使用正确的 SSID 和 IP 地址进行配置:

  1. # ifconfig wlan0 create wlandev ath0 wlanmode hostap
  2. # ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 \
  3. ssid freebsdap wepmode on weptxkey 3 wepkey 3:0x3456789012 mode 11g
  • weptxkey 表示在传输中会使用哪个 WEP 密钥。本例使用第三个密钥,因为密钥编号以 1 开头。必须指定这个参数才能对数据进行加密。
  • wepkey 设置所选择的 WEP 密钥。它的格式应该是 index:key。如果没有给出索引,就会设置密钥 1。当使用第一个密钥以外的密钥时,需要设置索引。

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

  1. # ifconfig wlan0
  2. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
  3. ether 00:11:95:c3:0d:ac
  4. inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
  5. media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>
  6. status: running
  7. ssid freebsdap channel 4 (2427 Mhz 11g) bssid 00:11:95:c3:0d:ac
  8. country US ecm authmode OPEN privacy ON deftxkey 3 wepkey 3:40-bit
  9. txpower 21.5 scanvalid 60 protmode CTS wme burst dtimperiod 1 -dfs

从另一台无线计算机上,现在可以启动扫描以查找 AP:

  1. # ifconfig wlan0 create wlandev ath0
  2. # ifconfig wlan0 up scan
  3. SSID BSSID CHAN RATE S:N INT CAPS
  4. freebsdap 00:11:95:c3:0d:ac 1 54M 22:1 100 EPS

在此示例中,客户端计算机找到了 AP,可以使用正确的参数与其关联。有关更多详细信息请参阅 WEP

32.3.7. 同时使用有线和无线连接

有线连接提供更好的性能和可靠性,而无线连接提供灵活性和移动性。笔记本电脑用户通常希望在两种类型的连接之间无缝漫游。

在 FreeBSD 上,可以以“故障转移”的方式将两个甚至更多的网络接口组合在一起。此类型的配置使用来自一组网络接口的最首选和可用的连接,并且当链路状态更改时,操作系统会自动切换。

链路聚合和故障转移中介绍了链路聚合和故障转移以太网和无线接口之间的故障转移模式 提供了同时使用有线和无线连接的示例。

32.3.8. 故障排除

本节介绍一些步骤,以帮助解决常见的无线网络问题。

  • 如果扫描时未列出接入点,请检查配置是否未将无线设备限制为一组有限的通道。

  • 如果设备无法与接入点关联,请验证配置是否与接入点上的设置匹配。这包括身份验证方案和任何安全协议。尽可能简化配置。如果使用安全协议(如 WPA 或 WEP),请将接入点配置为开放身份验证,而不配置安全性以查看流量是否会通过。

    调试支持由 wpa_supplicant(8) 提供。尝试手动运行 -dd 实用程序并查看系统日志。

  • 一旦系统可以与接入点关联,就使用 ping(8) 等工具诊断网络配置。

  • 有许多较低级别的调试工具。调试消息可以使用 wlandebug(8) 在 802.11 协议支持层中启用。例如,要启用与扫描接入点和安排通信所需的 802.11 协议握手相关的控制台消息,请执行以下操作:

    1. # wlandebug -i wlan0 +scan+auth+debug+assoc
    2. net.wlan.0.debug: 0 => 0xc80000<assoc,auth,scan>

    许多有用的统计信息由 802.11 层维护,在 /usr/src/tools/tools/net80211 中找到 wlanstats,将转储此信息。这些统计数据应显示 802.11 图层识别的所有错误。但是,在位于 802.11 层下方的设备驱动程序中会发现一些错误,因此它们可能不会显示出来。若要诊断特定于设备的问题,请参阅驱动程序的文档。

如果上述信息无助于澄清问题,请提交问题报告并包含上述工具的输出。