我的 NAS 有公网 IP ,通过群晖的 DDNS 绑定了域名:xxx.com:13180
使用手机流量或者在外面访问域名一切正常。但是回到家以后,当我连上了家里的 wifi ,无论是直接使用外网 IP 还是使用域名,均无法访问 NAS ,必须使用 192.168 内网 IP 或者换成流量才能访问 NAS 。
使用这个域名,无论在外网还是内网均能访问群晖。
我没有旁路由器,只有联通送的光猫+送的路由器,没有其他网络设备。
请问我应该怎么设置,才能实现这个需求?
|      1silverwolf      2024-01-30 10:14:14 +08:00 adguard home 有个 DNS 重写 功能,把家里主路由的 dns 换成 adguard home | 
|      2lff0305      2024-01-30 10:18:29 +08:00  1 | 
|      3Jack927      2024-01-30 10:25:04 +08:00 如同#1 #2 我也这个需求: 解决方案是一个设备装 adguard home ,路由器的 dns 执行这个设备,ADHome 然后 dns 重写成本地 ip 。 这样家里所有人的设备就是在家走内网,在外走公网。 如果没有一个单独的设备,那么你用的电脑上本地设置个 host 也行 | 
|  |      4A01514035      2024-01-30 10:25:08 +08:00 我昨晚也想到了这个问题,是否可以通过一台云服务器使用 nginx 做 301 重定向来实现? 有一个解析到云服务器的域名,nginx 判断请求 IP 段,如果是自己家宽带的就 301 到内网的 IP 地址或者 301 到解析到内网 IP 的域名。 如果是其他情况就 301 到 DDNS 绑定的公网 IP 域名:端口。 当然前提也有点苛刻,需要有云服务器,需要自己家宽带的 IP 在某一个范围内。 没有实验过,只是靠脑子想的,不知道是否可行。 | 
|      5Jacksu      2024-01-30 10:30:19 +08:00 你没有其他网络设备,但是你有群晖是吧?群晖上搭建一个内网 DNS 服务器就行了,1 楼的就行,docker 安装。实在不想 docker 也可以群晖自带的 DNS 服务器配置一下就好,然后把家里路由器的 DNS 服务器设为群晖上的就好。 | 
|  |      6ikn0wzxc      2024-01-30 10:33:53 +08:00 路由器的问题?我用的 r2s ,内网也能通过域名访问 | 
|  |      7titanium98118      2024-01-30 10:36:47 +08:00 在内网 DNS 劫持一下? | 
|  |      81if5ty3      2024-01-30 10:37:02 +08:00 1 、路由器 端口映射有个端口回流功能,打开就好了 2 、在路由器加主机 host | 
|  |      9AirBai2      2024-01-30 10:39:31 +08:00 家里局域网搭一个 dns 服务器,群晖上有现成的套件 | 
|  |      10jst0701      2024-01-30 10:45:49 +08:00 说下我的方案吧,有公网,但不想开那么多端口,我是在 nas 搭建了一个服务端,然后在 qx 添加了一个 ssid 的策略组,根据 wifi 名称判断分流策略,连上家里的 wifi 就直连,在外面就通过 ss 回家,在家和在外面都是直接用 ip 访问,我感觉现在挺好的,家里的摄像头我也不需要开外网了,随时随地直接用 ip 访问 | 
|      11yc8332      2024-01-30 10:46:22 +08:00 路由器上绑定 host 。。直接把你的域名解析成内网地址不就好了 | 
|  |      12ZRS      2024-01-30 10:47:57 +08:00 via iPhone  1 正确配置 hairpin nat | 
|  |      13tsvico      2024-01-30 10:48:49 +08:00  1 外网域名正常解析,我的 openwrt 上有 dnsmasq ,这么配置的 ```sh vim /etc/dnsmasq.conf # add address=/xx.xx.cn/192.168.1.2 ``` | 
|  |      14libook      2024-01-30 10:49:27 +08:00 你需要在家庭网络内让客户端直接连 NAS 而不是从路由绕一下是吧? 这样的话就是需要你域名在家庭网络内解析到你 NAS 的内网 IP 上,思路就是你内网有个 DNS 服务器,让这个 DNS 将域名解析到 NAS 的内网 IP ,然后客户端在家庭网络内使用这个 DNS 来解析域名。 你看看路由器支持不支持手动添加 DNS 记录,不支持的话就内网找台可以一直开机且稳定的设备装个可以自己配置解析记录的 DNS 服务,然后在路由器上设置 DHCP 的 DNS 地址为那台 DNS 设备的 IP 。 | 
|  |      15itskingname OP @silverwolf 这样需要有地方运行 adguard home 吧。但是电脑并不是 24 小时开机。 | 
|  |      16itskingname OP @lff0305 手机上不好改 hosts 文件 | 
|  |      17itskingname OP @Jack927 如果我把电脑带到外面去,要访问 nas 还得把 hosts 改回来 | 
|  |      18itskingname OP @Jacksu 本来就是因为连不上群晖才提的问题。但是你的解决方法是先要连上群晖。。。 | 
|  |      19itskingname OP @libook 目前能够一直开机的就是群晖,没有其他能一直开机的设备。但我的需求本来就是在内网使用域名连接群晖。。。 | 
|      20littlewing      2024-01-30 11:01:44 +08:00 hairpin nat | 
|      21yinft      2024-01-30 11:02:59 +08:00 路由器加主机 host, 我家小米的路由器支持 | 
|  |      22beyondstars      2024-01-30 11:03:37 +08:00 在家的时候用你本地电脑 mtr 那个公网 IP 试试看看输出,另外不知道是否方便提供一下网络拓扑(包括群晖接的是光猫 LAN 口还是路由器的 LAN 口,光猫是否工作在桥接模式,各个机器的 IP 地址等)。 | 
|      23desperadoo      2024-01-30 11:05:21 +08:00 是不是使用 IPv6 可以避免内网访问失败的问题 | 
|  |      24itskingname OP @beyondstars 光猫是路由模式,路由器在光猫下游是桥接模式。群晖插在光猫 LAN 口。手机连接的路由器的 wifi 。 | 
|  |      25x86      2024-01-30 11:09:46 +08:00 host 最简单了 | 
|  |      26villivateur      2024-01-30 11:14:19 +08:00 家里的路由器 DNS 把 NAS 域名解析到内网地址即可,我一直这么用 | 
|  |      27peasant      2024-01-30 11:16:28 +08:00 跟 OP 的用法刚好相反,域名设置的是内网 IP ,在外面需要连的时候就打开代理软件,代理软件添加了 DNS 映射,老家是用的自建 DNS 设置了 DNS 重写, 设置的从外网访问 NAS 必须域名正确才能访问,这样别人只知道域名或者 IP 的其中一个是连接不到 NAS 的 | 
|  |      28IvanLi127      2024-01-30 11:16:46 +08:00 via Android 路由器里直接配 hosts 就行,现在品牌路由器很多都在 web ui 提供这个配置功能,可以看看你的有没有 | 
|  |      29flyinghigherair      2024-01-30 11:18:37 +08:00 为什么不换一种思路,在外面直接访问 nas 的内网地址?我是在群晖上自建 wireguard ,在公司时在 clash 上添加好家里的 wg ,浏览器上一样内网地址访问 nas 或其他内网 ip 的设备 | 
|  |      30libook      2024-01-30 11:20:48 +08:00 @itskingname #19 不冲突啊,只要你内网群晖是固定 IP ,你就可以在主路由的 DHCP 上配置 DNS 服务器地址为群晖的内网 IP 。 你的设备进行 DNS 解析的时候是路由 DHCP 直接告诉你群晖的 IP 的。 不过这就会有个问题,就是你折腾群晖的时候(比如重启)可能会导致 DNS 暂时不可用,这也就是为什么我建议整个稳定的设备跑 DNS ,你可以看看一些便宜的盒子或开发板啥的。 | 
|  |      31libook      2024-01-30 11:24:53 +08:00 看了你的附言,实际上这一点都不奇怪,因为使用 DNS 服务器解析域名和使用域名访问群晖服务是两码事,是你自己没有转过弯来。 不会因为你把群晖的域名解析记录配置到群晖上的 DNS 就导致无法解析了,因为你需要在主路由上配置群晖的固定 IP 的,这个 DNS 提供服务的过程是不需要域名参与的。 或者说,你可以将 DNS 服务器看作一个抽象的独立服务器,只是实际上跑在群晖硬件上而已,如果你将来有其他可以长期运行的设备,可以随时将 DNS 服务器移到其他设备上。 | 
|  |      32qinrui      2024-01-30 11:27:52 +08:00 我的情况和你类似,域名通过 DDNS 功能指向路由器,路由器设置端口转发,3389 转 NAS 的 3389 效果是无论从外网还是内网访问 域名:3389 ,都可以正常打开 NAS 的远程桌面 | 
|  |      33Cambra1n      2024-01-30 11:28:14 +08:00 我把 PC 远程桌面+群晖管理页面/jellyfin 这三个端口全交给路由器转发,路由器上部署 ddns 。 | 
|  |      35sujin190      2024-01-30 11:32:20 +08:00 其实 ddns 的公网 ip 是路由,路由开启端口转发外围可以内外不可以,其实是端口转发一般只是目的地址重写,源地址是内外的时候还需要执行源地址重写为路由 ip 才正常,可以看看路由是否支持开启 nat 回环源地址重写,不支持的话估计就是楼上说的不同 dns 了 openwrt 的话在配置端口转发高级里有个启用 nat 回环的配置,勾上就好了,不过这货似乎如果重新拨号不能自动更新,需要停用端口转发再启用端口转发一次才好,所以我都是另外再单独建一条 nat 规则执行 lan 源地址重写 | 
|  |      36itskingname OP | 
|  |      37IMengXin      2024-01-30 11:39:31 +08:00 我用的 ikuai ,里面有个 DNS 反向代理,配置域名和内网 ip 就可以了 | 
|  |      38loocao      2024-01-30 11:39:48 +08:00 @flyinghigherair +1 ,如果不是需要提供外网直接访问的东西话,我觉得这种方案是最安全的而且方便的,就像直接在家里一样访问内网任何 ip ,不过我是直接使用 wireguard 官方客户端,不是 clash | 
|      39silverwolf      2024-01-30 11:42:25 +08:00 @itskingname 既然你群晖不关机,就是 #30 #31 说的这样,自个琢磨吧~ | 
|  |      40ColinWang      2024-01-30 11:44:39 +08:00 NAT 回流或者 DNS 重写。 | 
|      41ilaipi      2024-01-30 11:53:55 +08:00 @IMengXin #37 奇怪,我用 ikuai 配置了反向代理,ping 的时候显示的是内网 ip ,但是浏览器里访问的时候,看 network 显示的 Remote Address 竟然是外网 ip😂 | 
|  |      42xuan_lengyue      2024-01-30 11:54:21 +08:00 我用的 ss ,DNS 的 A 记录是内网地址,外网走软件的域名策略。 | 
|  |      43BeautifulSoap      2024-01-30 11:58:38 +08:00 via Android 组个 tailscale 就解决的事哪需要折腾 dns tailscale 会自动给你判定最合适的路由。唯一问题就是手机上 tailscale 需要占用 vpn | 
|      44zsan3653nj      2024-01-30 11:58:55 +08:00 内部 用 内部的 dns 就 ok dnsmasq | 
|  |      46lonely701      2024-01-30 12:04:52 +08:00 via iPhone 路由器是什么品牌的?华硕路由器在防火墙设置页面打开 NAT Loopback 即可。多数路由器都有这个功能,可能在防火墙设置页面。 | 
|  |      47isbase PRO surge ponte 自带这个功能 | 
|  |      48bs10081      2024-01-30 12:25:39 +08:00 好奇這個問題為什麼會發生,我家用的是 ISP 給的數據機和 Router ,用 domain 在外面當然就是走外網,但是回到家以後,就會走局域網,感覺這個應該是正常的事情吧? DNS 解析的問題?好奇 | 
|  |      4954xavier      2024-01-30 12:56:49 +08:00 我局域网有软路由,可以在软路由加 host 解决这个问题 | 
|      50e3c78a97e0f8      2024-01-30 13:10:19 +08:00  1 你用 IPv6 就行了,我就是这么干的。 | 
|      51zhl      2024-01-30 13:10:41 +08:00 如果是光猫做路由不好解决,如果是桥连还可以折腾好。 | 
|  |      52zwlinc      2024-01-30 13:11:03 +08:00  2 我这里也可以提供一个思路,如果你用 tailscale 这样的组网工具的话,大可以全部解析到 tailscale 内部的 IP 上,tailscale 会自动“打洞”,在家就是走局域网,在外面就可能直连或走中转,这样就提供了一种统一的访问方法。等于说 tailscale 建立了一个 overlay network ,不用管底层到底如何连接。至于说 tailscale 在内网也走了 wireguard 加密等,这里面牺牲的一点性能在便利面前我认为是微不足道的。 | 
|  |      53nxuu      2024-01-30 13:19:10 +08:00 群晖上把 ddns 弄好以后 在路由器上加一个 host 在外面就走公网 ip 访问群晖 在家就是走内网 ip 没办法在路由器上加 host 也可以在本地电脑上加 host | 
|      54Yuhyeong      2024-01-30 13:22:55 +08:00 路由器没有带路由回流 改路由的 host 或者自建 dns ,别奇怪不奇怪,都是这么整的,不行你域名绑 ipv6 ,直接一步到位。 | 
|  |      55Kimyx      2024-01-30 13:45:46 +08:00 另外一种,DDNS 旁边的 QuickConnect 功能也可以实现,不需要额外设置 | 
|  |      56Hengtang      2024-01-30 13:53:04 +08:00 群晖建一个 DNS 服务器,路由器 DNS 指向群晖,DNS 里面重写域名对应地址到群晖局域网 IP 。你回复 5 楼说的“本来就是因为连不上群晖才提的问题。但是你的解决方法是先要连上群晖。。。”完全是你自己不动脑子,这个连上群晖本身就是从路由器到群晖的局域网,直接用局域网 IP 就行了,怎么可能连不上。 路由器支持修改 hosts 就直接修改 | 
|  |      57itskingname OP @Kimyx 群晖官方发布公告了,quickconnect 不再支持直链,一定要走中继。如果想直连需要用 ddns | 
|  |      58jinhan13789991      2024-01-30 13:57:56 +08:00 | 
|  |      59itskingname OP @Hengtang 你把钥匙忘在房间了,你需要先翻窗进房间,拿到钥匙以后,再翻出来,然后用钥匙开门进房间。 你这个方案,需要先让手机通过群晖的内网 IP ,连到群晖的 DNS 服务器上面,然后查到我这个域名在内网对应的 IP ,把这个 IP 返回给手机,然后手机再连这个 IP 。 我在猫和老鼠里面看到过这个剧情 | 
|  |      60laox0      2024-01-30 14:03:44 +08:00 | 
|      61bg7lgb      2024-01-30 14:12:03 +08:00 hairpin nat ,需要路由器支持。 在 RouterOS 上通过设置两条 Nat 规则 实现。 | 
|      62LoNeZ      2024-01-30 14:12:08 +08:00 太麻烦了感觉直接解析到 tailscale 这之类的 ip 就好了, 透过 tailscale 直接访问 | 
|  |      63Laoz666      2024-01-30 14:14:02 +08:00 说实话 威联通自然实现了 他先访问的外网,检测到在内网的时候会自己切换内网的地址 | 
|  |      64wheat0r      2024-01-30 14:14:40 +08:00 @itskingname #59 这根本不是什么回家取钥匙的问题,DNS 服务器可没规定自己必须运行在群晖上,你大可以装一台机架服务器放在家里跑 DNS | 
|  |      65itskingname OP @laox0 群晖的 app 需要连 | 
|  |      66itskingname OP @wheat0r 就是因为家里没有其他设备 24 小时开机,否则我直接搭建一个软路由就解决了 | 
|      67bobryjosin      2024-01-30 14:16:26 +08:00 via Android 看下来你需要一种合理优雅且简单的办法,不能路由器回流也不想用 vpn 和 dns ,那就只剩类似 zerotrust tunnel 或者 vps 全部走中转吧,最麻烦且合理办法。 | 
|      69kome      2024-01-30 14:24:09 +08:00 1. 添加两条 DDNS 记录,一条公网 IPv4 ,一条内网 IPv6 ,是否可行不清楚  2. 搭建内网 DNS ,DHCP 分发 IP 的时候直接分发内网 DNS 地址,不再分发公网 DNS 3. 只做 IPv6 的 DDNS | 
|      70sundev      2024-01-30 14:24:50 +08:00 这个目前两种方案: 1. 内网布置 dns 服务器,将这个域名解析到内网 ip 2. 设置路由器的 NAT ,关键词:NAT 环回、端口回流、hairpin nat 这两种时完美方案,其他方案都不完美 | 
|      71sundev      2024-01-30 14:29:35 +08:00 @sundev #70 这个问题的本质是路由器(网关)在进行 NAT 的时候没有进行 SNAT ,NAS 返回的数据包没有经过网关,直接发送到终端上,终端不认识该数据包,所以被丢弃。 | 
|  |      72totoro625      2024-01-30 14:30:55 +08:00 surge 判断是否处于局域网,自动切换 | 
|      73YoukuShow      2024-01-30 14:33:04 +08:00 只要你能拿到联通送的光猫的管理员权限就可以设置。 1 ,买个域名,比如:yyy.cn ,把 synology.yyy.cn 指向自己家 2 ,登录光猫:a. 把本地网络域名设置为 yyy.cn ; b. 群晖的 ip 给个 hostname ,比如:synology 3 ,内网用 synology.yyy.cn:5000 (或者 5001) 就能访问到了 4 ,登录光猫:允许端口 5000 (或者 5001) 的数据转发去群晖 这样家内外都能用 http://synology.yyy.cn:5000 访问了。 | 
|  |      74Puteulanus      2024-01-30 14:38:09 +08:00 其实 DNS 的解决办法好一些,你回家了还用公网 IP 访问 NAS ,肯定至少得到路由器走一圈,你要光猫没改桥接甚至还得去光猫上转一圈,但是走内网 IP 可能走硬件交换芯片/交换机直接就通信了 而且断网的时候 DNS 那个方案你是依然能在内网用域名访问到 NAS 的 这个过程复杂是你自己想象出来的,实际上走公网 IP 才是影响更大的那个方案。。 | 
|  |      75afirefish      2024-01-30 14:51:01 +08:00 送的路由器支持改 host 的话,直接在上面指定域名解析记录为内网地址。不支持的话,换个支持 openwrt 的路由器。( wr30u ,150 块) | 
|      76woody3rd      2024-01-30 14:53:55 +08:00 花哨 | 
|      77mikasa1024      2024-01-30 15:00:47 +08:00 之前也有过类似的问题 我家里的宽带没有公网 IP ,利用云服务器搭建了 tailscale 在外面访问家里的群晖。这样一来,家里局域网环境下群晖 IP 是 192.XXX ,外面使用 tailscale 访问的群晖 IP 是 10.XXX ,导致手机上的一些群晖 APP 来回改地址。 至于为什么在家里不用 tailscale 的 IP 访问群晖,是因为不想时刻开着 tailscale ,而且局域网中手机挂着 VPN 访问局域网设备也有点奇怪 看了楼上的一些回复,感觉可以这样解决: 域名指向 tailscale 群晖 IP ,同时家里路由器上设置 hosts 使局域网中域名指向 192.XXX ,就可以一直使用一个域名访问,但是如果路由器不支持设置 hosts 就不好弄了 | 
|      78Jack927      2024-01-30 15:02:19 +08:00  1 看了 op 的回复和附言,去了解下基础的网络知识吧。 > 我知道可以群晖搭 DNS ,然后使用自己的 dns 服务器。 然后 xxx 但是这样做非常奇怪。 你的需求是,“使用这个域名,无论在外网还是内网均能访问群晖”,那么域名解析经过 dns 有啥好奇怪的呢? 域名不经过 dns 解析才奇怪呢。 | 
|      79dasf53adf      2024-01-30 15:03:16 +08:00 NAT 回源,OPENWRT 有这个选项,如果找不到就手动加一个 SNAT ,目标地址是这个内网服务器的内网地址,然后源是同段地址,源地址转换为网关地址。或者用伪装。 | 
|      80Jack927      2024-01-30 15:04:37 +08:00 自建 dns/dns 重写的的情况下: 外网:dns 正常解析到 ddns 的 ip , 能访问。 内网: 走自己的 dns ,直接解析到内网 IP ,能访问。 | 
|      81dasf53adf      2024-01-30 15:08:02 +08:00 NAT 回源,NAT 回环,NAT 回流,找这三个关键词有选项就打开。如果没有就需要在做 IP 映射的网关上配置 SNAT 解决。不需要 DNS 服务器,太麻烦了。。。 | 
|      82dasf53adf      2024-01-30 15:10:35 +08:00 @Jack927  这是一个经典的 TCP 连接问题,甚至有专门的名词,NAT 回流,NAT 回环,NAT 回源。。。 用不到 DNS 的。做 SNAT 就可以。(源:服务器网段,目标:服务器局域网地址,转换为:网关地址) | 
|  |      83mohumohu      2024-01-30 15:13:12 +08:00 DNS 明明就是最优解,哪里奇怪了,DHCP 可以设置下发什么 DNS ,DNS 在你那个 NAS 也是 24 小时跑,不是已经满足了需求了吗?很多大企业也一直是这么干的,内部域名有专用的解析,建议 OP 补一下 DNS 知识。 | 
|  |      84itskingname OP @Jack927 #78 你可能看漏了。解析域名经过 DNS 不奇怪。奇怪的是 DNS 服务器运行在我即将需要访问的这个机器上。 要访问这个机器我需要解析它的域名,而如果要解析它的域名我就需要先访问它。但是我都能访问它了,我还解析域名干嘛? | 
|      85Jack927      2024-01-30 15:16:08 +08:00 @dasf53adf #82 从 OP 的情况来看,我认为群晖上直接 docker 点一下自建 dns 是最简单的方案了。 你说的这个诚然是高高级,底层上更直接。但是明显 OP 本人没有 OPENWRT ,一般的路由器也不具备这个功能。 | 
|  |      86itskingname OP @mohumohu 要访问这个机器我需要解析它的域名,而如果要解析它的域名我就需要先访问它。但是我都能访问它了,我还解析域名干嘛? | 
|  |      87ahjsrhj      2024-01-30 15:18:28 +08:00 DNS 对你来说就是最优解啊,你是不是理解错了 | 
|      88LinuShen      2024-01-30 15:18:34 +08:00 群晖不是有图形化的 DNS 服务器么,设置好转发器,然后 NAS 域名单独解析即可 | 
|      89Jack927      2024-01-30 15:18:38 +08:00  1 @itskingname #84 不奇怪。域名正常必然要解析成 ip 的不对吗? 没自建 dns 的情况下,全部使用运营商下发的。自建之后多了自己的 dns 服务,有何好奇怪的? | 
|  |      90itskingname OP | 
|      91ASmartPig      2024-01-30 15:30:23 +08:00 用的小米路由器,可以在路由器上自定义 hosts ,把主机的 DNS 都指向网关,内网就解析的内网地址,外网出去之后走外网解析 | 
|  |      92itskingname OP @ASmartPig 我回去看看联通送的路由器有没有这个功能 | 
|  |      93beyondstars      2024-01-30 15:33:39 +08:00 没有做环境复现和抓包,下列是我的猜测,仅供参考: 假设有下列环境: - 外网主机 ext: 203.0.113.101 - 光猫 gateway:WAN IP: 198.51.100.101 ,LAN IP: 192.168.1.1 - 你的内网手机 phone:LAN IP: 192.168.1.101 - 你的内网 srv: Web Server: LAN IP: 192.168.1.102 光猫配置的 DNAT: 198.51.100.101:28080 -> 192.168.1.102:80 从外网主机 ext 连接内网 srv: 1. ext 发出封包给有公网 IP 的光猫 gateway: IP[SRC=203.0.113.101(ext), DST=198.51.100.101(gateway)] TCP[SPORT=53103(random), DPORT=28080] 2. gateway 收到封包,做 DNAT 修改目的 IP 地址和目的端口,然后发给 srv: IP[SRC=203.0.113.101(ext), DST=192.168.1.102(srv)] TCP[SPORT=53103, DPORT=80] 3. srv 收到封包,然后回复: IP[SRC=192.168.1.102(srv), DST=203.0.113.101(ext)] TCP[SPORT=80, DPORT=53103] 4. srv 发出的 reply packet 首先到达 gateway ,gateway 默认对 LAN-to-WAN 流量做 SNAT ,因为这个封包的地址匹配一条之前配置的端口转发规则,所以 SPORT 也会改回去: IP[SRC=198.51.100.101(gateway), DST=203.0.113.101(ext)] TCP[SPORT=28080, DPORT=53103] 5. 外网主机 ext 收到 reply packet, 在它看来这就好像是 gateway 的 28080 端口直接发给它的,根本感觉不到内网 srv 的存在。 从内网主机 phone 通过公网 IP 198.51.100.101 和映射端口 28080 连接内网 srv: 1. phone 发出封包给 gateway: IP[SRC=192.168.1.101(phone), DST=198.51.100.101(gateway)] TCP[SPORT=48131(random), DPORT=28080] 2. gateway 收到封包,修改目的地址,然后发给 srv: IP[SRC=192.168.1.101(phone), DST=192.168.1.102(srv)] TCP[SPORT=48131, DPORT=80] 3. srv 收到封包,然后回复: IP[SRC=192.168.1.102(srv), DST=192.168.1.101(phone)] TCP[SPORT=80, DPORT=48131] 4. 根据 srv 的路由规则,这个封包不需交给 gateway 转发,可以直接通过以太网发给 phone, srv 对 phone 的 IP 地址做 ARP 解析,然后构造以太帧交给网卡. 5. phone 收到这个封包,TCP session 由一个四元组 ( SRC_IP, DST_IP, SRC_PORT, DST_PORT )确定,由于 sender 和最初的 DST 198.51.100.101 (gateway) 不一致,所以 phone 的 os 不认为这是之前那个 TCP session 的 reply ,所以丢弃封包。 解决方法其一,配置光猫(网关设备)的 hairpin NAT ,什么是 hairpin NAT: https://help.mikrotik.com/docs/display/ROS/NAT#NAT-HairpinNAT hairpin NAT 正确配置之后,在以上的第二步 (gateway to srv) 的过程中,封包的 SRC IP 也会被修改,那么 srv 的 reply 封包的 DST IP 就会变成 gateway 的,而不是最初的 real sender, 再由 gateway 发给 real sender. | 
|      94Jack927      2024-01-30 15:40:53 +08:00 @itskingname #90 不, 你没有。你如果内网使用 ip 访问,那就不会有你提出的问题了。 内网即然使用域名访问,那么域名的记录权威的解析是你的 ddns 的外网 ip ,你需要自己的 dns 重写为内网的 ip 。 必然要 dns 的,自己群晖上搞个有问题么? 如果你接受不了自己 dns 重写的这个结果,更高级和底层的方案就是也有不少人在说的 NAT 回环了 | 
|  |      95lxxself      2024-01-30 15:46:55 +08:00 @flyinghigherair #29 +1 直接就 clash 配置规则上外网和 ss 回家 | 
|  |      96Puteulanus      2024-01-30 15:48:24 +08:00 如果你的路由器支持直接改 hosts (影响 dnsmasq 解析记录),那你直接改 hosts 让域名生效; 如果你的路由器不支持改 hosts ,但支持改 DNS 服务器,那通过修改 DNS 服务器指向 NAS ,再在 NAS 上的 DNS 服务器里修改记录 如果你一定要奇怪为什么要走第二个这个绕一圈——那可不就是因为你路由器不支持,你又不换路由器嘛(狗头) 而且你的问题其实是在内网让一个域名返回特定的 IP ,至于这个 IP 刚好和内网 DNS 服务器是一个 IP ,这事可以看成是一个巧合 | 
|  |      97mohumohu      2024-01-30 15:51:02 +08:00 | 
|      98makedir002      2024-01-30 15:59:31 +08:00 via Android @itskingname 按照你这说的,这有啥奇怪的,明显就不懂非常基础的网络知识。ip 和域名都没理清楚。 | 
|  |      99waringid      2024-01-30 16:01:32 +08:00 1 、连接 WIFI 后无法正常访问的情况应该是 WIFI 网络的外网解析问题吧,试试公共的 DNS 例如 119.29.29.29 或是 223.5.5.5  2 、如果步骤 1 无法解决问题,通过容器配置 ph-hole 让后在增加对应域名的本地解析也可以解决 | 
|  |      100wclebb      2024-01-30 16:24:06 +08:00 楼上回答太多了,不知道有没有跟我回答雷同,直接写我自己的; 我自己也遇到这个问题。 主要是绕路,不走内网(一段时间被这个问题困扰了很长时间) 重定向 Synology.me ,简单粗暴。 Surge 等代理软件,当识别到某 Wi-Fi 时,自动启动模块或配置文件,把域名重定向内网。 Surge Ponte 代理内网,简单粗暴解决部分问题。 |