Software access point (简体中文)

翻译状态: 本文是英文页面 Software_access_point翻译,最后翻译时间:2016-03-13,点击这里可以查看翻译后英文页面的改动。

软件接入点是在你要让你的电脑当作一个本地网络的Wi-Fi接入点时使用的。它免除了你去弄一个独立无线路由器的麻烦。

要求

无线网卡必须支持AP模式

你需要一个兼容 nl80211 的无线设备,并且该设备支持APoperating mode模式。这可以通过运行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

创建一个软件无线AP不依赖于你自己的网络连接方式(以太网,无线网,......)。许多无线设备甚至可以支持并存操作,同时既作为AP又作为无线客户端。 使用这种能力,你可以为现有网络创建一个软件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说明你的软件AP必须和你的Wi-fi客户端连接处于同一信道来运作。 参见channel里的hostapd.conf设置。

如果你需要这种能力/特性,可能是因为以太网络连接不可用,你为了使用它需要创建两个分立的虚拟网络接口。 物理设备 wlan0_sta 的虚拟网络接口可能通过如下方式来创建:

首先,虚拟网络接口是为网络连接 wlan0_sta 自身和软件AP/hostapd"无线中继器"创建的。

iw dev wlan0 interface add wlan0_sta type station  
iw dev wlan0 interface add wlan0_ap  type __ap     

其次,这个接口被分配不同的MAC地址(使用用户唯一地址)

ip link set dev wlan0_sta address 12:34:56:78:ab:cd
ip link set dev wlan0_ap  address 12:34:56:78:ab:ce

概述

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

  • 设置 Wi-Fi链路层,这样无线客户端可以加入你电脑的"软件接入点"并在你的电脑间来回收发IP包; 这是hostapd包将为你做的.
  • 在你的电脑上建立网络配置, 这样你的电脑可以在Internet连接和无线客户端之间有效地转发IP包.

无线链路层

其实Wi-Fi链路是通过hostapd包来建立的,且支持WPA2.

如果有必要,调整hostpad配置里的选项. 尤其是修改ssidwpa_passphrase. 参见 hostapd Linux documentation page 来获取更多内容.

/etc/hostapd/hostapd.conf
ssid=YourWiFiName
wpa_passphrase=Somepassphrase
interface=wlan0_ap
bridge=br0
auth_algs=3
channel=7
driver=nl80211
hw_mode=g
logger_stdout=-1
logger_stdout_level=2
max_num_sta=5
rsn_pairwise=CCMP
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
Tip: 你可以用UTF-8字符来创建SSID, 所以国际化的字符都可以正常显示了. 启用这个选项用utf8_ssid=1. 一些客户端在识别正确的编码时可能会有问题(如:wpa_supplicant或windows 7).

当启动hospapd时,请确认无线网络接口已经在之前正确启动了.

# ip link set dev wlan0_ap up

否则,会启动失败,提示节点脚本错误:"不能配置驱动模式".

为了自动启动hostapd, Enable hostapd.service.

Warning: 根据地域的不同允许作为接入点的无线信道是不同的。 根据无线设备的固件, 你应当设置正确的地区来使用合法的信道。 不要选择非本地区域, 这样你可能非法扰乱网络通讯, 在信号覆盖范围内影响你和他人设备的无线功能! 区域信道参见Wireless network configuration#Respecting the regulatory domain.
Note: 如果你有一个基于RTL8192CU芯片组的网卡, 请从AUR中安装hostapd-8192cuAUR[broken link: archived in aur-mirror]并在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去转发数据到另外一个网络设备(可能是ppp或者 eth)。

网桥设置

你应该创建一个 网桥 并把你的网络接口(比方说 eth0)加入其中 。 你 不应该添加无线网络设备 (比方说wlan0) 到网桥上;因为hostapd会自行添加。

参阅 Network bridge

Tip: 你可能希望重用一个现有的网桥,如果你已经创建了一个.(比如, 虚拟机使用的网桥)。

NAT设置

详细内容请参考Internet sharing

在那篇文章里,连接LAN的设备是 net0。 这里我们通常指的是的你的无线设备,比如说 wlan0

工具

create_ap

可以用create_ap 脚本AUR create_apAUR融合了 hostapd, dnsmasqiptables 来创建桥接或NAT方式的接入点(在AUR create_apAUR可用)。

RADIUS

可以参阅 [1] 的说明来运行WPA2企业级加密FreeRADIUS 服务器.

常见问题与解答

无线局域网很慢

可能由低熵值造成。 考虑安装 haveged 试试.

NetworkManager的干扰

如果网络设备被NetworkManager管理的话,hostapd可能不起作用. 你可以屏蔽(对)这个设备(的管理):

/etc/NetworkManager/NetworkManager.conf
[keyfile]
unmanaged-devices=mac:<hwaddr>

相关文章