家庭使用 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 速度

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

建立内网 DNS

可以尝试把内网服务的端口和外网服务的端口设置为一致再试试,如果局域网内访问 c.sample.top:12345 走的是外网,说明可能在内网你没开这个端口的服务?(简单猜测~)

域名是用来代替 ip 的,但不能代替端口

内网 dns 怎么做?普通路由器可以添加域名解析记录吗?

如果路由器直接获取的地址是公网 应该没有这个问题
可以尝试在主路由劫持下域名 到反代的内网机器

只有一台机器的话,手动加 host 指向 IP ,IP 上带 nginx 之类的转发到端口。
多台就是内网 DNS 转发到 IP ,IP 上带 nginx 端口转发。或者 #5 的路由域名劫持。

嗯?怎么会有这种限制,你公网 IP 就在路由器上的啊,ISP 限制不到你的

我用的路由器自动就可以。不会受宽带上传速度限制

建立内网 DNS 服务器,每个内网 IP 使用不同的子域名,AdguardHome 就可以,可以参考我 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/ 的 重写 部分。

要求内外网使用的端口一致。

不应该啊,我在家用域名访问一样直接通过路由器,不走公网,不会被限制,感觉 op 还是哪里没配置对

忍不住回来再嘴一句,前面几个认真说怎么搞 dns 和 host 的是 AI 吗?

使用端口转发应该就可以了。

路由器上设置 nat loopback

你居然没有 NAT 回流问题,我们一般家宽有公网 v4 的一般没法在局域网内访问公网的 ip ,但是 v6 可以

#11 是你没懂,内网回流问题

内网起一个 nginx 服务, 绑定 12345 到 a.sample.top (说白了构造一个和外网服务器一模一样的配置)

然后路由器 或者 软路由上 强制 *.sample.top 指向你内网的这个服务上,

防火墙写一条 DNAT ,目的地址公网地址端口映射回 NAS 就行了,内网端口和公网端口一致,虽然消耗路由的 CPU 跑不满 2.5G ,但是不太可能限速 50 ,另一种方法就是上面的 dns 重写。

#15 那是另外一个问题,op 已经在内网能访问*.sample.top:12345了这是大前提!
不过速度会受到公网上传的限制 这是 OP 给的错误资讯,前面几个扫贴就说 dns 或者 host ,我合理怀疑 AI 有问题?
内网流量到路由器,再折回内网,你告诉我带宽怎么被 ISP 的签约带宽限制?

#18 内网能访问*.sample.top:12345大前提的关键是 op 用 lucky 做了反代,那么不管内网外网的流量都会经过 lucky 转发,op 可能有用词不当,但是大家都能理解,这时候要考虑你自己的理解能力了。

#19 哦,我默认 lucky 装出口路由器上了,也许你是对的

我也有这个问题。
在内网下访问家里 nas ,比如 jellyfin, moviepilot, qb, alist 等服务很快,同时做了 cf tunnel 将一些服务暴露出去,这样在外面也能直接用域名访问。

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

现在的办法就是搞了两套,一套是内网的 ip ,一套是域名访问。

你说的是这个功能吗

1:在内网使用公网域名,不可能收到运营商的带宽限制,因为你数据包都没有走出路由器,除非你域名是 cf proxy 的解析
2:可以用全内网 dns 劫持+全内网 hosts 实现,dns 软件都能实现,把你指定二级域名绑定成指定内网 ip 就行了

先把端口统一,内网 dhcp 的时候设置分配的 dns 为路由器,路由器上添加内网的域名解析

不就是 dns 劫持

DNS 劫持+Nginx ,用 Dns 劫持把域名 ip 指向 Nginx 的机器,然后 Nginx 再根据域名转发到相应的 ip 和端口。如果端口就是 80 那就不需要 Nginx 转发了 直接 Dns 劫持到指定的 ip 就行。

我是用 lucky 反代的。最近也想这样做。目前考的的情况是这样,

  1. 如果在外网用域名加端口号访问比较简单,内网 dns 劫持域名指向 lucky 服务地址,lucky 用端口转发向内网地址和端口就行
  2. 如果想用子域名访问,感觉需要起两个 lucky,一个代理外网,一个代理内网,代理外网的使用 web,代理内网的使用端口转发+dns 劫持

    又想了一下,好像不用那么麻烦,直接无脑劫持 dns 指向 lucky 的内网地址就可以了,都是用 lucky 反代,无非是一个通过公网 dns 获取 lucky 的公网地址,一个是通过 内网 dns 劫持指向 lucky 的内网地址,有了 lucky 的地址,后面的事情都是 lucky 做了。

    装个 adguard home, 路由器 dns 填 adguard 的 IP 地址

    我用的 NGINX 反代
    a.xxx.com -> 转发到 apache 内网 8080
    b.xxx.com -> 直接监听并打开网页
    c.xxx.com->根据/location 转发到不同的监听程序

    路由器上使用 DNAT 即可解决

    这一定是应用层协议的事情。网络设备感觉搞不定。能携带域名的协议,常见的只有 http 和 https 了。那就只能是 nginx 反向代理搞定。

    我用的 openwrt 中的 Dnsmasq 的主机名映射。

    nat loopback

    外网同一个端口,很麻烦吧

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

应该可以实现

这不就是一个回流么

你搜一下 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 但是不知道为啥没达到,可能是网线有关,没管了,总之跟办理的带宽估计关系不大。

只有 V6 ,路由器 ssh 进去直接改 hosts ,把域名改成 v4 局域网,就是路由器一动配置就掉,加了个 corn 定时,不在 hosts 文件就加记录,路由器重启只能用 siri 快捷指令启动一下定时脚本

不过我跟楼主不同的是,我的 DDNS 用的是路由器自带的,是同一个域名,只是公网不同的端口映射到内网的不同的服务和端口。而楼主的是二级域名不同,端口一样,跟我的有差异,仅供参考。

我记得之前在 infuse 填内网 ip 访问 Mac 的 jellyfin 服务,测速也是最高 600Mbps ,所以跟域名没关系,正常情况你在内网访问指向内网的公网 ip/域名,这个请求不会出内网就响应了。

另外别开有关 ipv6 的所有东西,有意想不到的问题,我的 mac 路由器 猫(桥接)软路由,凡是跟 ipv6 的相关的全关闭了。

我觉得 op 可以把路由器的 qos 先关闭了再试试效果。

不应该出现限制速度的问题,如果用的是 openwrt ,可能是打包固件的人用不上 ddns 访问内网,却又有其他需求,所以在某些设置上做了改动。
曾经出现过 ddns 内网不通的问题,发现大部分固件都只对代理有针对优化,而 ddns dns udp nat upnp 等的支持简直一坨!
多换几个固件试试

很久以前在 TG 某个 openwrt 群问过这个问题,被群嘲讽 ,理由是他们都没这个需求,直接内外网 IP 访问就行

我的做法是,在家里路由器上 dnsmasq 设置 dns ,比如外网 a.b.com:5000 ,路由器上 dns 设置为内网某个运行 nginx 的设备,配置好 ssl 证书反代到真正的服务。
这样内网走内网 nginx 反代,外网走你的 lucky

内网劫持 dns ,把域名解析到本地 ip

Mikrotik 端口回流

dnsmaq