用Caddy和SSH隧道让树莓PI上线

2020-10-26 21:53:25

我已经有了自己的域名:mydomain.com。我希望能够在我的树莓PI 4B上运行一些网页应用程序,在家里以无头模式永久运行(只需要5W的电源和无线互联网)。我希望能够从公共互联网访问这些应用程序。动态DNS不是一个选项,因为我的ISP阻止所有传入通信。Ngrok可以奏效,但免费计划限制太多。

我在Hetzner上买了一个便宜的2 GB内存、20 GB磁盘VM和一个25 GB的卷,大约4欧元/月,Hetzner给了我一个静态IP。我还没有购买浮动IP。

我创建了一个子域u1.mydomain.com,其A记录指向上面的静态IP地址。

我在服务器上禁用了nginx,而安装了Caddy。以下是我的/etc/caddy/caddyfile的内容:

{email [email protected]}home.mydomain.com{#这些被反向代理到端口10000+n,这些端口通过ssh#隧道传输到我的家乡反向代理localhost:10080}的raspbercrypi中}cloud.mydomain.com{#这些服务在本地提供,但带有自动HTTPS root*/usr/share/caddy file_server}。

我在服务器上的/etc/ssh/sshd_config中设置了指定的GatewayPorts客户端。这是必需的,以便客户端(RaspberryPI)可以指定在哪些端口上启用反向隧道。

我在此服务器上启用了Ubuntu防火墙,并允许端口80和443上的传入流量。例如:SUDO UFW允许80。

现在,在家里的Raspberry PI上,我创建了一个到这个HetznerVM的反向SSH隧道,命令是:ssh-N-T-R 10080:localhost:[email protected]

就像这样,我的站点在PI的端口80上运行,现在可以通过https://home.mydomain.com.访问。

一旦我们完成测试,我们就可以添加-f选项,以便此隧道在后台运行。为了能够重新创建隧道(可能通过crontab),我将以下代码放入bash脚本:

#!/bin/bashcreateTunes(){/usr/bin/ssh-f-N-T-R 10080:localhost:[email protected]如果[[$?-eq 0]];则成功创建到赫茨纳的回显隧道,否则在创建到赫茨纳的隧道时出现回显错误。Rc是$?Fi}/bin/pidof sshif[[$?-ne 0]];然后回显创建新隧道连接createTunnelfi。

映射整个端口范围,这样每次在PI上添加新的WebApp时就不需要执行上述两个步骤