我正在为 Raspberry PI 3 开发自定义 yocto Linux,并尝试使用 SSH 建立 WIFI 连接。但是,当尝试从我的 PC(Ubuntu 19.10、SSH OpenSSH_8.0p1 Ubuntu-6build1、OpenSSL 1.1.1c 2019 年 5 月 28 日)连接到运行 Dropbear v2019.78 的 PI 时,连接尝试超时。但只有当我通过 SSH 和通过 尝试时才会发生这种情况。wlan0
其他 TCP/IP 流量有效,并且也使用相同的参与者,但使用eth0
。由于这是为机器人准备的,所以我宁愿不使用系绳……
为了尝试并调试这个问题,我
- 启用串行控制台,以便我可以在 PI 上工作
- 禁用 eth0
- 在 PI 上启动 tcpdump(ip.host == 192.168.0.105)
- 在 PC 上启动 tcpdump(ip.host == 192.168.0.106)
- 使用用 Python 编写的非常简单的 TCP/IP 套接字示例(取自https://realpython.com/python-sockets/#echo-server) 来验证我是否确实可以通信。传输成功。我知道这个例子有些欠缺(没有合适的协议等),但这不是重点。它只是足够好用。PI 运行监听端口 2222 的服务器。
- 尝试 SSH 连接,但超时了。
我将生成的 PCAP 过滤为仅包含 TCP,因为还有其他信息(例如 Dropbox 发现)我认为并不重要,并且可能会泄露信息。在主机端(enp4s0-tcp-and-pi.pcap),我还进行了过滤,以ip.host == 192.168.0.105
仅包含发往 PI 的任何流量。
关于我的设置还有一点需要注意:我使用 TP-Link 路由器,PC 连接到该路由器的 LAN 端口,并为 PI 提供 2.4GHz WIFI。因此,两者都属于同一子网,无需配置任何特殊路由或任何东西。
我还停止了 dropbear 守护进程,并调整了我的 Python 代码以使用端口 22。它起作用了。
我对 TCP 的内部工作原理了解不多,因此无法真正理解我在这里看到的内容。欢迎提供任何见解。
https://www.dropbox.com/s/5o4rqr5zdws2wq7/wlan0-tcp-only.pcap?dl=0
https://www.dropbox.com/s/amypjtk1nvja4qb/enp4s0-tcp-and-pi.pcap?dl=0
输出(由于 DHCP 导致 IP 地址不同):ssh -vvv [email protected]
14:27 $ ssh -vvv [email protected]
OpenSSH_8.0p1 Ubuntu-6build1, OpenSSL 1.1.1c 28 May 2019
debug1: Reading configuration data /home/deets/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: resolve_canonicalize: hostname 192.168.0.102 is address
debug2: ssh_connect_direct
debug1: Connecting to 192.168.0.102 [192.168.0.102] port 22.
debug1: connect to address 192.168.0.102 port 22: Connection timed out
ssh: connect to host 192.168.0.102 port 22: Connection timed out
答案1
查看 PCAP 跟踪,Pi 实际上向连接请求发送了一个答案(标记为SYN, ACK
,例如 中的数据包编号 14 wlan0-tcp-only.pcap
),但该答案并未显示在客户端跟踪中。因此,问题出在从 Pi 返回 PC 的途中。
我无法根据给出的信息查明确切的问题,但有以下几点需要检查:
- 检查 PC 上的防火墙是否未过滤流量
- 将 Pi 放置在靠近 WIFI 接入点/路由器的位置