用自己的域名实现内外网无缝访问懒猫微服内的应用

Kweizh

发布于399天前
还没想好签名
# 背景

目前使用懒猫微服已经成功替代我之前的 NAS 成为家庭服务中心了,使用懒猫微服客户端的场景下,默认就是不需要关注内外网,都能够直接访问到我的服务,
但是有一些服务使用第三方,或者原生的客户端,而且本身也有认证功能的情况,就需要一些适配工作,
使用第三方服务自身的认证加上 HTTPS,从而不需要登录懒猫客户端也能无视内外网访问应用。

好在懒猫微服商店的有足够的应用,很大程度的降低的配置的复杂度。

目标效果如下:

1. 无论在家里局域网,还是出门公网,都可以访问服务
2. 使用同一个域名自动适配内外网
3. 使用 HTTPS 加应用自身认证保证安全


# 准备工作

当然,如果想要很方便的访问到内网的服务,还是有一些前置的依赖项的:

1. 自己拥有域名并托管到 cloudflare 上,在此教程中以 example.com 举例
2. 最好的有自己的 ssl 证书,使用 let's encrypt 获取不复杂,在此教程中先默认有证书可用。

补充一句,如果确实没有 ssl 证书,可以考虑使用自签证书。

除了以上依赖,还用到了以下几个应用:

https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.cloudfalredweb


https://appstore.lazycat.cloud/#/shop/detail/app.ikw.lzc.caddy


https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.forward



使用 Jellyfin 作为示例:

https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.jellyfinsingle


然后我们就可以开始配置工作。

# 安装

## 1. 配置端口转发,打通跨应用访问

https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.forward

### 目标服务转发

因为涉及不同的服务进行内外网转发,所以首先我们要将希望转发的服务,通过端口转发工具,转发至微服虚拟网卡,以便转发服务能访问到目标服务。

此处以 Jellyfin 为例,转发 `8096` 端口至 `host.lzcapp:8096`,端口不一定需要一样,不冲突即可。

![CleanShot 2025-04-30 at 12.00.50@2x.png](https://dl.playground.lazycat.cloud/guidelines/299/f5993f9a-01c3-4f68-aa0f-7095b3c3260f.png "CleanShot 2025-04-30 at 12.00.50@2x.png")

### Caddy 局域网内端口转发

由于我们还希望在内网的时候可以方便的访问各种服务,所以需要配置一个 Caddy 局域网端口,作为统一入口。

由于我们需要使用 HTTPS,所以一定需要使用 443 端口。

![CleanShot 2025-04-30 at 12.42.06@2x.png](https://dl.playground.lazycat.cloud/guidelines/299/d6255182-77ed-4825-92e9-498b31ed1e49.png "CleanShot 2025-04-30 at 12.42.06@2x.png")

## 2. 配置 Cloudflared,打通公网访问

https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.cloudfalredweb

参考[官方教程](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/),配置 Cloudflared Tunnel 连通域名到懒猫微服的公网访问。

需要注意的是安装 cloudflared 时,直接安装懒猫微服商店中的 Cloudflared 即可。

当连接成功后,选择 `Public Hostname`,

![CleanShot 2025-04-30 at 12.11.13@2x.png](https://dl.playground.lazycat.cloud/guidelines/299/45aaff55-7a6f-460f-9b64-9b9e9c867f60.png "CleanShot 2025-04-30 at 12.11.13@2x.png")

并新增一个自定义子域名,例如 `movie.example.com`,然后保存即可。

![CleanShot 2025-04-30 at 12.22.09@2x.png](https://dl.playground.lazycat.cloud/guidelines/299/7a4f054f-db0b-4c78-b77b-5234d542f769.png "CleanShot 2025-04-30 at 12.22.09@2x.png")

此时,你应该已经拥有可以公网直接访问的 Jellyfin 了,而且自带了 HTTPS

![CleanShot 2025-04-30 at 12.25.51@2x.png](https://dl.playground.lazycat.cloud/guidelines/299/a848b72f-29cc-42fd-a70c-4eba09427e90.png "CleanShot 2025-04-30 at 12.25.51@2x.png")

## 3. 配置 Caddy,打通内网访问

通过 Cloudflare Tunnel,我们已经可以通过公网访问 Jellyfin 了,但是我们肯定不希望在家里的时候,也走公网绕一圈,所以我们可以通过 Caddy,实现无缝内网访问。

https://appstore.lazycat.cloud/#/shop/detail/app.ikw.lzc.caddy


Caddy 通过配置文件进行转发配置,配置文件位于 Caddy 的应用数据下 `Caddyfile/Caddyfile`,
首先将 ssl 证书也放到 Caddyfile 文件夹下,
然后加入以下内容,最后重启 Caddy 即可:

```Caddyfile
movie.example.com {
    tls /etc/caddy/example.com.crt /etc/caddy/example.com.key
    reverse_proxy host.lzcapp:8096
}
```

注意:
1. 第一行是 tls 配置,路径不要写错,`Caddyfile` 文件夹是映射至服务内 `/etc/caddy` 的
2. 第二行是转发配置,`reverse_proxy` 是固定的,域名和端口是前文配置的

## 4. 路由器配置域名转发

由于域名托管在 Cloudflare,并且进行了 Tunnel 的配置,域名已经默认指向 Cloudflare,
但是我们回到家时,希望直接访问内网,所以需要在路由器上将域名指向懒猫的 IP。

不同的路由器配置方式不同,用户根据自己的路由器配置解析即可。

# 结语

到此,我们完成了所有配置,实现效果如下:

1. 无需启动懒猫微服客户端
2. 公网时,自动通过 Cloudflare Tunnel 访问服务
3. 内网时,自动通过内网访问服务
4. 全程 HTTPS 加密

评论

8
u69150810105天前

马克备用

春华秋实111天前

l留个痕迹,下次好用

youguanxinqing368天前

请教一下,实现这个可以做到不安装懒猫客户端也能访问微服里面的应用吗?

nick2a4321回复youguanxinqing355天前

可以的。

nick4c9271回复nick2a4321352天前

请问,放到公网,会安全吗?风险是不是cloudflare会抵御一部份ddos 和cc攻击?

Kweizh回复youguanxinqing349天前

抱歉,我刚看到消息,这个就是为了不安装懒猫客户端专门设置的

Kweizh回复nick4c9271349天前

是的,cloudflare 挡住一部分,而且本身也有 HTTPS 和应用自己的认证,别用弱密码,和正常你在网上用的一些服务是一样的安全性

ety001回复nick4c9271336天前

cloudflare也可以设置邮件验证码保护

说点什么呢~
收藏
13
8
0