15

树莓派做无线热点

 3 years ago
source link: https://chenjiehua.me/linux/raspberry-pi-wireless-access-point.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

树莓派做无线热点 

虽然之前我们使用树莓派成功刷入 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):

Default
sudo dd if=2019-07-10-raspbian-buster.img of=/dev/disk2 bs=1m

然后启动树莓派,因为 ssh 默认是关闭的,第一次使用需要外接显示器和键盘来处理一下。

使用默认账户 pi 和默认密码 raspberry 登陆系统,然后配置树莓派:

Default
pi@raspberrypi:~/log $ sudo raspi-config

选择 Interfacing Options -> SSH -> YES,然后看一下树莓派的 ip 地址:

Default
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 的源,参考科大源

Default
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

修改之后大概是这样子:

Default
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 的源,参考科大源

Default
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

修改之后大概是这样子:

Default
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
Default
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口即可被识别:

Default
ifconfig
# 可以看到接口是 wlan0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       ......

设置无线热点,我们可以有两种方案:

  • 设置为独立的NAT网络
  • 桥接原来的网络

NAT网络

要配置为独立的NAT网络,我们主要使用 DNSMasq 和 HostAPD 这两个软件,直接安装:

Default
sudo apt install dnsmasq hostapd

接着给 wlan0 配置一个静态 IP,假设我们使用 192.168.2.x 的网段,修改 dhcpcd 配置:

Default
sudo vim /etc/dhcpcd.conf
# 增加下面的配置
interface wlan0
    static ip_address=192.168.2.1/24
    nohook wpa_supplicant

 然后重启一下 dhcpcd 让 wlan0 的配置生效:

Default
sudo service dhcpcd restart

配置 DHCP 服务器(dnsmasq)

dnsmasq默认的配置文件有详细的注释说明,我们这里提供一个最简单的配置:

Default
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:

Default
sudo services dnsmasq restart

配置无线热点(hostapd)

首先给 hostapd 创建一个配置文件:

Default
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)

然后告诉系统我们使用这个配置文件:

Default
sudo vim /etc/default/hostapd
# 修改 DAEMON_CONF,注意去掉前面的注释 #
DAEMON_CONF="/etc/hostapd/hostapd.conf"

然后开启 hostapd:

Default
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start shotapd

配置路由转发

修改 /etc/sysctl.conf 文件:

Default
sudo vim /etc/sysctl.conf
# 去掉注释
net.ipv4.ip_forward=1

修改 iptables:

Default
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

保存 iptables 规则:

Default
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

在开机的时候加载:

Default
sudo vim /etc/rc.local
# 在 exit 0 之前加上这一行
iptables-restore < /etc/iptables.ipv4.nat

至此就大功告成了,重启树莓派,手机上应该可以搜到新建的热点信号并可以上网。

在上面的方式中,手机连上后可以看到分配到的ip地址是 192.168.2.x,它跟我们路由器的ip并不在同一个NAT网络中。如果想要在同一个网络中,可以使用桥接网络的方式。

配置桥接网络的wifi热点,我们需要使用 hostapd 和 bridge-utils:

Default
sudo apt install hostapd bridge-utils

因为我们要将 eth0 和 wlan0 进行桥接,所以不需要 dhcpcd 为这两个接口分配 ip 地址:

Default
sudo vim /etc/dhcpcd.conf
# 添加到文件末尾,但是在 interface 前
denyinterfaces wlan0
denyinterfaces eth0

然后创建一个 bridge:

Default
sudo brctl addbr br0

连接 eth0:

Default
sudo brctl addif br0 eth0

hostapd 的配置文件和之前的类似,只需要额外指定 bridge=br0 并去掉 driver=xxx:

Default
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 就可以了:

Default
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK