跳转到内容
View in the app

A better way to browse. Learn more.

彼岸论坛

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

[宽带症候群] 局域网内优雅的访问家庭内网服务

发表于

局域网内优雅的访问家庭内网服务

前情提要

《低成本家庭万兆内网搭建指北》
《个人家庭网络布局分享》
《家庭内网服务分享》

缘起

自从有了 NAS ,烦恼似乎开始变得多了。

当家庭部署的内网服务多了之后,例如笔记、DNS 、影音、Wiki 等等各种各样的服务,记忆和管理这些内网服务就成了一个问题。

直接在浏览器中输入内网服务的 IP:端口号,又面临记忆的负担,似乎不是一个优雅的方案。

如何在局域网优雅的访问这些内网服务,减少心智负担成了一个不得不解决的问题。

  • 恰好域名可以用来替代 IP+端口号,方便记忆。
  • 服务较多,个人服务导航页可以方便的集中化管理。

2 者结合可以完美的解决上面的问题,下面开始详细描述如何实现上面的需求。

子域名规划

根据内网服务的实际用途规划子域名如下,大家可以根据自己的实际情况自由发挥。

域名 后端服务 说明
https://binhome.cn http://192.168.0.4:3002 极空间 Docker 部署的 Sun-Panel 导航页服务
https://note.binhome.cn http://192.168.0.4:28080 极空间 Docker 部署的笔记服务 Flatnotes
https://book.binhome.cn http://192.168.0.4:8083 极空间 Docker 部署的阅读服务 Calibre-Web
https://dns.binhome.cn http://192.168.0.10:80 PVE CT 容器部署的 DNS 服务 Adguard Home
https://git.binhome.cn http://192.168.0.88:80 PVE CT 容器部署的 GitLab 服务
以下省略 20 条 以下省略 20 条 以下省略 20 条

想要实现的需求是:在局域网内部浏览器中输入 https://note.binhome.cn 这样的子域名,就能访问到局域网内部部署的笔记服务 http://192.168.0.4:28080

反向代理

上面子域名规划中的不同子域名映射到不同的后端 IP:端口,其实就是反向代理 Nginx 等服务需要做的事情。

由于 Nginx 需要绑定 80 和 443 端口,推荐使用 PVE 的 CT 容器来部署 Nginx Proxy Manager 。

Nginx Proxy Manager 非常的简单易用。无需编写复杂的 Nginx 配置就可以设置域名到后端服务的映射关系,非常适合小白用户。

NPM

除了反向代理之外,NPM 还支持泛域名 SSL 证书的申请,简单易操作。前提是事先购买域名并设置好 DNS 解析到主路由的公网 IP ,如果不介意浏览器中的红色安全提醒,也可以忽略。

NPM SSL

内网 DNS 重写

完成了反向代理之后,还需要做的一步操作就是将所有 *.binhome.cn 的请求都指向 Nginx Proxy Manager 的机器 IP (假如是 192.168.0.8 )。

修改主路由或旁路由的 Hosts 文件可以简单的达到目的:

192.168.0.8 binhome.cn
192.168.0.8 note.binhome.cn
192.168.0.8 book.binhome.cn
192.168.0.8 dns.binhome.cn
192.168.0.8 git.binhome.cn
以下省略 20 条...

上面的做法不是不行,但还是太繁琐了,需要 一条一条的添加,实现上不够优雅。能不能只需要 1 条记录就实现呢?类似下面这种:

192.168.0.8 *.binhome.cn

DNS 重写可以完美实现上面的诉求。

AdGuard Home 这款 DNS 服务支持泛域名重写功能。

DNS Rewrite

如果使用的是 OpenWRT 内置的 DNS 服务 Dnsmasq ,也能非常简单的设置泛域名重写功能。

# 编辑 dnsmasq 的配置文件
vim /etc/dnsmasq.conf

# 在最后添加一行以下配置
address = /binhome.cn/192.168.0.8

# 重启 dnsmasq 服务
service dnsmasq restart

完成了以上设置,这样在局域网环境下,所有访问 *.binhome.cn 的请求都会解析到内网的 NPM 机器 192.168.0.8 上。

原理解析

下面针对上面所讲的内容进行原理解析:

https://note.binhome.cn -> 192.168.0.2(内网 DNS 服务器) -> 192.168.0.8(NPM) -> http://192.168.0.4:28080

局域网环境下整个访问流程如下:

  • 访问 https://note.binhome.cn 时,会先请求内网的 DNS 服务器 (192.168.0.2) 进行内网 DNS 解析
  • 内网 DNS 服务器会将所有 *.binhome.cn 的请求都指向 NPM 的机器 IP ( 192.168.0.8 )
  • NPM 相当于 Nginx ,会在内部将请求根据域名匹配到真正的后端服务 http://192.168.0.4:28080

由此,就完成了请求不同的子域名,实际请求的是不同后端服务的需求。

个人服务导航页

集中化管理个人内网服务就需要导航页服务来实现了,推荐使用 Sun-Panel 。

之前的文章有介绍过 Sun-Panel 是一个漂亮的服务器、NAS 导航面板、Homepage 、浏览器首页。

Github: https://github.com/hslr-s/sun-panel

部署效果如下:

sunpanel

类似比较出名的个人导航页还有 Heimdall 。( https://github.com/linuxserver/Heimdall)

Sun-Panel 支持局域网和互联网 2 种模式,UI 更加简洁美观,个人更加倾向于使用 Sun-Panel 。

后续

完成上述操作之后,在局域网环境下,既可以直接在浏览器中输入 https://note.binhome.cn 这样的子域名来访问家庭内网服务。也可以设置浏览器的主页为个人导航页服务https://binhome.cn,一键点击访问对应的内网服务。

解决完了内网环境下的访问之后,如何在外优雅安全的访问局域网内的服务呢?

详见后续系列文章:《在外优雅访问家庭内网服务的姿势》。

Featured Replies

No posts to show

创建帐户或登录来提出意见

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.