从零开始:树莓派共享 WiFi 秒变无线热点(树莓派路由器

概述

树莓派是一款来源于英国慈善组织“Raspberry Pi 基金会”的基于微处理器的硬件平台。核心是 Broadcom ARM 架构 CPU,可以完整运行 Ubuntu、Windows 10 IoT Core 等操作系统。

最新款的树莓派 4B 还板载了 USB 3.0 接口、千兆以太网卡、2.4/5 GHz 802.11b/g/n/ac 无线网卡等设备,性能强大,价格却足够便宜,能用来 DIY 很多东西。

这篇文章就来教大家,如何从零开始将树莓派打造成一个功能强大的无线热点。

准备

  • 宽带
  • 以太网线
  • micro SD 卡和读卡器
  • 树莓派(最好是 4B 版本)

安装 Raspbian 操作系统

安装 Raspbian 是为了给无线热点准备操作系统环境。具体步骤参考:树莓派 4B 安装和启动

最好也要把软件源指向国内,避免后续软件下载速度太慢:教你如何给树莓派更换软件源

安装配置 hostapd 服务

Hostapd 是一个运行在用户态,提供热点访问和鉴权的服务端进程。

首先安装服务

$ sudo apt install hostapd
$ sudo systemctl stop hostapd

接着,我们需要配置一下热点参数。配置文件地址在 /etc/hostapd/hostapd.conf,打开并编辑(如果没有这个文件的话,新建一个即可):

$ sudo nano /etc/hostapd/hostapd.conf

写入如下配置项。注意要根据自己的实际情况,替换 ??? 处的内容:

  • ssid: WiFi 名称,8~64 个字符,最好用英文字母,不要出现特殊字符
  • hw_mode: WiFi 网络模式,一般填 g 即可,设备支持的话可以填 a 启用 5G 频段:
    • a = IEEE 802.11a (5 GHz)
    • b = IEEE 802.11b (2.4 GHz)
    • g = IEEE 802.11g (2.4 GHz)
  • channel: 信道编号。如果上面配置了 hw_mode=g 使用 2.4G 频段,则一般填 7 即可。如果配置了 5G 频段,则信道编号有所不同,具体参考:WLAN信道列表
  • wpa_passphrase: WiFi 密码,最好用英文加数字,不要出现特殊字符
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" 字样就表示启动成功了。

配置 wlan 静态 IP

用于 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 服务

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。

配置 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 打造真正强大的路由器。

参考资料

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值