树莓派做无线热点
目录
虽然之前我们使用树莓派成功刷入 OpenWrt 来做路由器使用,不过娱乐性却显得比较单一,无法方便地安装其他各种软件,从源码编译也会更加麻烦(经常是缺少各种头文件)。因此,今天我们决定使用官方的 Raspbian 系统来设置树莓派作为一个无线热点(Access Point)。
安装系统
首先从官网下载 Raspbian 系统,有三个版本可供下载选择:
- Raspbian Buster with desktop and recommended software(1.9G)
- Raspbian Buster with desktop(1.1G)
- Raspbian Buster Lite(0.4G)
不同版本的区别在名字上已经写得很清楚了,大家可以自己选择。考虑到只是为了做一个无线热点,我们可以选择第三个版本 Lite 来减少树莓派的散热。
下载镜像之后解压,使用 dd 命令将镜像写入到 tf 卡(Windows 可以用 win32diskimager):
sudo dd if=2019-07-10-raspbian-buster.img of=/dev/disk2 bs=1m
然后启动树莓派,因为 ssh 默认是关闭的,第一次使用需要外接显示器和键盘来处理一下。
使用默认账户 pi 和默认密码 raspberry 登陆系统,然后配置树莓派:
pi@raspberrypi:~/log $ sudo raspi-config
选择 Interfacing Options -> SSH -> YES,然后看一下树莓派的 ip 地址:
pi@raspberrypi:~/log $ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.7 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::85a6:2e71:a32a:e02b prefixlen 64 scopeid 0x20<link> ether b8:27:eb:10:96:14 txqueuelen 1000 (Ethernet) RX packets 52535 bytes 62498965 (59.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 36637 bytes 4649690 (4.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 1708 bytes 234566 (229.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1708 bytes 234566 (229.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
然后在我们的电脑上就可以通过 ssh 来登陆啦。
修改 apt 源
考虑到国内特殊的网络环境,我们可以将树莓派的 apt 软件源修改一下,提高以后软件下载速度。
先修改 Raspbian 的源,参考科大源:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|raspbian.raspberrypi.org|mirrors.ustc.edu.cn/raspbian|g' /etc/apt/sources.list
修改之后大概是这样子:
cat /etc/apt/sources.list deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
再修改 Raspberrypi 的源,参考科大源:
sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak sudo sed -i 's|//archive.raspberrypi.org|//mirrors.ustc.edu.cn/archive.raspberrypi.org|g' /etc/apt/sources.list.d/raspi.list
修改之后大概是这样子:
cat /etc/apt/sources.list.d/raspi.list deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ buster main deb-src http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ buster main
更新:
sudo apt update Get:1 http://mirrors.ustc.edu.cn/raspbian/raspbian buster InRelease [15.0 kB] Get:2 http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian buster InRelease [25.1 kB] Get:3 http://mirrors.ustc.edu.cn/raspbian/raspbian buster/non-free Sources [139 kB] Get:4 http://mirrors.ustc.edu.cn/raspbian/raspbian buster/main Sources [11.3 MB] Get:5 http://mirrors.ustc.edu.cn/raspbian/raspbian buster/rpi Sources [1,132 B] Get:6 http://mirrors.ustc.edu.cn/raspbian/raspbian buster/contrib Sources [78.5 kB] Get:7 http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian buster/main Sources [80.1 kB] Get:8 http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian buster/main armhf Packages [234 kB]
配置无线热点
为了设置无线热点,我们的树莓派必须拥有一个无线网卡,如果 3B 以上型号则可以使用板载的 wifi 模块,而我手上的是一个2B+的树莓派,因此需要一个USB无线网卡。刚好也有一个闲置的迷你网卡 RT5370,插到USB口即可被识别:
ifconfig # 可以看到接口是 wlan0 wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ......
设置无线热点,我们可以有两种方案:
- 设置为独立的NAT网络
- 桥接原来的网络
NAT网络
要配置为独立的NAT网络,我们主要使用 DNSMasq 和 HostAPD 这两个软件,直接安装:
sudo apt install dnsmasq hostapd
接着给 wlan0 配置一个静态 IP,假设我们使用 192.168.2.x 的网段,修改 dhcpcd 配置:
sudo vim /etc/dhcpcd.conf # 增加下面的配置 interface wlan0 static ip_address=192.168.2.1/24 nohook wpa_supplicant
然后重启一下 dhcpcd 让 wlan0 的配置生效:
sudo service dhcpcd restart
配置 DHCP 服务器(dnsmasq)
dnsmasq默认的配置文件有详细的注释说明,我们这里提供一个最简单的配置:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak sudo vim /etc/dnsmasq.cnf # 配置内容 interface=wlan0 dhcp-range=192.168.2.2,192.168.2.20,255.255.255.0,24h
然后重启一下 dnsmasq:
sudo services dnsmasq restart
配置无线热点(hostapd)
首先给 hostapd 创建一个配置文件:
sudo vim /etc/hostapd/hostapd.conf # 配置内容 interface=wlan0 driver=nl80211 ssid=热点名称 hw_mode=g channel=7 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
如果我们使用的是 5G 的无线网卡,可以将 hw_mode 改为 a,它的取值有4种:
- a = IEEE 802.11a (5 GHz)
- b = IEEE 802.11b (2.4 GHz)
- g = IEEE 802.11g (2.4 GHz)
- ad = IEEE 802.11ad (60 GHz)
然后告诉系统我们使用这个配置文件:
sudo vim /etc/default/hostapd # 修改 DAEMON_CONF,注意去掉前面的注释 # DAEMON_CONF="/etc/hostapd/hostapd.conf"
然后开启 hostapd:
sudo systemctl unmask hostapd sudo systemctl enable hostapd sudo systemctl start shotapd
配置路由转发
修改 /etc/sysctl.conf 文件:
sudo vim /etc/sysctl.conf # 去掉注释 net.ipv4.ip_forward=1
修改 iptables:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
保存 iptables 规则:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
在开机的时候加载:
sudo vim /etc/rc.local # 在 exit 0 之前加上这一行 iptables-restore < /etc/iptables.ipv4.nat
至此就大功告成了,重启树莓派,手机上应该可以搜到新建的热点信号并可以上网。
桥接网络
在上面的方式中,手机连上后可以看到分配到的ip地址是 192.168.2.x,它跟我们路由器的ip并不在同一个NAT网络中。如果想要在同一个网络中,可以使用桥接网络的方式。
配置桥接网络的wifi热点,我们需要使用 hostapd 和 bridge-utils:
sudo apt install hostapd bridge-utils
因为我们要将 eth0 和 wlan0 进行桥接,所以不需要 dhcpcd 为这两个接口分配 ip 地址:
sudo vim /etc/dhcpcd.conf # 添加到文件末尾,但是在 interface 前 denyinterfaces wlan0 denyinterfaces eth0
配置桥接
然后创建一个 bridge:
sudo brctl addbr br0
连接 eth0:
sudo brctl addif br0 eth0
配置热点
hostapd 的配置文件和之前的类似,只需要额外指定 bridge=br0 并去掉 driver=xxx:
interface=wlan0 bridge=br0 ssid=热点名称 hw_mode=g channel=7 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 就可以了:
sudo systemctl unmask hostapd sudo systemctl enable hostapd sudo systemctl start hostapd
参考:
评论