前言
笔者家里比较大一点,但是箱子预留的空间小了,导致只能放一个交换机跟光猫,光猫接上交换机后再分发
然后遇到了一个问题,问题我能描述出来,不过在网络上找了半天也没找到这个问题叫什么,后来才查到叫IP回流,下面我描述一下从最开始不懂的时候遇到的这个问题到解决这个问题

我家里的网络是带公网IP的,有一台NAS设备和几台电脑,家里所有的网络设备全部都连着交换机的,考虑到在外面可能会用到NAS,所以对NAS的端口进行了映射,映射好了之后,我断开家里的路由器尝试用移动数据进行连接公网IP的NAS,成功链接进去,之后我在用家里的电脑以同样公网IP的形式去访问NAS(注意,这个电脑跟NAS都是处于同一个局域网内),毫不意外,访问失败,拒绝链接请求。但是我用 192.xxx.xxx.xxx 本地IP去访问这台NAS,是可以正常进去的,这个大概就是我能描述的问题。

但是这个问题给我一个很头疼的事情就是,我在家默认自动链接路由器,而路由器是属于同一个局域网上,那我的NAS的地址只能通过本地IP去访问,如果我没在家里,我就用公网IP访问,导致我家里面在手机上使用这个设备非常麻烦,要来回切地址,因为我的相册这些都备份在NAS里面了。
我当时完全不知道怎么去找这个问题,我只会描述这个问题,断断续续找到一些相似的问题,再精确到这个问题叫做IP回流,局域网里面的设备无法通过外网的地址去访问跟自己同一个网络环境的设备。
解决方案一: 路由器设置
路由器NAT设置中,打开 Nat hairpin 功能
修改路由器的 Host 文件,跟方案二一样,但是前提是需要DDNS来让域名固定好公网IP
解决方案二: 修改hosts做劫持
这个方案只针对单个电脑或设备,而且IP必须固定,或者用域名做DDNS直接指向域名,很有局限性,如果该设备一直要来回切网络环境是非常不方便的(比如电脑搬来搬去),只适合长期跟设备在同一网络环境下使用
打开hosts的文件,以记事本的方式打开,下面为hosts的文件位置

将你能访问到的 192.xxx.xxx.xxx 的本地地址直接指向公网IP地址,直接在文本下方添加即可,这样既可以本地IP访问也可以公网IP访问.
下面假设你想访问设备(这里指的是笔者的NAS)的IP地址是 192.168.1.124
公网IP是: 113.xxx.xxx.xxx ,那就以下面的方式写上hosts这个文件的文本里面,如果你有域名则把公网换成域名
192.168.1.124 113.xxx.xxx.xxx192.168.1.124 域名

解决方案三: 桥接
这个问题基本上是一劳永逸的,但是比较麻烦,而且会多占用一个路由器的设备,但是如果该路由器比较旧或者硬件性能不好可能会经常造成网络卡顿,路由器设备太旧也可能不支持IP回流,接着还需光猫的管理员密码(电信光猫管理员只能问帮你拉宽带的人,现在都是随机管理员密码),路由器性能好的情况下,好处就是你的网络会更稳定,速度更快更好用。
记住这个页面,或者截图下来,链接名称一定要选带 INERNET 字样的,模式 Bridge 为桥接模式,接着让路由器的线接入光猫后输入宽带账号密码进行拨号

解决方案四: 内网DNS服务器
这个方法比较麻烦,但是也是属于一劳永逸的事情,需要一个能24小时运行的设备,Nas的有威联通或者群晖,群晖有一个Dns Server的功能,打开后之后将你内网IP和公网域名做一次解析,开启之后再路由器的DNS设置首选为你群晖的内网IP地址,备选再用其他的DNS,威联通则需要再 Docker 容器拉取镜像,这个比较麻烦。