为什么内网服务不能直接被外网访问
访问服务,本质上是通过公网 ip 定位服务地址,然后进行访问;所谓内网服务,其实就是在局域网环境搭建的服务,比如家庭宽带环境,这就意味着,内网服务没有公网 ip,也就无法被外网访问。
为什么家庭宽带没有公网ip
早期的时候,家庭宽带很少,可能会分配公网 ip,但是后面网络运行商就发现不对劲了,因为公网 ip 是有限的,还是全世界共用,家庭宽带越来越多,如果每个都分配公网 ip,根本不够用,所以现在网络供应商基本不会在分配公网ip 给家庭宽带了。
ipv6 解决方案
幸运的是,ipv6 (上面说的公网 ip 指的是 ipv4)出现了。
ipv6 有128位长度,号称可以给世界上每粒沙子都编上地址,可以彻底解决 ipv4 地址枯竭的问题。
由于 ipv6 数量充足,所以网络运营商在提供宽带的时候,也不吝啬会提供 ipv6 地址。内网服务有了 ipv6 地址,就可以通过 ipv6 地址被外网访问了。
配置服务通过 ipv6 访问
仅有ipv6 地址还不行,还需要调整一些配置。
光猫关闭防火墙
登录光猫,账号密码一般在光猫背面可以看到。
路由设置成桥接模式
域名添加AAAA记录
没有域名也可以使用 ipv6 直接访问,但是无法使用 https,不建议。获取免费域名可以参考我之前的文章——永久免费域名
我的域名是托管在 cloudflare 上面的,配置如下
启动内网服务
为了测试,我们可以简单写一个 web 服务并运行
配置caddy反向代理内网服务
如何使用caddy
,请参考我之前的文章——caddy2
Caddyfile
配置如下
test.12358134.eu.org {
reverse_proxy 127.0.0.1:2023
}
修改配置后,记得重启 caddy2。
通过域名访问服务
上面的配置已经完成,就可以通过域名访问服务了。
可以看到,能够正常访问。
总结
ipv6 基本就是现在内网服务的最优解了;但是,实现并不是一帆风顺的,我也是做了多次尝试才调试通的。不同的光猫,路由,还有网络供应商都可能导致配置的变化,所以大家在配置的时候可能要多尝试一下。
如果实在搞不定,可以参考我的另一篇