# 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) 中找到使用有线和无线连接的示例。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://handbook.bsdcn.org/di-7-zhang-wang-luo/7.4.-wu-xian-wang-luo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
