我跟着本指南转发我的 VPS(公共静态 IP)上的端口以访问防火墙后面的远程服务器上的 Nextcloud 安装。它起作用了 - 有点。在任何时间点,远程服务器(安装了 Nextcloud)都能够建立到 VPS 的反向 SSH 隧道,因此可以从 VPS 本地访问。
这是我使用的定制服务:
[Unit]
Description=Keep a tunnel to vps open
After=network-online.target
[Service]
Type=simple
User=autossh
Restart=always
RestartSec=60
ExecStart=/usr/bin/autossh -R *:13000:127.0.0.1:443 -N -o "ExitOnForwardFailure=yes" -o "ServerAliveInterval 15" -o "ServerAliveCountMax 3" autossh@[vps_ip] -p 22
[Install]
WantedBy=multi-user.target
但是,转发的端口 443(用于 https 访问)并不总是可以从客户端外部访问。
发生了以下非常奇怪的行为:
让我们从一切正常开始。自定义服务正在运行,隧道已打开,所有到 [vps_ip]:13000 的流量都正确转发到远程服务器上的端口 443,我可以访问我的 Nextcloud。
重新启动 VPS 后,隧道将关闭,远程服务器的服务将尝试重新连接,但没有成功。
VPS 完全启动后,一切似乎都恢复正常,服务已连接,隧道已建立,没有任何日志或错误消息表明出现任何问题。但是,当从外部访问时,VPS 上的端口 13000 不再转发到远程服务器上的 443。当直接从 VPS 的 shell 访问时,隧道仍然有效。
这是对以下命令的响应:
sudo service nextcloud-forward status -vvv
nextcloud-forward.service - Keep a tunnel to vps open
Loaded: loaded (/etc/systemd/system/nextcloud-forward.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-11-15 23:59:52 CET; 36min ago
Main PID: 7430 (autossh)
Tasks: 2 (limit: 4620)
Memory: 1.7M
CGroup: /system.slice/nextcloud-forward.service
├─7430 /usr/lib/autossh/autossh -R *:13000:127.0.0.1:443 -N -o ExitOnForwardFailure=yes -o ServerAliveInterval 15 -o ServerAliveCountMax 3 autossh@[vps_ip] -p 22
└─7459 /usr/bin/ssh -L 33168:127.0.0.1:33168 -R 33168:127.0.0.1:33169 -R *:13000:127.0.0.1:443 -N -o ExitOnForwardFailure=yes -o ServerAliveInterval 15 -o ServerAliveCountMax 3 -p 22 autossh@[vps_ip]
Nov 15 23:59:52 nextcloud systemd[1]: Started Keep a tunnel to vps open.
Nov 15 23:59:52 nextcloud autossh[7430]: starting ssh (count 1)
Nov 15 23:59:52 nextcloud autossh[7430]: ssh child pid is 7459
不管多少次重启、重新启动服务(例如自定义隧道服务或 sshd 服务)、强制终止 ssh 进程并重新启动它们、重试不同的端口等似乎都无济于事。据我所知,没有错误,日志中也没有任何异常。
然后我突然发现,它突然在午夜时分自行重新开始工作。没有更改配置,没有重新启动服务,什么都没有。当再次从外部访问时,隧道突然开始工作。
我已经这样做了至少一个星期,但我不知道发生了什么。如果您有任何想法,我将不胜感激,如果有任何不清楚的地方,请提问。我可以提供必要的日志等。
提前致谢!
系统信息:两台机器都使用 Ubuntu 20.04.1 LTS。VPS 就像其他 VPS 一样,只是便宜的租赁 VPS,远程服务器在 Windows 10 LTSC 主机上的 Virtualbox 中运行。
我尝试在 Stack Overflow 上询问这个问题,但没有得到答案,也许有人可以帮助我?
答案1
无论这种奇怪行为的原因是什么,在 VPS 上从头开始重新安装 Ubuntu 似乎已经解决了这个问题。