树莓派无显示器方案-串口终端与网口直连终端

1. 概览

本文满足以下树莓派使用场景:

  1. 无显示器,无键盘鼠标,无小型路由器。
  2. 有Wi-Fi网络,但无Wi-Fi网络管理员权限(校园网/企业网),树莓派需要连接到互联网。
  3. 有USB转TTL串口模块。电脑通过串口登陆树莓派终端。
  4. 有一根网线。电脑可以通过网口直连树莓派。
  5. 整套设备携带到没有网络的地方也可用。
  6. 不影响笔记本网口正常功能。

2. 配置串口终端

  • 硬件:树莓派5
  • 系统:Raspbian或Ubuntu Server 24.04

使用树莓派的Imager软件烧录完SD卡后,打开SD卡,boot盘,找到config.txt文件,在尾部添加:

复制代码
enable_uart=1
dtoverlay=uart0
dtparam=uart0_console

前两行开启串口Shell终端,可以登录控制台。第三行开启串口内核日志。

引脚为上图中的 GPIO14, GPIO15,电平为3.3V。接好USB转串口(TXD接RXD,RXD接TXD,GND接GND),插入SD卡。上电,等待一段时间就可以从串口看到内核启动日志。并且可以输入用户名、密码登录终端。

3. 配置网线直连终端

网上有很多教程是在电脑上把Wi-Fi网络共享给网口,这样电脑就变成一个路由器,树莓派网口接到电脑上就可以访问互联网。

但是本文将采用相反的方案。不修改电脑的网口配置,而是在树莓派的网口启动一个DHCP server,把树莓派变成路由器。

(1) 给树莓派网口配置静态IP

不同操作系统的配置不同。例如Ubuntu桌面版有Network Manager,而Server版没有。这里只展示Ubuntu Server版的配置。Ubuntu Server 24.04通过netplan配置网口。

首先查看网口名称:

bash 复制代码
ip a

以太网口名通常为eth0

检查现有的Netplan配置

复制代码
sudo cat /etc/netplan/*.yaml

我这里的文件名是50-cloud-init.yaml

给网口配置静态ip:

bash 复制代码
sudo nano /etc/netplan/50-cloud-init.yaml
复制代码
network:
  version: 2
  wifis:
    wlan0:
      optional: true
      dhcp4: true
      access-points:
        "Wi-Fi SSID":
          auth:
            key-management: "psk"
            password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  
  ethernets:
    eth0:
      addresses: [192.168.10.1/24]
      routes:
       - to: 192.168.10.0/24
         via: 192.168.10.1

其中wifis的部分可能在SD卡烧录完毕,配置镜像的时候就已经输入好密码了,这部分不用动。

增加一个和wifis同级别的ethernets部分。配置静态IP地址为192.168.10.1/24注意不要和你的校园网/企业网的网段冲突。如果冲突可以换成其他网段。

应用配置

bash 复制代码
sudo netplan apply

(2) 在树莓派网口启动DHCP服务器

安装dnsmasq

bash 复制代码
sudo apt update
sudo apt install dnsmasq

配置dnsmasq

bash 复制代码
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak

sudo nano /etc/dnsmasq.conf
复制代码
port=0                  # 禁用 DNS 服务
interface=eth0          # 仅监听 eth0
dhcp-range=192.168.10.100,192.168.10.200,255.255.255.0,24h
dhcp-option=option:router,192.168.10.1
dhcp-option=option:dns-server,114.114.114.114  # 指定外部 DNS

这里我们只希望dnsmasq启动DHCP server,而不需要它帮我们代理DNS。因此这里需要port=0

重启dnsmasq

bash 复制代码
sudo systemctl restart dnsmasq

(3) 通过网口ssh直连

重启树莓派

bash 复制代码
sudo reboot

重启后,用电脑的网口应该就可以访问树莓派了:

bash 复制代码
# 优先通过密码来登录
ssh -o PreferredAuthentications=password [email protected]

4. 笔记本电脑网络接口优先级

以上配置完成后,可能有些笔记本连上网口后会无法连接互联网。这是因为以太网口的默认路由优先级比Wi-Fi网卡高,访问互联网的请求都走到树莓派去了。

我们可以修改笔记本的路由表,使得流量优先路由到Wi-Fi网卡。最终效果:

  1. 网线 → 树莓派(eth0,IP: 192.168.10.1),用于 SSH。
  2. Wi-Fi → 路由器(互联网),用于上网。
  3. 不连接树莓派时,网口仍然保持正常的功能。

这里只展示Ubuntu笔记本电脑的配置方式:

(1) 查看当前路由

以下内容在Ubuntu笔记本电脑,本地执行:

bash 复制代码
ip route

可能会看到以下内容:

复制代码
default via 192.168.10.1 dev enp0s31f6 proto dhcp metric 20500 
default via 192.168.2.1 dev wlp0s20f3 proto dhcp metric 20600 
169.254.0.0/16 dev enp0s31f6 scope link metric 1000 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown

其中Wi-Fi网卡是wlp0s20f3,以太网口是enp0s31f6。Wi-Fi网口优先级比以太网口低。

(2) 修改默认路由

Ubuntu桌面版有Network Manager,可以比较方便修改优先级。

bash 复制代码
ip a               # 确认接口名称(如 wlan0、eth0)
ip route           # 查看当前路由表(注意默认路由的 metric)

检查Network Manager连接名称:

bash 复制代码
nmcli connection show

降低 Wi-Fi 的 metric(数值越小优先级越高)

bash 复制代码
sudo nmcli connection modify "MyWiFi" ipv4.route-metric 100   # Wi-Fi 优先级更高

提高有线连接的 metric(数值越大优先级越低)

bash 复制代码
sudo nmcli connection modify "有线连接名称" ipv4.route-metric 200

重新激活连接:

bash 复制代码
sudo nmcli connection up "MyWiFi"
sudo nmcli connection up "有线连接名称"

验证优先级

复制代码
$ ip route
default via 192.168.2.1 dev wlp0s20f3 proto dhcp metric 20100 
default via 192.168.10.1 dev enp0s31f6 proto dhcp metric 20200 
169.254.0.0/16 dev enp0s31f6 scope link metric 1000 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
...
  • 关键点 :Wi-Fi 的 metric(20100)比有线(20200)更小,因此优先级更高。

如此便可实现网线ssh直连树莓派,同时笔记本通过Wi-Fi访问互联网不受影响。