RPi Zero 登录到树莓派并共享网络
- 一、准备工作
- 1. 工具/材料
- 2. 安装必备工具
- 二、搭建网络环境
- 1. 配置 WiFi 网络
- 2. 配置本地 DHCP 服务
- 三、启动并登录到树莓派
- 启动树莓派,获取 IP
- SSH 远程登录
- 重设密码
- 四、共享主机网络
- 收尾
本文章为系列文章《Raspberry Pi Zero 单板配置手记》的第二篇,上一篇为《Raspberry Pi Zero 单板配置手记(一)系统镜像的准备》。
因个人需求,只对单板的树莓派 (不含显示器、摄像头等外设,此 Zero 版本也不含无线模块) 及各种基本系统配置进行叙述。
一、准备工作
1. 工具/材料
- 树莓派 Zero(单板,不带无线模块)
- 先前已配置好的 TF 卡(请参考上一篇文章)
- USB-microUSB 数据线(供电/连接电脑用,至少能承载 1A 电流)
- 能联网的电脑,Linux 系统
- 利用 WiFi 网络连接树莓派
- 树莓派所用的无线网卡(接树莓派上,若树莓派具有无线模块,则无需额外准备)
- 电脑所用的支持 AP 模式的无线网卡(接电脑上,若所在区域有 WiFi 则无需准备)
- 利用 USB 数据线连接树莓派
- 额外的 USB-microUSB 数据线(非必需)
2. 安装必备工具
hostapd
用于建立 WiFi 网络isc-dhcp-server
用于搭建本地 DHCP 服务
$ sudo apt install --no-install-recommends -y \
hostapd isc-dhcp-server
二、搭建网络环境
无论是利用 WiFi 网络还是 USB 连接树莓派,均需一番配置过程。
1. 配置 WiFi 网络
如果区域内有现有的 WiFi 网络,则可跳过此小节,但提前应在 TF 卡中 wpa_supplicant.conf
文件配置好所连的 WiFi 网络。
要想利用无线网络连接,我们先要建立一个 WiFi。我们将利用 hostapd
来进行有关操作。
找到并设置网卡
先不连接无线网卡,在电脑上打开终端,输入命令
$ ifconfig -a | egrep '^[^ ]*:'
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
在命令的输出内容,可以看到当前已连接的网络接口,此时再插入支持 AP 模式的无线网卡,再次执行相同命令
$ ifconfig -a | egrep '^[^ ]*:'
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
wlan1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
相比上一次输出,新增的网络接口,即为此设备接口,在本例中,为 wlan1
,部分系统中显示可能为 wlx????????????
,问号部分为网卡的 MAC 地址。
若系统中使用 NetworkManager,为了避免其在之后的过程中造成影响,我们先取消该设备的自动管理,其中 wlan1
替换成自己的设备接口名称
$ sudo nmcli d se wlan1 managed no # 让 NetworkManager 不再自动管理 wlan1
配置 hostapd
新安装的 hostapd
需要进行两样配置,一个是默认的配置文件路径,一个是 WiFi 网络的配置。
使用文本编辑器编辑 /etc/default/hostapd
文件
# 找到 DAEMON_CONF 该行,取消注释并按此修改,或者新起一行,键入如下内容
DAEMON_CONF="/etc/hostapd/hostapd.conf"
然后切换到 /etc/hostapd/
目录,编辑其下的 hostapd.conf
文件。若此文件不存在,则运行以下命令
$ gunzip -cdk /usr/share/doc/hostapd/examples/hostapd.conf.gz | sudo tee /etc/hostapd/hostapd.conf
此文件为示例文件,默认包含大量的注释内容,可用如下命令剥离所有注释。
egrep -v '^#|^$' /etc/hostapd/hostapd.conf | sudo tee /etc/hostapd/hostapd.conf
逐一编辑如下内容,找到对应的行,若无,则手动新起对应的行
# 设置网络接口,wlan1 改成自己的网卡接口名称
interface=wlan1
# 设置 SSID(WiFi 名称)
ssid=Test_Wifi
# 设置所在国家
country_code=CN
# 设置工作信道(按照网络环境自行选取,若不清楚可保持原样)
channel=1
# 设置 WiFi 加密方式 WPA2
wpa=2
# 设置 WiFi 密码(强度一定要足够)
wpa_passphrase=Test_Password
# 设置密钥管理方案及认证方案
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
# 禁用 WPS 以避免攻击
wps_state=0
文件中,ssid
和 wpa_pairwise
两项设置必须和之前在树莓派中设置的无线网络名称、密码一致,若不一致,请修改名称和密码一致,或参考篇一对应部分,重新修改 wpa_supplicant.conf
文件。
保存文件,启动 hostapd
服务
$ sudo systemctl unmask hostapd # 作者电脑上 hostapd 服务被 masked 掉了
$ sudo systemctl restart hostapd # 启动/重启 hostapd 服务
若没有错误提示,则服务应当启动成功,可用手机或其他设备搜索下 WiFi 网络,在本例中,我可以找到一个名为 Test_Wifi
的无线网,则无线网络配置成功。
2. 配置本地 DHCP 服务
无论是自行搭建的 WiFi 网络,还是打算利用 USB 与树莓派通讯,均需要搭建 DHCP 服务,才能正常连接。
若使用现有网络,则无需配置本地 DHCP 服务,可跳过此小节。
本例中,我们使用 isc-dhcp-server
来搭建 DHCP。
首先编辑文件 /etc/dhcp/dhcpd.conf
,若此文件不存在,则新建。按照如下内容进行配置
# 设置地址租期
default-lease-time 600;
max-lease-time 7200;
# 关闭 DDNS 更新
ddns-update-style none;
# 唯一 DHCP 服务器,设置以忽略局域网中可能存在的其他 DHCP 服务器
authoritative;
# 在文件末尾声明新的子网
# 本例中使用主机 IP 为 10.0.1.1,子网掩码 255.255.255.0,范围 10.0.1.100 ~ 10.0.1.200
# 本例中,主机所连网络网关地址为 10.2.2.1,DNS 服务器地址为 10.2.2.1
subnet 10.0.1.0 netmask 255.255.255.0 {
# 设置子网范围
range 10.0.1.100 10.0.1.200;
# 设置本地网关和路由主机为本机
option routers 10.0.1.1;
# 设置局域网的 DNS 服务器
# 可用 nmcli 命令查看系统所用的 DNS 服务器设置
# 若不清楚,可填 114.114.114.114 或 8.8.8.8
option domain-name-servers 10.2.2.1;
# 设置广播地址
option broadcast-address 10.0.1.255;
}
要想完全配置 DHCP 服务器,还需要修改默认配置文件中的接口名称,若使用 USB 进行连接,则此接口名称暂时未知。故我们将其放到最后。
接下来编写一个启动 DHCP 服务的 bash 脚本。将其保存为 start_dhcp
$ cat << EOF > start_dhcp
#!/bin/bash
if [ "x\$1" == "x" ]; then
echo "Usage: [sudo] \$0 <interface_name>"
exit 1;
fi
type nmcli && nmcli d se \$1 managed no
ifconfig \$1 10.0.1.1 netmask 255.255.255.0 up -dynamic
sleep 1
systemctl restart isc-dhcp-server
EOF
$ chmod a+x start_dhcp # 为脚本添加可执行权限
若使用 USB 连接,则跳过剩下的部分,直接参考“三、启动并登录到树莓派”,启动 DHCP 的过程将放到启动树莓派之后。
若使用 WiFi 连接,则接口名称同之前用来建立 WiFi 的网络接口,本例中是 wlan1
,编辑文件 /etc/default/isc-dhcp-server
# 设置 DHCP 服务所用的接口名称
INTERFACESv4="wlan1"
然后启动 DHCP 服务
$ sudo ./start_dhcp wlan1
三、启动并登录到树莓派
启动树莓派,获取 IP
-
使用 WiFi 网络连接
若使用的是现有的 WiFi 网络,则电脑应提前登录到对应网络中。
连接好线路并插入 TF 卡,如图所示
作者使用的 Zero 不带无线模块,因此需要单接一个无线网卡,如图使用 OTG 接口连接了一个 USB 无线网卡。
注意电路板上两个 micro USB 端口有所不同,一个有
USB
标识,是数据接口,可连接 USB 设备;另一个有PWR IN
标识,仅能供电而无法传输数据。USB 设备一定要接到标有USB
的端口上面。确定接好后,将供电线插入手机充电器然后接电,或插入到电脑的 USB 接口,树莓派 Zero 所需电流较小,仅凭电脑即可满足供电需求。
若使用现有网络,则电脑端应访问 WiFi 路由器的管理页面,等待新设备的接入,得到设备 IP 地址。
若使用的是自建的网络,则电脑端输入
$ watch 'arp -n | grep -v incomplete'
然后等待出现一个新的 IP 地址,对应的 MAC 地址应该与树莓派所使用的网卡,或其板载的无线模块 MAC 地址相符。
在本例中,假设最终得到的 IP 地址为
10.0.1.100
。 -
使用 USB 连接
连接好线路并插入 TF 卡,如图所示
仅需要一根 USB-microUSB 数据线,插入到传输数据的 micro USB 口即可。
当然供电口也可以接额外的供电线,这样与电脑的连接可随时断开,而不影响树莓派的正常运行。先不与电脑连接,在终端中输入
$ watch "ifconfig -a | egrep '^[^ ]*:'"
然后将数据口处的数据线另一端插入电脑 USB 接口中。若接了额外的供电线,则另一根线可连接充电器,也可以接入到电脑中。
此过程中,注意电脑的终端中显示内容更新。当出现新的网络接口时,记住该名称,按 Ctrl+C 终止 watch 命令。
在本例中,作者得到的最新输出是
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 eth1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
其中
eth1
为新增的网络接口名称,则快速编辑文件/etc/default/isc-dhcp-server
,设置其INTERFACESv4=
的值为eth1
,即INTERFACESv4="eth1"
。保存后运行命令$ sudo ./start_dhcp eth1 # 在 eth1 上启动 DHCP 服务器
紧接着,部分系统上可能看到网络提示,正在连接,或已建立有线连接。
同样,监视arp
命令,等待树莓派分配得到一个 IP 地址$ watch 'arp -n | grep -v incomplete'
在本例中,假定最终得到的 IP 地址为
10.0.1.100
。
SSH 远程登录
无论是基于何种方式,我们目前已经获取到了树莓派的 IP 地址,本例中为 10.0.1.100
。
在终端中输入
$ ssh pi@10.0.1.100 # 以用户 pi 登录到树莓派
若是第一次登录,会提示
The authenticity of host '10.0.1.100 (10.0.1.100)' can't be established.
ECDSA key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no)?
此时输入 yes
并回车即可。
Raspberry Pi OS 的默认密码为 raspberry
,输入密码后回车。若看到如下的提示符,我们便已成功登录至树莓派
pi@raspberrypi:~ $
重设密码
在开启 ssh 服务的同时,若仍使用默认密码,会有安全隐患。
接下来,我们为树莓派重新设置用户密码和 root 用户的密码。
pi@raspberrypi:~ $ passwd # 为当前用户 pi 重新设置密码
Changing password for pi.
Current password: # 此时输入原密码 raspberry 即可,不会显示,需要终止时可按 Ctrl+C
New password: # 输入新密码,不会显示
Retype new password: # 再次输入同样的新密码
passwd: password updated successfully
pi@raspberrypi:~ $ sudo passwd # 为 root 用户重新设置密码
New password: # 此时不需要验证密码,直接输入新密码即可
Retype new password: # 重复新密码
passwd: password updated successfully
至此,我们已成功登录到树莓派,并成功设置用户密码。
四、共享主机网络
当我们通过自建的 WiFi 或者 USB 数据线连接到树莓派时,此时树莓派仅和主机进行连接通讯,还无法访问到外界网络。
若使用现有的 WiFi 网络连接,则可忽略此部分。
我们在之前的配置中,已顺便为树莓派设置好了 DNS 解析和局域网网关。现在仅需要开启主机 Linux 系统上的流量转发即可。
基于 Debian 的 Linux 系统中,开启流量转发的方式是写 /proc/sys/net/ipv4/ip_forward
文件,同时开启防火墙的 nat 转发。
在主机的终端中输入
$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
$ sudo iptables -t nat -I POSTROUTING -s 10.0.1.0/24 -j MASQUERADE
此时树莓派已可以通过主机共享网络连接,ssh 终端中可输入命令以验证连接可用性
pi@raspberrypi:~ $ ping blog.csdn -c 1 >/dev/null && echo Network OK.
接下来,你可以在 ssh 中对树莓派进行一系列的操作,包括更新软件包,安装其他工具等,这些问题在本文中不再赘述。
收尾
继昨天花长时间配置完树莓派的系统映像后,今天我们成功实现远程登录树莓派并共享主机网络。实际服务配置中,可能会出现不好解决的问题,可以在下方评论区评论,或者邮箱联系作者。
虽目前基本配置成功,但树莓派的无线网络连接还是不方便,我们使用 wpa_supplicant
只是配置了固定的网络,不够灵活,在下一篇文章中,我们会使用 NetworkManager
管理网络连接。
接下来是本系列文章的第三篇《Raspberry Pi Zero 单板配置手记(三)使用 NetworkManager 管理网络连接》。
更多推荐
Raspberry Pi Zero 单板配置手记(二)登录到树莓派并共享网络
发布评论