# 7.4.无线网络

大多数无线网络基于 [IEEE® 802.11 标准](https://en.wikipedia.org/wiki/IEEE_802.11)。

FreeBSD 支持使用 [802.11a](https://en.wikipedia.org/wiki/IEEE_802.11a-1999)、[802.11b](https://en.wikipedia.org/wiki/IEEE_802.11b-1999)、[802.11g](https://en.wikipedia.org/wiki/IEEE_802.11g-2003) 和 [802.11n](https://en.wikipedia.org/wiki/IEEE_802.11n-2009) 的网络。

> **注意**
>
> FreeBSD 对 [802.11ac](https://en.wikipedia.org/wiki/IEEE_802.11ac-2013) 的支持目前正在开发中。

一个基本的无线网络由多个站点与在 2.4GHz 或 5GHz 频段中广播的无线电通信组成，虽然根据地区不同，这些频段也在变化，正在增加 2.3GHz 和 4.9GHz 范围的通信能力。

配置无线网络的基本步骤有三步：

1. 扫描并选择接入点
2. 对站点进行身份验证
3. 配置 IP 地址或使用 DHCP

接下来的各节讨论每个步骤。

## 7.4.1. 快速连接到无线网络

将 FreeBSD 连接到现有无线网络是个非常常见的操作。

本快速入门流程展示了使用基本认证连接网络所需的步骤。更详细的操作流程将在下一节中说明。

第一步是从网络管理员处获取无线网络的服务集标识符（SSID）和预共享密钥（PSK）。

第二步是在 **/etc/wpa\_supplicant.conf** 中为该网络添加一条条目。

如果该文件不存在，请创建它。有关在此文件中格式化条目的详细信息，请参阅 [wpa\_supplicant.conf(5)](https://man.freebsd.org/cgi/man.cgi?query=wpa_supplicant.conf\&sektion=5\&format=html)。

```ini
ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1
fast_reauth=1

network={
 ssid="myssid" ①
 psk="mypsk" ②
}
```

* ① 这是无线网络的 SSID。将其替换为无线网络的名称。
* ② 这是无线网络的 PSK。将其替换为无线网络的密码。

第三步是添加网络接口条目，以便在启动时配置网络。使用 `sysctl net.wlan.devices` 获取网络设备接口。在下面的示例中，该 sysctl 输出显示网络设备接口为 “iwn0”。

```sh
# sysctl net.wlan.devices
```

输出应类似如下：

```sh
net.wlan.devices: iwm0
```

在接下来的 `sysrc` 命令中，如有必要，将 “iwn0” 替换为 sysctl 命令的输出：

```sh
# sysrc wlans_iwn0="wlan0"
# sysrc ifconfig_wlan0="WPA DHCP"
```

* 最后一步是重启 `netif` 服务，执行以下命令：

```sh
# service netif restart
```

## 7.4.2. 基本无线配置

本节提供了一个更详细的无线网卡配置示例。要查看系统中有哪些无线网卡，请参阅章节 [识别网络适配器](https://docs.freebsd.org/en/books/handbook/network/#config-identify-network-adapter)。

```sh
# ifconfig wlan0 create wlandev iwm0
```

要使该更改在重启后生效，请执行以下命令：

```sh
# sysrc wlans_iwm0="wlan0"
```

> **注意**
>
> 由于全球各地的法规情况不同，因此需要正确设置适用于你所在位置的区域，以获得有关可用信道的正确信息。
>
> ```
> # ifconfig wlan0 regdomain etsi2 country AT
> ```
>
> 要使设置持久化，将其添加到 `/etc/rc.conf` 文件中：
>
> ```
> # sysrc create_args_wlan0="country AT regdomain etsi2"
> ```

## 7.4.3. 扫描无线网络

可以使用 [ifconfig(8)](https://man.freebsd.org/cgi/man.cgi?query=ifconfig\&sektion=8\&format=html) 扫描可用的无线网络。

要列出无线网络，执行以下命令：

```sh
# ifconfig wlan0 up list scan
```

输出应类似于以下内容：

```sh
SSID/MESH ID                      BSSID              CHAN RATE    S:N     INT CAPS
FreeBSD                           e8:d1:1b:1b:58:ae    1   54M  -47:-96   100 EP   RSN BSSLOAD HTCAP WPS WME
NetBSD                            d4:b9:2f:35:fe:08    1   54M  -80:-96   100 EP   RSN BSSLOAD HTCAP WPS WME
OpenBSD                           fc:40:09:c6:31:bd   36   54M  -94:-96   100 EPS  VHTPWRENV APCHANREP RSN WPS BSSLOAD HTCAP VHTCAP VHTOPMODE WME
GNU-Linux                         dc:f8:b9:a0:a8:e0   44   54M  -95:-96   100 EP   WPA RSN WPS HTCAP VHTCAP VHTOPMODE WME VHTPWRENV
Windows                           44:48:b9:b3:c3:ff   44   54M  -84:-96   100 EP   BSSLOAD VHTPWRENV HTCAP WME RSN VHTCAP VHTOPMODE WPS
MacOS                             46:48:b9:b3:c3:ff   44   54M  -84:-96   100 EP   BSSLOAD VHTPWRENV HTCAP WME RSN VHTCAP VHTOPMODE WPS
```

1. SSID/MESH ID：标识网络的名称。
2. BSSID：标识接入点的 MAC 地址。
3. CAPS：显示每个网络的类型及其站点的功能（有关 `list scan` 的更多详细信息，请参见 [ifconfig(8)](https://man.freebsd.org/cgi/man.cgi?query=ifconfig\&sektion=8\&format=html) 的定义）。

## 7.4.4. 连接和认证无线网络

待从扫描到的无线网络列表中选择了一个网络，就需要执行连接和认证。在绝大多数无线网络中，认证是通过路由器中配置的密码进行的。其他方案则要求在数据流量开始之前完成加密握手，可能使用预共享密钥或密码，或者使用涉及后台服务（如 RADIUS）的更复杂的方案。

### 7.4.4.1. 使用 WPA2/WPA/Personal 认证

无线网络中的认证过程由 [wpa\_supplicant(8)](https://man.freebsd.org/cgi/man.cgi?query=wpa_supplicant\&sektion=8\&format=html) 管理。

[wpa\_supplicant(8)](https://man.freebsd.org/cgi/man.cgi?query=wpa_supplicant\&sektion=8\&format=html) 的配置将保存在 `/etc/wpa_supplicant.conf` 文件中。更多信息请参见 [wpa\_supplicant.conf(5)](https://man.freebsd.org/cgi/man.cgi?query=wpa_supplicant.conf\&sektion=5\&format=html)。

完成无线网络扫描后，选择了一个网络并获取了密码（PSK），该信息将添加到 `/etc/wpa_supplicant.conf` 文件中，如下所示：

```ini
network={
        scan_ssid=1 ①
        ssid="FreeBSD" ②
        psk="12345678" ③
}
```

* ① SSID 扫描技术。仅当网络为隐藏时需要使用此选项。
* ② 网络名称。
* ③ 无线网络的密码。

下一步是配置无线连接到 `/etc/rc.conf` 文件中。

如果使用静态地址，需要执行以下命令：

```sh
# sysrc ifconfig_wlan0="inet 192.168.1.20 netmask 255.255.255.0"
```

如果使用动态地址，需要执行以下命令：

```sh
# sysrc ifconfig_wlan0="WPA DHCP"
```

然后执行以下命令重启网络：

```sh
# service netif restart
```

> **注意**
>
> 有关如何执行更高级认证方法的信息，请参见 [无线高级认证](https://docs.freebsd.org/en/books/handbook/advanced-networking/#network-advanced-wireless)。

### 7.4.4.2. 使用开放网络进行认证

> **技巧**
>
> 连接没有任何认证的开放网络时，用户需要 **非常** 小心。

完成无线网络扫描并选择无线网络的 SSID 后，执行以下命令：

```sh
# ifconfig wlan0 ssid SSID
```

然后执行 [dhclient(8)](https://man.freebsd.org/cgi/man.cgi?query=dhclient\&sektion=8\&format=html) 获取配置的地址：

```sh
# dhclient wlan0
```

## 7.4.5. 同时使用有线和无线连接

有线连接提供更好的性能和可靠性，而无线连接提供灵活性和流动性。笔记本用户通常希望在这两种连接之间无缝切换。

在 FreeBSD 上，可以将两个或更多网络接口结合起来，以“故障转移”方式使用。这种配置使用一组网络接口中最优先和可用的连接，当链路状态发生变化时，操作系统会自动切换。

链路聚合和故障转移的详细内容请参见 [链路聚合和故障转移](https://docs.freebsd.org/en/books/handbook/advanced-networking/#network-aggregation)，并且可以在 [以太网和无线接口之间的故障转移模式](https://docs.freebsd.org/en/books/handbook/advanced-networking/#networking-lagg-wired-and-wireless) 中找到使用有线和无线连接的示例。
