SSH,群晖(任意跳板机),frp(任意内网穿透技术) 实现对远程网络环境的访问

方案图示

image

场景分析

限制条件:不考虑使用群晖QuickConnect,不考虑使用zerotier、蒲公英之类异地组网工具

需求分析

我在家中有一台群晖,我希望身处其他地方的时候也可以访问它的控制面板和5000端口(群晖控制面板的服务端口)以外的其他内网服务,有可能的话我也希望能够访问家中的其他设备。与此同时,我希望访问的全过程保持加密。

考虑到安全需求,利用QC,frp,ngrok等内网穿透服务将面板暴露在公网上的策略被排除。

实现思路

  • 将群晖(任意跳板机)的SSH服务暴露在公网环境下,用远程设备访问公网中暴露的SSH服务。
  • 利用SSH转发请求的能力,将计算机对本地端口的访问转发成群晖对自身或其所在内网其他设备的访问。

实现流程

在看懂以下实现流程后,使用其他设备完成这一操作也是易如反掌。

条件

条件
远程设备的操作系统 Windows
跳板机的操作系统 群晖
frp服务供应商 Sakura Frp

配置过程

  1. 参考Frp供应商的教程配置(Sakura Frp的教程)基础要素

  2. 启用SSH并配置

    1. 启动 控制面板 应用,转到 应用程序 > 终端机和 SNMP > 终端机,启动 SSH 功能并记下这里的端口 (例如 22):(借用这里的图文)

    2. 在计算机上利用SSH访问群晖

  3. 允许SSH进行Tcp转发
    群晖上只用vim,所以命令中用vim作编辑器,输入sudo vim /etc/ssh/sshd_config,在编辑器中找到AllowTcpForwarding no,改为AllowTcpForwarding yes

    在我的配置文件中,这一设置在88行的位置,其他版本的群晖不能保证这一文件没有改动,但是也可以用88行来大致确定配置项的位置

  4. 穿透配置(仅为注意事项,详细流程请看frp供应商的文档(Sakura Frp的教程))

    1. 使用host网络,这样容器才能和群晖在同一网段下工作

    2. 在Frp供应商的面板创建隧道

      本地IP 填写群晖所在内网环境下的IP,端口选择22(之前记下的端口)。

连接方法

可以参考SSH端口转发的文档,详细见参考文献[4]

本方法所在的场景下仅需要使用以下命令即可

ssh -L [本地的端口]:[希望访问的ip地址]:[希望访问的端口]  -l [用户名] -p [frp映射端口] [frp映射地址]

例如 ssh -L 5001:192.168.1.4:5000 -l henryzeng -p 19870 frp_nest.cn

指的是我的计算机连接上映射到frp_nest.cn:19870上的SSH服务,将我对127.0.0.1:5001的访问转发成群晖对192.168.1.4:5000(即群晖自己的控制面板)的访问上。

在浏览器访问127.0.0.1:5001,即可访问家中的群晖。

快捷方法

对于Windows用户,没有好用的sshpass(Linux下工具),所以连接SSH服务需要手动输入密码。但是Windows提供了vbs脚本解释器,vbs恰好有模拟输入的能力,所以,可以结合这一特性编写快捷脚本。

以下是例子,照着改参数就可以达到目的。

Dim WshShell 
Set WshShell=WScript.CreateObject("WScript.Shell") 
WshShell.Run "cmd.exe"
WScript.Sleep 1500 
WshShell.SendKeys "ssh -L 5001:192.168.1.4:5000  -l henryzeng -p 19870 frp_nest.cn (连接命令,换成自己的)"
WshShell.SendKeys "{ENTER}"
WScript.Sleep 1500 
WshShell.SendKeys "密码(换成自己的)"
WshShell.SendKeys "{ENTER}"
WScript.Sleep 1000 
WshShell.Run("http://127.0.0.1:5001/ 自动打开网址,不要的话可以删除(需要的话要把端口改成与连接命令中本地端口一致的端口)")

将以上内容保存成(起个名字).vbs,双击运行即可自动模拟密码输入,完成连接后会自动打开浏览器进行访问。

参考文献

[1] 群晖 (Synology) NAS 穿透指南 | SakuraFrp 帮助文档[EB/OL]. [2023-07-12]. https://doc.natfrp.com/app/synology.html.
[2] Windows如何使用批处理命令进行SSH连接并自动输入密码_bat ssh_音程的博客-CSDN博客 (10条消息) (完全解决)[EB/OL]. [2023-07-10]. https://blog.csdn.net/qq_43391414/article/details/120575748.
[3] linux SSH各配置项解释 - zqifa - 博客园[EB/OL]. [2023-07-12]. https://www.cnblogs.com/zqifa/p/ssh-2.html.
[4] SSH 端口转发玩转_ssh 本地端口转发_zhouguoqionghai的博客-CSDN博客 (10条消息)[EB/OL]. [2023-07-12]. https://blog.csdn.net/zhouguoqionghai/article/details/81869554.

posted @ 2023-07-12 10:08  HenryZeng  阅读(1048)  评论(0编辑  收藏  举报