V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
allenpu666
V2EX  ›  NAS

如何配置路由器以实现局域网内使用域名访问能自动重定向到某个 ip 和端口

  •  
  •   allenpu666 · 30 天前 · 2959 次点击

    家庭使用 nas 做服务器,基于 lucky 进行反代和 http 转 https ,已经实现了外网访问

    其中 sample.com 已经通过 lucky 的 DDNS 实现了公网 IP 地址绑定并自动更新

    反代如下:

    a.sample.top:12345 -> 192.168.3.60:16801
    b.sample.top:12345 -> 192.168.3.60:16802
    c.sample.top:12345 -> 192.168.3.60:16803
    d.sample.top:12345 -> 192.168.3.128:80
    e.sample.top:12345 -> 192.168.3.88:3000
    …………
    

    现在在局域网内某电脑/手机上访问 c.sample.top:12345,是可以访问的。

    不过速度会受到公网上传的限制,

    例如家里宽带是 1000/50Mbps,那么在局域网内访问 c.sample.top:12345 时,速度就是 50Mbps,而达不到内网的千兆/2.5G 速度


    请问,如何配置路由器(或者软路由),使得局域网内访问这个域名(子域名)的时候,自动跳转到内网服务,而非经过路由器出去又回来了

    53 条回复    2024-11-23 17:09:32 +08:00
    Vraw5
        1
    Vraw5  
       30 天前
    建立内网 DNS
    auro233
        2
    auro233  
       30 天前
    可以尝试把内网服务的端口和外网服务的端口设置为一致再试试,如果局域网内访问 c.sample.top:12345 走的是外网,说明可能在内网你没开这个端口的服务?(简单猜测~)
    opengps
        3
    opengps  
       30 天前
    域名是用来代替 ip 的,但不能代替端口
    wnpllrzodiac
        4
    wnpllrzodiac  
       30 天前 via Android
    内网 dns 怎么做?普通路由器可以添加域名解析记录吗?
    cc999
        5
    cc999  
       30 天前
    如果路由器直接获取的地址是公网 应该没有这个问题
    可以尝试在主路由劫持下域名 到反代的内网机器
    suuuch
        6
    suuuch  
       30 天前
    只有一台机器的话,手动加 host 指向 IP ,IP 上带 nginx 之类的转发到端口。
    多台就是内网 DNS 转发到 IP ,IP 上带 nginx 端口转发。或者 #5 的路由域名劫持。
    TossPig
        7
    TossPig  
       30 天前
    嗯?怎么会有这种限制,你公网 IP 就在路由器上的啊,ISP 限制不到你的
    F798
        8
    F798  
       30 天前 via iPhone
    我用的路由器自动就可以。不会受宽带上传速度限制
    EvineDeng
        9
    EvineDeng  
       30 天前
    建立内网 DNS 服务器,每个内网 IP 使用不同的子域名,AdguardHome 就可以,可以参考我 https://evine.win/p/%E6%88%91%E7%9A%84%E5%AE%B6%E5%BA%AD%E7%BD%91%E7%BB%9C%E8%AE%BE%E8%AE%A1%E6%80%9D%E8%B7%AF%E5%BC%80%E5%90%AFdebian%E7%9A%84%E6%97%81%E8%B7%AF%E7%94%B1%E4%B9%8B%E8%B7%AF%E4%B8%89/ 的 重写 部分。

    要求内外网使用的端口一致。
    duanxianze
        10
    duanxianze  
       30 天前
    不应该啊,我在家用域名访问一样直接通过路由器,不走公网,不会被限制,感觉 op 还是哪里没配置对
    TossPig
        11
    TossPig  
       30 天前
    忍不住回来再嘴一句,前面几个认真说怎么搞 dns 和 host 的是 AI 吗?
    MSIAM
        12
    MSIAM  
       30 天前
    使用端口转发应该就可以了。
    zhucegeqiu
        13
    zhucegeqiu  
       30 天前
    路由器上设置 nat loopback
    PiCpo
        14
    PiCpo  
       30 天前
    你居然没有 NAT 回流问题,我们一般家宽有公网 v4 的一般没法在局域网内访问公网的 ip ,但是 v6 可以
    kkk9
        15
    kkk9  
       30 天前
    @TossPig #11 是你没懂,内网回流问题
    InDom
        16
    InDom  
       30 天前
    内网起一个 nginx 服务, 绑定 12345 到 a.sample.top (说白了构造一个和外网服务器一模一样的配置)

    然后路由器 或者 软路由上 强制 *.sample.top 指向你内网的这个服务上,
    bobryjosin
        17
    bobryjosin  
       30 天前
    防火墙写一条 DNAT ,目的地址公网地址端口映射回 NAS 就行了,内网端口和公网端口一致,虽然消耗路由的 CPU 跑不满 2.5G ,但是不太可能限速 50 ,另一种方法就是上面的 dns 重写。
    TossPig
        18
    TossPig  
       30 天前
    @kkk9 #15 那是另外一个问题,op 已经在内网能访问`*.sample.top:12345`了这是大前提!
    `不过速度会受到公网上传的限制` 这是 OP 给的错误资讯,前面几个扫贴就说 dns 或者 host ,我合理怀疑 AI 有问题?
    内网流量到路由器,再折回内网,你告诉我带宽怎么被 ISP 的签约带宽限制?
    kkk9
        19
    kkk9  
       30 天前
    @TossPig #18 内网能访问`*.sample.top:12345`大前提的关键是 op 用 lucky 做了反代,那么不管内网外网的流量都会经过 lucky 转发,op 可能有用词不当,但是大家都能理解,这时候要考虑你自己的理解能力了。
    TossPig
        20
    TossPig  
       30 天前
    @kkk9 #19 哦,我默认 lucky 装出口路由器上了,也许你是对的
    FaiChou
        21
    FaiChou  
       30 天前
    我也有这个问题。
    在内网下访问家里 nas ,比如 jellyfin, moviepilot, qb, alist 等服务很快,同时做了 cf tunnel 将一些服务暴露出去,这样在外面也能直接用域名访问。

    但是如果在家里用域名来访问这些服务就会很慢。

    现在的办法就是搞了两套,一套是内网的 ip ,一套是域名访问。
    ohhokay
        22
    ohhokay  
       30 天前
    你说的是这个功能吗
    ohhokay
        23
    ohhokay  
       30 天前
    badgv
        24
    badgv  
       30 天前 via Android
    1:在内网使用公网域名,不可能收到运营商的带宽限制,因为你数据包都没有走出路由器,除非你域名是 cf proxy 的解析
    2:可以用全内网 dns 劫持+全内网 hosts 实现,dns 软件都能实现,把你指定二级域名绑定成指定内网 ip 就行了
    esee
        25
    esee  
       30 天前
    先把端口统一,内网 dhcp 的时候设置分配的 dns 为路由器,路由器上添加内网的域名解析
    pan404
        26
    pan404  
       30 天前
    不就是 dns 劫持
    yinshuai
        27
    yinshuai  
       30 天前
    DNS 劫持+Nginx ,用 Dns 劫持把域名 ip 指向 Nginx 的机器,然后 Nginx 再根据域名转发到相应的 ip 和端口。如果端口就是 80 那就不需要 Nginx 转发了 直接 Dns 劫持到指定的 ip 就行。
    phenixc
        28
    phenixc  
       30 天前
    我是用 lucky 反代的。最近也想这样做。目前考的的情况是这样,
    1. 如果在外网用域名加端口号访问比较简单,内网 dns 劫持域名指向 lucky 服务地址,lucky 用端口转发向内网地址和端口就行

    2. 如果想用子域名访问,感觉需要起两个 lucky,一个代理外网,一个代理内网,代理外网的使用 web,代理内网的使用端口转发+dns 劫持
    phenixc
        29
    phenixc  
       30 天前
    @phenixc 又想了一下,好像不用那么麻烦,直接无脑劫持 dns 指向 lucky 的内网地址就可以了,都是用 lucky 反代,无非是一个通过公网 dns 获取 lucky 的公网地址,一个是通过 内网 dns 劫持指向 lucky 的内网地址,有了 lucky 的地址,后面的事情都是 lucky 做了。
    shenjinpeng
        30
    shenjinpeng  
       30 天前
    装个 adguard home, 路由器 dns 填 adguard 的 IP 地址
    shenjinpeng
        31
    shenjinpeng  
       30 天前
    TsukiMori
        32
    TsukiMori  
       30 天前
    我用的 NGINX 反代
    a.xxx.com -> 转发到 apache 内网 8080
    b.xxx.com -> 直接监听并打开网页
    c.xxx.com->根据/location 转发到不同的监听程序
    PolarBears
        33
    PolarBears  
       30 天前
    路由器上使用 DNAT 即可解决
    shentar
        34
    shentar  
       30 天前
    这一定是应用层协议的事情。网络设备感觉搞不定。能携带域名的协议,常见的只有 http 和 https 了。那就只能是 nginx 反向代理搞定。
    laooong
        35
    laooong  
       30 天前
    我用的 openwrt 中的 Dnsmasq 的主机名映射。
    y1y1
        36
    y1y1  
       30 天前
    nat loopback
    H97794
        37
    H97794  
       30 天前
    外网同一个端口,很麻烦吧

    a.sample.top:12345 -> 192.168.3.60:16801
    b.sample.top:12345 -> 192.168.3.60:16802
    c.sample.top:12345 -> 192.168.3.60:16803
    d.sample.top:12345 -> 192.168.3.128:80
    e.sample.top:12345 -> 192.168.3.88:3000

    内网的话
    路由器上

    DNS
    a.sample.top 10.10.0.1
    b.sample.top 10.10.0.2
    c.sample.top 10.10.0.3
    d.sample.top 10.10.0.4
    e.sample.top 10.10.0.4

    NAT
    10.10.0.1:12345 -> 192.168.3.60:16801
    10.10.0.2:12345 -> 192.168.3.60:16802
    10.10.0.3:12345 -> 192.168.3.60:16803
    10.10.0.4:12345 -> 192.168.3.128:80
    10.10.0.5:12345 -> 192.168.3.88:3000

    应该可以实现
    hackroad
        38
    hackroad  
       30 天前
    这不就是一个回流么
    Xheldon
        39
    Xheldon  
       30 天前
    你搜一下 NAT Loopback/Hairpin 就明白了,内网访问 DDNS 的域名会直接访问你的内网 ip ,请求不会出内网绕圈再回来。

    我家带宽是 500M/30M 的,路由拨号 TP-Link XDR 5480 是家用的,没地儿设置这个,但是我实测设置了内网 AppleTV infuse 的域名+端口访问内网 Mac 的 jellyfin 服务的话,网速最大能到 600Mbps ,也就是 80MB/s 的下载速度,感觉跟上传带宽没关系。
    不过我的路由是千兆口,Mac 是 Studio 的 10G 万兆口,理论上应该能达到 1000/8 = 125MB/s 但是不知道为啥没达到,可能是网线有关,没管了,总之跟办理的带宽估计关系不大。
    amanisheir
        40
    amanisheir  
       30 天前
    只有 V6 ,路由器 ssh 进去直接改 hosts ,把域名改成 v4 局域网,就是路由器一动配置就掉,加了个 corn 定时,不在 hosts 文件就加记录,路由器重启只能用 siri 快捷指令启动一下定时脚本
    Xheldon
        41
    Xheldon  
       29 天前
    不过我跟楼主不同的是,我的 DDNS 用的是路由器自带的,是同一个域名,只是公网不同的端口映射到内网的不同的服务和端口。而楼主的是二级域名不同,端口一样,跟我的有差异,仅供参考。

    我记得之前在 infuse 填内网 ip 访问 Mac 的 jellyfin 服务,测速也是最高 600Mbps ,所以跟域名没关系,正常情况你在内网访问指向内网的公网 ip/域名,这个请求不会出内网就响应了。
    Xheldon
        42
    Xheldon  
       29 天前
    另外别开有关 ipv6 的所有东西,有意想不到的问题,我的 mac 路由器 猫(桥接)软路由,凡是跟 ipv6 的相关的全关闭了。
    Ipsum
        43
    Ipsum  
       29 天前
    我觉得 op 可以把路由器的 qos 先关闭了再试试效果。
    MYDB
        44
    MYDB  
       29 天前 via iPhone
    不应该出现限制速度的问题,如果用的是 openwrt ,可能是打包固件的人用不上 ddns 访问内网,却又有其他需求,所以在某些设置上做了改动。
    曾经出现过 ddns 内网不通的问题,发现大部分固件都只对代理有针对优化,而 ddns dns udp nat upnp 等的支持简直一坨!
    多换几个固件试试
    TimPeake
        45
    TimPeake  
       29 天前
    很久以前在 TG 某个 openwrt 群问过这个问题,被群嘲讽 ,理由是他们都没这个需求,直接内外网 IP 访问就行
    FrankAdler
        46
    FrankAdler  
       29 天前 via Android
    我的做法是,在家里路由器上 dnsmasq 设置 dns ,比如外网 a.b.com:5000 ,路由器上 dns 设置为内网某个运行 nginx 的设备,配置好 ssl 证书反代到真正的服务。
    这样内网走内网 nginx 反代,外网走你的 lucky
    SenLief
        47
    SenLief  
       29 天前
    内网劫持 dns ,把域名解析到本地 ip
    myki
        48
    myki  
       29 天前
    Mikrotik 端口回流
    liuhai233
        49
    liuhai233  
       29 天前
    dnsmaq
    fox2081
        50
    fox2081  
       29 天前
    我是 nas 的 ipv6+ddns+NPM ,理论和你是一样的,体验上是没有限制的,外网没有 v6 环境的话需要挂 tailscale 和改 host
    dhuzbb
        51
    dhuzbb  
       28 天前 via Android
    0xD800
        52
    0xD800  
       28 天前 via Android
    最简单在路由器自定义 hosts ,我买的问天 7200pro 有这个配置,估计其他型号也有。用域名即可
    0xD800
        53
    0xD800  
       28 天前 via Android
    @wnpllrzodiac 可以 中兴的 我测试过这个功能 非常 OK
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2567 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:03 · PVG 19:03 · LAX 03:03 · JFK 06:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.