软件接入点 - Arch Linux 中文维基

跳转到内容

# 软件接入点

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Software_access_point，最近一次同步于 2023-10-12，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- Network configuration
- Wireless network configuration
- Ad-hoc networking
- Internet sharing

软接入点（也称为虚拟路由器或虚拟Wi-Fi）使计算机能够将其无线接口转换为Wi-Fi热点，无需使用独立无线路由器。

## 要求

### 无线网卡必须支持AP模式

无线设备必须兼容 nl80211标准，并且支持 AP 工作模式。可通过 `iw list` 命令来验证, 该命令输出信息的 `Supported interface modes` 段落中要有 `AP` 模式:

    $ iw list

    Wiphy phy1
    ...
    	Supported interface modes:
    		 * IBSS
    		 * managed
    		 * AP
    		 * AP/VLAN
    		 * WDS
    		 * monitor
    		 * mesh point
    ...

注意：自 2019 年以来，大多数 Intel 无线网卡上不再能支持 5GHz 频段的 AP 服务，原因是固件错误地将位置感知监管（LAR）功能保留为启用状态，即使在 AP 模式下也是如此，但根据 报告，可以通过一个特殊的 hostapd 补丁让它工作。请同时参考 #无法在 5Ghz 频段启用热点模式 。

### 单个Wi-Fi设备同时作为无线客户端和AP

软热点的创建和系统的网络连接方式(以太网,无线网等) 是独立的。许多无线设备甚至支持并存操作，即同时作为热点和无线“客户端“使用。通过这个功能可以为当前连接网络创建一个热点，就像“无线中继器”一样。`iw list` 命令的输出中会显示设备是否支持并行操作：

    $ iw list

    Wiphy phy1
    ...
            valid interface combinations:
                     * #{ managed } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1,
                       total <= 2048, #channels <= 1, STA/AP BI must match
    ...

约束`#channels <= 1`说明创建的热点必须和无线客户端连接处于同一信道。参见下文 `hostapd.conf` 示例中 `channel` 的设置。

如果有线连接不可用, 使用这个功能时需要分别创建两个“虚拟网络接口（virtual interface）”。可以通过如下方式为`wlan0` 创建负责网络连接的 `wlan0_sta` 和负责热点的 `wlan0_ap`。两个虚拟网卡具有不同的MAC地址。

    # iw dev wlan0 interface add wlan0_sta type managed addr 12:34:56:78:ab:cd
    # iw dev wlan0 interface add wlan0_ap  type managed addr 12:34:56:78:ab:ce

可以用 macchanger 创建随机 MAC 地址。

## 配置

接入点的设置包含两个主要部分:

- 设置Wi-Fi链路层，这样无线客户端可以与电脑的“软件接入点”建立连接，从而同电脑进行通信。
- 配置电脑上的网络, 使电脑可以在 Internet 和无线客户端之间有效地转发IP包。

### 无线链路层

我们使用支持WPA2的hostapd包建立Wi-Fi链路。

hostapd所自带的默认配置文件中有很多选项列出，且均有相关描述，读者可以参考该配置文件以对各个选项有个大致的了解。

按实际需要调整hostapd配置文件中的内容。尤其是修改`ssid`和`wpa_passphrase`。如果你的网卡支持WiFi5和WiFi6的话，启用`ieee80211ac`与`ieee80211ax`。`ht_capab`用于开启若干AP功能，其中包括对传输速度影响显著的频道宽度。 详情请参考 hostapd Linux 手册.

    /etc/hostapd/hostapd.conf

    interface=wlan0_ap
    bridge=br0

    # 要在 IEEE 802.11 管理框架中使用的 SSID（即热点名）
    ssid=YourWiFiName
    # 驱动接口类型（hostap/wired/none/nl80211/bsd）
    driver=nl80211
    # 国家或地区代码（ISO/IEC 3166-1）
    country_code=US

    # 工作模式 (a = IEEE 802.11a (5 GHz), b = IEEE 802.11b (2.4 GHz)
    hw_mode=g
    # 使用信道
    channel=7
    # 允许最大连接数
    max_num_sta=5

    # Bit 字段：bit0 = WPA, bit1 = WPA2
    wpa=2
    # Bit 字段：1=wpa, 2=wep, 3=both
    auth_algs=1

    # 加密协议；禁用不安全的 TKIP
    wpa_pairwise=CCMP
    # 加密算法
    wpa_key_mgmt=WPA-PSK
    wpa_passphrase=Somepassphrase

    # hostapd日志设置
    logger_stdout=-1
    logger_stdout_level=2

    ## 启用802.11n支持
    #ieee80211n=1
    ## 启用802.11ac支持
    #ieee80211ac=1
    ## 启用802.11ax支持
    #ieee80211ax=1
    ## QoS 支持
    #wmm_enabled=1
    ## 请使用“iw list”查看设备信息并相应地修改ht_capab和vht_capab
    #ht_capab=[HT40+][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40]
    #vht_capab=[RXLDPC][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1]

提示：虽然iwd包也可以用来开启无线AP，但相比之下更建议使用hostapd，因为hostapd有更多的选项可用，包括影响性能的选项。使用iwd可能会造成性能限制，比如AP可能会被限制在802.11n或频宽被限制在20MHz。
提示：使用UTF-8字符的SSID可以正常显示国际化的字符。配置文件中设置`utf8_ssid=1`可以启用这个功能。但是一些客户端可能无法正确识别编码（例如wpa_supplicant和windows 7）。

如果想开机自启hostapd，启用`hostapd.service`。

如果开机时会自启hostapd，请确认无线网络接口已经率先启动（bring up），否则 hostapd 会启动失败。为了确保无线接口已就绪，编辑单元配置文件，绑定（BindTo）你的网络接口并在其后（After）启动：

    /etc/systemd/system/hostapd.service.d/override.conf

    [Unit]
    BindsTo=sys-subsystem-net-devices-wlan0.device
    After=sys-subsystem-net-devices-wlan0.device

确保接口不会被其它网络管理器控制。如果你用的是NetworkManager，查阅NetworkManager#忽略特定设备。

警告：不同地区允许作为接入点的无线信道是不同的。由于无线设备的固件设计，你应当设置正确的地区来使用合法的信道。 不要选择非本地区域，这可能会非法扰乱网络通讯, 在信号覆盖范围内影响你和他人设备的无线功能！区域信道参见Wireless network configuration#Respecting the regulatory domain.
注意：如果你有一个基于RTL8192CU芯片组的网卡, 请从AUR中安装hostapd-rtl871xdrvAUR并在`hostapd.conf` 文件中将`driver=nl80211` 替换为 `driver=rtl871xdrv`。

### 网络配置

有两种基本的实现方法：

1. 网桥: 在电脑上搭一个网桥，无线客户端就可以像电脑一样访问同一个网络接口和同一个子网。
2. NAT: 通过 IP 转发/伪装和 DHCP 服务，无线客户端会专门使用一个子网, 数据进出这个子网是被网络地址转换的(NAT-ted)——就像是连接在你数字用户回路(DSL)或铜轴线(Cabel)调制解调器上的一个普通的无线路由器一样。

使用网桥方式会更加简单, 但它要求无线客户端所需要的任何服务（例如 DHCP）在你电脑的外部接口上是可用的。因此如果你使用拨号连接（如,通过PPPoE或3G调制解调器）或你在使用铜轴线调制解调器，它会通过DHCP提供一个固定的IP地址, 在这种状态下桥接将不能正常工作。

使用NAT方式会更加灵活, NAT把Wi-Fi客户端和你的电脑清晰地分离开来并且对外界完全透明。 对于任何种类的网络连接它都适用，而且（如果必要的话）你可以使用iptables的方式来控制进出策略。

当然，将两者结合物也是可能的，比方说：某个拥有一个静态IP的网桥既包含以太网设备又有无线设备，同时提供DHCP服务，又能够配置NAT将数据转发到另外一个连接了 WAN 的网络设备。

### 网桥设置

创建一个网桥并把网络接口 (如 `eth0`) 加入其中 。不要将无线网络接口（如`wlan0`）添加到网桥；hostapd 会自行添加无线设备。 详情请参阅 Network bridge。

提示：如果已经有网桥（例如，虚拟机使用的）则可以复用使用该网桥。

### NAT设置

详细内容请参考Internet sharing，在其中连接 LAN 的设备是 `net0`。这里我们通常指的是无线设备，比如说 `wlan0`。

## 工具

### linux-wifi-hotspot

linux-wifi-hotspotAUR软件包中的脚本可以创建桥接或NAT方式的接入点。它综合使用hostapd包，dnsmasq和iptables使得接入点运作良好。该软件可以通过命令行或图形界面使用。创建一个简单的NAT方式的接入点可以执行：

    # create_ap wlan0 eth0 MyAccessPoint MyPassPhrase

或者可以根据需求修改`/etc/create_ap.conf`配置文件，并指定使用该配置。

    # create_ap --config /etc/create_ap.conf

或者使用图形界面，运行：

    # wihotspot

Enable并start `create_ap.service`会使用`/etc/create_ap.conf`中指定的配置在启动时运行脚本。 详细信息，参见linux-wifi-hotspot的GitHub页面。

注意：在桥接模式下，“create_ap” 可能在启动时与当前网络配置冲突。在这种情况下，请勿配置以太网接口的IP地址，也不要配置DHCP和statip IP，以便于绑定到网桥。

### RADIUS

可以参阅这篇博客的说明来运行WPA2企业级加密的 FreeRADIUS 服务。

这篇文章的某些内容需要扩充。

原因：似乎只用NetworkManager也可以轻易创建接入点。 (在 Talk:软件接入点 中讨论)

## 常见问题与解答

### 无线局域网很慢

一般情况下可以尝试以下情况：

- `hw_mode`中配置的工作模式不合理会限制路由性能。检查并设置一个更合适的工作模式。

- 设置的`channel`拥挤或信号噪声较强也会影响无线网络质量，尤其是在人口稠密区域。尝试切换到其他频道或者使用其他频率。

### 受到NetworkManager干扰

如果网络设备被NetworkManager管理，hostapd可能无法正常工作。 可通过MAC屏蔽设备:

    /etc/NetworkManager/conf.d/unmanaged.conf

    [keyfile]
    unmanaged-devices=mac:<hwaddr>

或通过接口名称屏蔽：

    /etc/NetworkManager/conf.d/unmanaged.conf

    [keyfile]
    unmanaged-devices=interface-name:<ifname>

### 无法在 5Ghz 频段启用热点模式

对某些国家码，例如 `00`（全球），所有 5 Ghz 中可使用的频段都被设置了 `no-ir` (no-initiating-radiation) 标记，hostapd 无法使用它们。需要安装 wireless-regdb包，并设置国家码，使 hostapd 可以使用你的国家所允许的频段。

## 相关文章

- Router
- Hostapd : The Linux Way to create Virtual Wi-Fi Access Point
- tutorial and script for configuring a subnet with DHCP and DNS

分类：​

- 无线网络

软件接入点
添加话题