基于反向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
三、验证步骤
- 在跳板机上执行
netstat -tulpn | grep 1702,确认1702端口被sshd监听(说明反向隧道已建立) - 在跳板机本地尝试连接
localhost:1702,如果能通,说明隧道映射正常 - 从你的本地机器尝试连接
jumpserver_ip:5555,如果还是不通,检查跳板机的防火墙是否拦截了5555端口,或者autossh隧道是否异常
备注:内容来源于stack exchange,提问作者Skee
相关产品推荐
相关产品推荐

