赞
踩
树莓派是一款来源于英国慈善组织“Raspberry Pi 基金会”的基于微处理器的硬件平台。核心是 Broadcom ARM 架构 CPU,可以完整运行 Ubuntu、Windows 10 IoT Core 等操作系统。
最新款的树莓派 4B 还板载了 USB 3.0 接口、千兆以太网卡、2.4/5 GHz 802.11b/g/n/ac 无线网卡等设备,性能强大,价格却足够便宜,能用来 DIY 很多东西。
这篇文章就来教大家,如何从零开始将树莓派打造成一个功能强大的无线热点。
安装 Raspbian 是为了给无线热点准备操作系统环境。具体步骤参考:树莓派 4B 安装和启动
最好也要把软件源指向国内,避免后续软件下载速度太慢:教你如何给树莓派更换软件源
Hostapd 是一个运行在用户态,提供热点访问和鉴权的服务端进程。
首先安装服务:
- $ sudo apt install hostapd
- $ sudo systemctl stop hostapd
接着,我们需要配置一下热点参数。配置文件地址在 /etc/hostapd/hostapd.conf
,打开并编辑(如果没有这个文件的话,新建一个即可):
$ sudo nano /etc/hostapd/hostapd.conf
写入如下配置项。注意要根据自己的实际情况,替换 ???
处的内容:
g
即可,设备支持的话可以填 a
启用 5G 频段:
hw_mode=g
使用 2.4G 频段,则一般填 7
即可。如果配置了 5G 频段,则信道编号有所不同,具体参考:WLAN信道列表- interface=wlan0
- driver=nl80211
- ssid=???
- hw_mode=???
- channel=???
- wmm_enabled=0
- macaddr_acl=0
- auth_algs=1
- ignore_broadcast_ssid=0
- wpa=2
- wpa_passphrase=???
- wpa_key_mgmt=WPA-PSK
- wpa_pairwise=TKIP
- rsn_pairwise=CCMP
这里给出一个示例配置值:
然后,给 hostapd 指定我们刚刚配置的配置文件。打开 /etc/default/hostapd
这个文件,去掉 DAEMON_CONF
的注释,并配置成 /etc/hostapd/hostapd.conf
,如图所示。意思就是告诉 hostapd 要从 /etc/hostapd/hostapd.conf
读取配置参数。
sudo nano /etc/default/hostapd
最后,启动 hostapd 服务。
- sudo systemctl unmask hostapd
- sudo systemctl enable hostapd
- sudo systemctl start hostapd
过一会儿,就能看到 hardcore-rpi 的 WiFi 信号了。但是这个 WiFi 还没有连接网络,也不能给客户端分配 IP,接下来的小节就解决这些问题。
如果服务启动失败,比如报错 "systemctl status hostapd.service" and "journalctl -xe" for details
等,可以按如下步骤逐一排查: 1. 重启树莓派,再尝试启动 hostapd 2. 命令行执行 sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
,直接运行 hostapd,观察输出日志,一般都能发现问题。比如常见的: 1. hostapd.conf
配置错误导致启动失败。检查配置文件,修改后,新启动 hostapd 即可。 2. wlan0 端口未开启导致启动失败。执行 sudo ifconfig wlan0 up
开启端口后,重新启动 hostapd 即可。
这里给一个直接运行 hostapd 成功的截图,只要看到 "ENABLED" 字样就表示启动成功了。
用于 WiFi 热点的 wlan0 端口需要有固定的 IP 地址。假设树莓派热点的 IP 网段是 192.168.4.x,那么 wlan0 的 IP 就要设置成静态地址 192.168.4.1。
树莓派以及大多数 Linux 发行版都由 dhcpcd 服务通过 DHCP(动态主机配置协议)获取自己的 IP 地址,所以这里我们要改掉 dhcpcd 的配置,让 wlan0 端口有静态 IP。
编辑 dhcpcd 配置文件:
sudo nano /etc/dhcpcd.conf
在文件末尾添加:
- interface wlan0
- static ip_address=192.168.4.1/24
- nohook wpa_supplicant
保存后,重启 dhcpcd 服务:
sudo systemctl restart dhcpcd
执行 ifconfig
可以看到,wlan0 的 IP 地址已经固定成 192.168.4.1 了。
dnsmasq 是一个小型的用于配置 DNS 和 DHCP 的工具,适用于小型网络,它提供了 DNS 和 DHCP 功能。
首先安装 dnsmasq 服务。
- $ sudo apt install dnsmasq
- $ sudo systemctl stop dnsmasq
接着,配置 dnsmasq 参数。打开 /etc/dnsmasq.conf
配置文件,把里面的其他内容都注释掉,添加新的配置项:
- sudo nano /etc/dnsmasq.conf
- interface=wlan0
- dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h
dhcp-range 配置项的意思是,dhcp 服务会给客户端分配 192.168.4.2 到 192.168.4.20 的 IP 空间,24 小时租期。更多配置信息可以参考 Man page of DNSMASQ
然后,重启 dnsmasq 服务。
sudo systemctl reload dnsmasq
此时用手机去连接热点,就能看到成功分配了动态 IP。
上面我们给树莓派安装了 hostapd 热点服务 和 dnsmasq DHCP 服务,已经可以让手机连接 WiFi 热点并分配到动态 IP 了,但仍不能联网,所以现在就剩最后一步:给树莓派配置 IP 包转发,让手机连接 WiFi 后能正常上网。
首先,开启 Linux 内核的 ip 转发功能。打开 /etc/sysctl.conf
系统配置文件,去掉 net.ipv4.ip_forward=1
这个配置项的注释:
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
要让Linux系统具有路由转发功能,需要配置一个Linux的内核参数net.ipv4.ip_forward。这个参数指定了Linux系统当前对路由转发功能的支持情况;其值为0时表示禁止进行IP转发;如果是1,则说明IP转发功能已经打开。
Linux ip_forward 数据包转发
然后,修改 Linux 防火墙规则,完成报文源地址目标转换。
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
接着,设置开机自动导入防火墙规则。
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
编辑 /etc/rc.local
,把 iptables-restore < /etc/iptables.ipv4.nat
加到最后一行 exit 0
的前面:
然后,重启树莓派:
sudo reboot
重启树莓派后,手机连接树莓派热点。一切正常的话,手机就可以 WiFi 上网了。
树莓派热点能做很多事情,比如和手机等其他设备互联通信。插入多个无线网卡,还能实现 WiFi 中继等。
但这篇文章介绍的树莓派路由器只是个简单版本,没有 ADSL 宽带拨号功能,也没有进行性能优化,和商业路由器的差距还是比较大的。后续我会介绍如何用树莓派进行宽带拨号,甚至编译 openwrt 打造真正强大的路由器。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。