V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
phlips5437
V2EX  ›  问与答

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

  •  
  •   phlips5437 · 2021-12-26 14:27:34 +08:00 · 2449 次点击
    这是一个创建于 1095 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好,我的环境如下:
    openwrt (有 docker )+群晖 NAS (有 docker )+esxi 小工控机(有 docker )
    自己在内网里搭建一些小服务在内网使用

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

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

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

    或者更简单点,就配置一个反向代理,然后所有你这些域名全指过去,再从这个反向代理里面分发到另外三台机器的不同端口上。
    mingl0280
        9
    mingl0280  
       2021-12-26 19:13:16 +08:00 via Android
    apache 或者 nginx 做个反代就完了
    ysc3839
        10
    ysc3839  
       2021-12-26 20:15:30 +08:00 via Android
    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
        11
    Donahue  
       2021-12-26 20:17:52 +08:00
    nginx 反向代理,apache 似乎比较重不推荐
    Donahue
        12
    Donahue  
       2021-12-26 20:22:13 +08:00
    1: 用 nginx
    2: 部署 nginx 在任意一台宿主机上
    3: 是的, 需要。如果 openwrt 上安装了 clash 之类的会劫持 dns 服务的软件,还需要在对应软件加入你的域名解析
    xlsepiphone
        13
    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
        14
    xlsepiphone  
       2021-12-26 22:37:51 +08:00
    xlsepiphone
        15
    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
        16
    MonoLogueChi  
       2021-12-27 00:02:22 +08:00 via Android
    需要两个服务,一个是 dns 重写,相当于一个内网 dns 服务器,用于解析内网域名,我推荐用 adguardhome ,可以直接用 docker 安装。还有就是需要一个反向代理服务器,我推荐用 caddy ,可以用 dns 验证去申请证书( dns 验证需要自己去官网下载含有相关插件的二进制文件,不能直接用 docker )。

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

    反向代理配置,使用 docker 或虚拟机安装相关反向代理服务器,caddy ,nginx 或者其他什么都可以,监听 80 和 443 端口,然后配置反向代理和 tls 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3528 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:45 · PVG 08:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.