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

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

  •  
  •   phlips5437 · 225 天前 · 1478 次点击
    这是一个创建于 225 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好,我的环境如下:
    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  
       225 天前   ❤️ 1
    任何一台都可以,推荐 caddy ,对付这种简单需求配置文件好写(当然不要直接手写 JSON)
    xlsepiphone
        2
    xlsepiphone  
       224 天前
    traefik 反代。
    yianing
        3
    yianing  
       224 天前 via Android
    openwrt 静态分配填的主机名,nslookup 主机名.lan 就能解析到
    yianing
        4
    yianing  
       224 天前 via Android
    @yianing 再配合 caddy 做反代
    xlsepiphone
        5
    xlsepiphone  
       224 天前
    @yianing #3 你这个针对非 80 端口应该无效。
    yianing
        6
    yianing  
       224 天前 via Android
    @xlsepiphone 是,需要反向代理
    rrfeng
        7
    rrfeng  
       224 天前   ❤️ 1
    竟然没看到 nginx 难道是过气了
    Mithril
        8
    Mithril  
       224 天前
    群晖的系统里本身就带了个反向代理。给你另外两个跑 Docker 的配置反向代理就行了。
    你需要配置一个统一的 DNS ,然后在里面把几个不同的域名指向你这三台机器。
    再在这三个机器的反向代理里面,把不同域名过来的请求分发到不同端口上就行了。

    或者更简单点,就配置一个反向代理,然后所有你这些域名全指过去,再从这个反向代理里面分发到另外三台机器的不同端口上。
    mingl0280
        9
    mingl0280  
       224 天前 via Android
    apache 或者 nginx 做个反代就完了
    ysc3839
        10
    ysc3839  
       224 天前 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  
       224 天前
    nginx 反向代理,apache 似乎比较重不推荐
    Donahue
        12
    Donahue  
       224 天前
    1: 用 nginx
    2: 部署 nginx 在任意一台宿主机上
    3: 是的, 需要。如果 openwrt 上安装了 clash 之类的会劫持 dns 服务的软件,还需要在对应软件加入你的域名解析
    xlsepiphone
        13
    xlsepiphone  
       224 天前
    还是建议使用 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  
       224 天前
    xlsepiphone
        15
    xlsepiphone  
       224 天前
    @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  
       224 天前 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   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4126 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 08:23 · PVG 16:23 · LAX 01:23 · JFK 04:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.