百相网

搜索
查看: 216|回复: 20

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

[复制链接]

1

主题

3

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2023-3-26 16:04:55 | 显示全部楼层 |阅读模式
树莓派共享 WiFi 在线配置工具已上线,一键共享 WiFi,再也不用手打指令啦。
戳:树莓派共享 WiFi 在线配置工具


<hr/>概述

树莓派是一款来源于英国慈善组织“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,24hdhcp-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 打造真正强大的路由器。
参考资料


  • 树莓派 4B 安装和启动
  • Setting up a Raspberry Pi as a Wireless Access Point
  • hostapd
  • WLAN信道列表
  • Man page of DNSMASQ
  • iptables详解:图文并茂理解iptables

<hr/>欢迎关注专栏,获取更多树莓派硬核资料和教程。
回复

使用道具 举报

0

主题

5

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2023-3-26 16:05:14 | 显示全部楼层
你好,我的树莓派安装了osmc,然后在docker中运行了openwrt,想在docker中的op识别双网卡(有线eth0和无线wlan0)来开热点做路由器。能交流指导下吗,谢谢!
回复

使用道具 举报

1

主题

3

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2023-3-26 16:06:12 | 显示全部楼层
我还没真正安装 OpenWrt 玩过,交流可以,指导还谈不上哈哈..
回复

使用道具 举报

2

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2023-3-26 16:06:43 | 显示全部楼层
我想问下,Docker容器里有办法直通宿主(树莓派)的外置usb无线网卡,并且开启ap模式发射wifi信号吗?另外我看有人说运行的时候参数--net=host可能可以,但是我一把op运行host模式容器就跑不起来,跪了_(:3」∠)_
回复

使用道具 举报

5

主题

11

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2023-3-26 16:07:10 | 显示全部楼层
按理说,如果op能正确识别到usb无线网卡,他就能正确启动热点了,因为我用把固件直接刷为op直接使用的时候,op能直接识别使用无线网卡用于发射热点。现在docker容器里的op就无法识别。不知是不是docker设计的问题,或者我使用姿势没对
回复

使用道具 举报

1

主题

5

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2023-3-26 16:07:17 | 显示全部楼层
docker 里面的环境和宿主环境是资源隔离的。所以正常情况下,docker 里面的 op 没法访问到宿主机的无线网卡硬件资源。你可以试下启动 docker 的时候加 --privileged 或 --device,允许 op 访问宿主机硬件资源。我找到有类似的解决方案,可参考下 https://stackoverflow.com/questions/30059784/docker-access-to-raspberry-pi-gpio-pins
回复

使用道具 举报

2

主题

5

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2023-3-26 16:07:47 | 显示全部楼层
我试了--privileged ,然后进容器里的op,执行lsusb里确实能看到网卡芯片。但是op执行iwconfig、iw list的时候找不到无线网卡。现在还是怀疑是不是docker对网络方面的隔离,导致无法直通无线网卡。试过net=host,加 --privileged,op却跑不起来
回复

使用道具 举报

3

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2023-3-26 16:08:00 | 显示全部楼层
这一套操作是实现了什么功能?把树莓派变为从路由器,桥接上网?树莓派和路由器怎么连接的?网线吗?
回复

使用道具 举报

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2023-3-26 16:08:52 | 显示全部楼层
eth0 的网络共享给 wlan0 作为热点。不是桥接,是 NAT 网络地址转换。
回复

使用道具 举报

1

主题

4

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2023-3-26 16:09:28 | 显示全部楼层
速度很慢吧,我安装好配置后,2g版本的4b实际速度只有5
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|百相网

GMT+8, 2024-12-27 05:00 , Processed in 0.088077 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表