# Software access point (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

相关文章

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

翻译状态：本文是 Software_access_point 的翻译。上次翻译日期：2021-01-27。如果英文版本有所更改，则您可以帮助同步翻译。

软接入点（也称为虚拟路由器或虚拟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
    ...

### 单个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配置文件中的内容。尤其是修改`ssid`和`wpa_passphrase`。详情请参考 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设备请取消注释并修改以下部分
    ## 启用802.11n支持
    #ieee80211n=1
    ## QoS 支持
    #wmm_enabled=1
    ## 请使用“iw list”查看设备信息并相应地修改 ht_capab
    #ht_capab=[HT40+][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40]

提示： 使用UTF-8字符的SSID可以正常显示国际化的字符。配置文件中设置`utf8_ssid=1`可以启用这个功能。但是一些客户端可能无法正确识别编码（例如wpa_supplicant和windows 7）。

启动 hostapd 前，请确认无线网络接口已经正确启动（bring up），否则 hostapd 会启动失败，并显示错误信息：“无法配置驱动程序模式”（英文提示为“could not configure driver mode”）。

如果需要自动启动hostapd，Enable `hostapd.service`.

警告： 不同地区允许作为接入点的无线信道是不同的。由于无线设备的固件设计，你应当设置正确的地区来使用合法的信道。 不要选择非本地区域，这可能会非法扰乱网络通讯, 在信号覆盖范围内影响你和他人设备的无线功能！区域信道参见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 服务。

## 常见问题与解答

### 无线局域网很慢

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

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

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

- 低熵值也会造成性能下降。考虑安装 haveged 试试。

### 受到NetworkManager干扰

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

    /etc/NetworkManager/NetworkManager.conf

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

或通过接口名称屏蔽：

    /etc/NetworkManager/NetworkManager.conf

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

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

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

## 相关文章

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

Category:

- Wireless networking (简体中文)