为树梅派 3 加装一块 USB 无线网卡并工作在 AP 模式

没错,这曾经是个很简单的问题。在 Debian 7 下只要修改 /etc/network/interfaces,然后配置hostapd,就可以了。不过随着 Raspbian 的更新,这种方法已经不太合适了,必须要按照 Debian 8+ 的方式进行设置了,故写篇文章记录一下。

几句话简要说明版:Debian 8 已经不推荐使用/etc/network/interfaces的方式来配置网络了,相应的功能由 dhcpcd 接管,配置文件位于 /etc/dhcpcd.conf。当 dhcpcd 检测到有无线设备,会去查找/etc/wpa_supplicant/wpa_supplicant.conf 并调用 wpa_supplicant 来连接 WLAN。

新的网络设备命名方式

详见:https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

简单来说,就是 wlan0、wlan1 这种方式会由于枚举顺序等原因造成设备名的不可预测,因此使用 wlp3s0 这类由插槽确定的名称,或 wlx74da38cd2fd4 这种由 MAC 地址决定的名称。

然而在当前版本的 Raspbian 中,内置的无线网卡依旧为 wlan0,外置的会被用 MAC 地址命名。这会造成一个问题,就是内置网卡有时会变成 wlan1,不过好在不会造成大的混淆。

阻止 dhcpcd 调用 wpa_supplicant 将外置网卡接入 WLAN

这个问题一开始困扰了我很久。最开始试图在 /etc/dhcpcd.conf中配置denyinterfaces wlx*来解决这个问题,确实有效,dhcpcd 忽略了外置网卡,不会再把它连进某个 WLAN 中了,但也无法为外置网卡分配静态地址了。

经过仔细阅读文档,发现是我的处理方法有错。由于 wpa_supplicant.conf会被所有网卡使用,因此不应该将 WLAN 信息存储在这里,而是存储在 wpa_supplicant-wlan0.conf中,这样当外置网卡 UP 的时候,dhcpcd 会找不到 wpa_supplicant 的配置文件,也就不会去试图将它连接某个 WLAN 了。

对了,还记得上面提到的枚举顺序的问题吗?还需要做一个 symbol link,否则内置网卡被枚举成 wlan1 的时候就不会上不去网了。(虽然比较少见)

为外置网卡配置静态 IP

# /etc/dhcpcd.conf

interface wlx74da38cd2fd4
noipv6
static ip_address=192.168.42.1/24

/etc/dhcpcd.conf加入以上内容。不多解释了,So easy~

配置外置网卡为 AP 模式

备份 /etc/hostapd/hostapd.conf,修改如下:

# /etc/hostapd/hostapd.conf

logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

interface=wlx74da38cd2fd4
driver=nl80211
ssid=pipi
hw_mode=g
channel=6
wmm_enabled=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

这个我也没仔细研究,反正 It works,除了日志。然后还有 /etc/default/hostapd,将DAEMON_CONF=设置为DAEMON_CONF="/etc/hostapd/hostapd.conf"

最后记得在 systemd 中使能 hostapd.service。

配置 dnsmasq 实现 IP 自动分配

依旧采用最简单的方式,备份之后修改 /etc/dnsmasq.conf如下:

# /etc/dnsmasq.conf

interface=wlx74da38cd2fd4
bind-interfaces
dhcp-range=192.168.42.100,192.168.42.200,12h

这里指定了要执行分配的接口和 IP 范围,dnsmasq 会自动为客户机分配这些范围内的 IP,同时网关为自己,DNS 服务器也是自己。同时还会启动 DNS 服务器,为这一网段提供 DNS 服务。

其他问题

OK,现在 AP 就架设好了。不过还有几个问题:

  1. 信号问题。我用的外置 3dBi 天线的网卡,但信号似乎并不是很强?
  2. iwconfig / iw 均无法正确设置网卡的属性,目前怀疑是驱动问题?
  3. 没配置 NAT 转发,因此子网下的设备不能上网。不过我的目的是让它们能访问树梅派就可以了。(可以用 iptables 处理)
  4. 批量配置时,不同的网卡 MAC 地址不一致会造成脚本的设备名不一致,如何解决?

 

发表评论