我有以下配置:两个 Syncthing 实例分别在 LAN1 和 LAN2(家庭)上的 PC1 和 PC2(家庭)上运行。以下这指南我将“同步协议监听地址”值设置为 tcp://127.0.0.1:22000,将远程设备“地址”值设置为 tcp://127.0.0.1:22001。因此,每个 Syncthing 实例将有三个开放端口:22000 和 22001 用于连接和数据传输,8384 用于 WebGUI。为了启用远程访问,我在路由器上设置了端口转发,将公共端口 3333 重定向到 PC2 上的端口 4444,sshd 服务器正在监听该端口。
现在,我的问题是:如何使用 SSH 隧道传输三个端口(22000、22001 和 8384),以便我可以安全地使用 Syncthing 传输文件并从我的 PC1 浏览器控制 PC2 Syncthing 实例?我想使用本机 Windows SSH 客户端实现此目的,并在执行命令后自动关闭命令窗口。
注意:目前,我正在使用 PuTTY 按照以下步骤完成此操作:
In PuTTY, I enter "MY_ROUTERS_PUBLIC_IP" in the "Host Name" field under "Session."
I set the "Port" to 3333.
Under "Connection" -> "SSH" -> "Auth," I specify "MY_PRIVATE_KEY_FOR_PC2" as the authentication method.
Under "Connection" -> "SSH" -> "Tunnels," I configure the following: L22001 127.0.0.1:22000 and R22001 127.0.0.1:22000.
但是,此设置存在一些问题:
- PuTTY 窗口始终保持打开状态。
- 此外,由于我依赖互联网源命令而没有完全了解它们的功能,我最终只隧道化了端口 22000 和 22001。因此,Syncthing PC2 的 GUI 没有被转发到我的 PC1。
答案1
您应该能够使用命令行实现与上述相同的操作:
ssh -L22001:127.0.0.1:22000 -R22001:127.0.0.1:22000 -N -f -p 3333 USERNAME@MY_ROUTERS_PUBLIC_IP
-L22001:127.0.0.1:22000
将 PC1 上的端口 22001 连接到 PC2 上的端口 22000(隧道)。-R22001:127.0.0.1:22000
将 PC2 上的端口 22001 连接到 PC1 上的端口 22000(反向隧道)。-N
意味着不要在远程机器上启动命令行会话;我们只使用隧道。-f
表示即使您关闭终端窗口,进程仍会继续运行(Windows 在这方面的工作方式与其他操作系统略有不同)。您经常会看到最后两个一起显示-fN
,但为了清晰起见,我将它们分开了。-p 3333
设置与 MY_ROUTERS_PUBLIC_ADDRESS 一起使用的端口号。
要添加 Syncthing 控制端口,请创建从 PC1 到 PC2:8384 的隧道,如下所示:
-L8385:127.0.0.1:8384
我任意选择了 8385 作为本地端口。您可以使用 从浏览器进行连接http://12.0.0.1:8385
。
您可以根据需要向 ssh 添加任意数量的隧道参数。
虽然上述方法有效,但您可能会发现 VPN 是一种更干净的解决方案,不需要在路由器的自然“防火墙”上打洞。我不是指在其他地区观看 Netflix 的“VPN”服务,而是指合适的服务,至少其中一些是免费供家庭使用的(我使用 Tailscale)。