You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于反向SSH隧道的树莓派VNC远程连接方案可行性咨询及配置问题排查

基于反向SSH隧道的树莓派VNC远程连接方案可行性咨询及配置问题排查

嘿,你的整体思路完全可行,而且不需要在树莓派上额外配置iptables转发,咱们一步步理清楚问题所在和正确的配置方式:

一、方案可行性确认

你的核心逻辑没问题:用autossh在树莓派上建立反向SSH隧道,把树莓派的VNC端口(5901)映射到跳板机的1702端口,再通过跳板机的iptables把外部访问5555端口的流量转发到1702端口。这里完全不需要树莓派的VNC端口和autossh的本地端口一致,反向隧道本身就完成了端口的跨机器映射。

二、当前配置的问题排查

你现在的iptables配置里,POSTROUTING那条规则是多余的,甚至会干扰连接。咱们来调整成正确的配置步骤:

1. 先确保autossh反向隧道正确建立

树莓派上的autossh命令应该类似这样(替换成你的跳板机用户名和IP):

autossh -M 20000 -N -R 1702:localhost:5901 jumpserver_user@jumpserver_ip

参数说明:

  • -M 20000:autossh用来监控隧道状态的心跳端口,选一个未被占用的端口即可
  • -N:只建立隧道,不执行远程命令
  • -R 1702:localhost:5901:将跳板机的1702端口,反向映射到树莓派本地的5901端口(VNC服务端口)

2. 跳板机的正确配置步骤

(1)开启IP转发

首先要确保跳板机允许IP转发,临时生效可以执行:

echo 1 > /proc/sys/net/ipv4/ip_forward

如果要永久生效,编辑/etc/sysctl.conf,把net.ipv4.ip_forward = 1的注释去掉,然后执行:

sudo sysctl -p

(2)配置iptables规则

只需要保留PREROUTING规则,再补充一条INPUT规则放行5555端口:

# 将外部访问5555端口的流量转发到本地1702端口
sudo iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination 127.0.0.1:1702

# 允许外部访问5555端口(如果跳板机有防火墙限制的话)
sudo iptables -A INPUT -p tcp --dport 5555 -j ACCEPT

你之前的POSTROUTING规则没必要,因为流量已经指向跳板机本地的127.0.0.1,不需要修改源地址,这条规则反而可能导致连接异常。

(3)检查跳板机的sshd配置

如果外部还是无法连接,可能是跳板机的sshd默认限制了反向隧道的监听范围。编辑跳板机的/etc/ssh/sshd_config,找到GatewayPorts选项,设置为:

GatewayPorts yes

或者设置为clientspecified,同时把树莓派的autossh命令修改为:

autossh -M 20000 -N -R 0.0.0.0:1702:localhost:5901 jumpserver_user@jumpserver_ip

修改后重启sshd服务:

sudo systemctl restart sshd

三、验证步骤

  1. 在跳板机上执行netstat -tulpn | grep 1702,确认1702端口被sshd监听(说明反向隧道已建立)
  2. 在跳板机本地尝试连接localhost:1702,如果能通,说明隧道映射正常
  3. 从你的本地机器尝试连接jumpserver_ip:5555,如果还是不通,检查跳板机的防火墙是否拦截了5555端口,或者autossh隧道是否异常

备注:内容来源于stack exchange,提问作者Skee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 08:23:12