请教大家,如何在内网直接使用主机名访问非 80 端口的内网服务

2021-12-26 14:27:34 +08:00
 phlips5437
大家好,我的环境如下:
openwrt (有 docker )+群晖 NAS (有 docker )+esxi 小工控机(有 docker )
自己在内网里搭建一些小服务在内网使用

我想请大家帮我解决的困难是(不发布到外网):
1 、当我通过 docker 跑服务的时候,我希望通过主机名直接访问,例如:
https://qbittorrent ,可以直接访问到 https://192.168.1.123:5678

2 、要满足以上需求,我知道需要一个反向发布的程序来做这些事情,但这个程序应该部署在哪里可以统一接管我三台主机的 docker 应用程序?

3 、此外我是否应该将我所有涉及到服务的主机名都记录在 openwrt 的 hosts 文件中?
2289 次点击
所在节点    问与答
16 条回复
Maskeney
2021-12-26 14:39:27 +08:00
任何一台都可以,推荐 caddy ,对付这种简单需求配置文件好写(当然不要直接手写 JSON)
xlsepiphone
2021-12-26 17:32:40 +08:00
traefik 反代。
yianing
2021-12-26 17:54:21 +08:00
openwrt 静态分配填的主机名,nslookup 主机名.lan 就能解析到
yianing
2021-12-26 17:57:51 +08:00
@yianing 再配合 caddy 做反代
xlsepiphone
2021-12-26 17:57:57 +08:00
@yianing #3 你这个针对非 80 端口应该无效。
yianing
2021-12-26 17:58:54 +08:00
@xlsepiphone 是,需要反向代理
rrfeng
2021-12-26 18:16:38 +08:00
竟然没看到 nginx 难道是过气了
Mithril
2021-12-26 18:31:02 +08:00
群晖的系统里本身就带了个反向代理。给你另外两个跑 Docker 的配置反向代理就行了。
你需要配置一个统一的 DNS ,然后在里面把几个不同的域名指向你这三台机器。
再在这三个机器的反向代理里面,把不同域名过来的请求分发到不同端口上就行了。

或者更简单点,就配置一个反向代理,然后所有你这些域名全指过去,再从这个反向代理里面分发到另外三台机器的不同端口上。
mingl0280
2021-12-26 19:13:16 +08:00
apache 或者 nginx 做个反代就完了
ysc3839
2021-12-26 20:15:30 +08:00
OpenWrt 端口转发吧。
至于 IP 怎么分配,你可以直接用原 IP ,比如规则设置成 from any to 192.168.1.123 port 5678 forward to 192.168.1.123 port 80
也可以拿一个几乎用不到的 IP 段,比如用 192.168.255.1
Donahue
2021-12-26 20:17:52 +08:00
nginx 反向代理,apache 似乎比较重不推荐
Donahue
2021-12-26 20:22:13 +08:00
1: 用 nginx
2: 部署 nginx 在任意一台宿主机上
3: 是的, 需要。如果 openwrt 上安装了 clash 之类的会劫持 dns 服务的软件,还需要在对应软件加入你的域名解析
xlsepiphone
2021-12-26 22:37:18 +08:00
还是建议使用 traefik2 ,因为 traefik2 本身也是运行在 Docker 容器中的,你只需要编排好容器,把 traefik 的配置写在 docker-compose 配置文件中即可,维护起来非常的方便。

traefik2 可以和你的服务编排到一起,也可以单独编排,分开编排的好处就是,新增服务后,你不需要重启 traefik2 ,traefik2 就可以基于 docker 的 label 动态发现你的服务。

当然 traefik2 除了反代 docker 中的 container 服务,也可以反代外部服务,比如你的群晖服务。

只需要新增一个 file provider 即可。

ps.我的 dns 重写用的是 adguardhome ,装在 openwrt 的软路由中的,当然你不用 adguardhome 也可以实现,只是我的域名解析都由 adguardhome 负责,统一管理比较方便。




blob:https://imgur.com/fc41f29a-05a8-420f-a027-f2ee6718bbb2
xlsepiphone
2021-12-26 22:37:51 +08:00
xlsepiphone
2021-12-26 22:39:21 +08:00
@xlsepiphone #14 只需要把 nas.home.com 指向 traefik 反代的 ip 地址,使用如下配置反代群晖服务即可。我的群晖 ip 是静态的 192.168.1.100 ,web 服务监听 5000 端口。

```yml
http:
routers:
my-route:
rule: "Host(`nas.home.com`) && PathPrefix(`/`)"
service: nas
services:
nas:
loadBalancer:
servers:
- url: "http://192.168.1.100:5000"
```
MonoLogueChi
2021-12-27 00:02:22 +08:00
需要两个服务,一个是 dns 重写,相当于一个内网 dns 服务器,用于解析内网域名,我推荐用 adguardhome ,可以直接用 docker 安装。还有就是需要一个反向代理服务器,我推荐用 caddy ,可以用 dns 验证去申请证书( dns 验证需要自己去官网下载含有相关插件的二进制文件,不能直接用 docker )。

在 openwrt 修改配置,第一种方法是直接改 DHCP 设置,将分配的 dns 地址改到 adguardhome 上,另一种是将 openwrt dns 上游改为 adguardhome ,然后在 adguardhome 设置 dns 重写。

反向代理配置,使用 docker 或虚拟机安装相关反向代理服务器,caddy ,nginx 或者其他什么都可以,监听 80 和 443 端口,然后配置反向代理和 tls 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/824482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX