通过Cloudflare实现纯ipv6网站ipv4访问
前言以及原理
随着时间的推移,家宽中ipv4的发放可以说越来越严格,但是随着ipv6技术的进一步成熟(可能还有运营商的业绩要求),ipv6的公网地址可以说是人人都有了,无需复杂调整,无需软路由,无需openwrt,大多数家庭的设备基本只需要打开ipv6桥接,让光猫接管ipv6,就能获取ipv6地址。
这里给出的截图是openwrt系统作为参考
理论上家庭服务器中的服务或者路由器接一个ddns就能随意访问了,但是大部分家宽有一个问题,对于常用端口,如80
,443
端口的截断。如何在外网环境(有ipv6)直接使用域名https访问服务以及如何在某些只有ipv4的特殊环境—-校园网,公司WI-FI,来实现只有纯ipv6公网的服务的访问呢。这是本文将要探讨的问题。
总所周知,Cloudflare可以称得上互联网大善人,作者的网站也是一直放在CF上面托管的。CF的CDN代理:即黄色小云朵,其实不只有防ddns的能力。
nsloookup
查看使用了CF代理的子域名ip可以发现,一个网站CF总共提供了4个ip,两个v6的地址和两个v4的地址。并且无论原来的dns绑定的是v4ip还是v6ip。
从这里想到是否可以通过CF的代理实现纯v6地址的v4访问。
谷歌搜索了一下,发现两种方案
1.修改或者反代服务端口到CF默认检查的端口
2.使用回源规则(Origin Rules)代理端口
方法一:反代服务端口到CF默认检查的端口
CF默认检查的端口有:
1 | ============================================================ |
理论上可以通过lucky,nginx,caddy等进行反代或者直接修改服务到对应端口(注意http和https对应不同端口),笔者通过fnos商店自带的带gui的lucy进行了尝试,代理了2083端口,开启了TLS,但是并没有成功,怀疑所在地区的移动将这些端口也进行了封锁。
参考教程飞牛fnos利用lucky反向代理实现ipv4环境访问ipv6公网nas
方法二:使用回源规则(Origin Rules)代理端口
准备工作
- 拥有一个通过CF管理的域名
- 设置AAAA域名解析绑定到自己的家庭v6公网服务器,并且不设置CF代理(小灰云),并且在服务器端设置好ddns来应付家宽几天一变的ip。这个域名用来纯v6访问以及保证其他服务器能正常访问。
设置用来v4访问的域名
最好直接通过cname指向之前设置的纯v6域名。
理论上说这时候如果我们的服务没有封锁任何端口,就已经能通过现在设置的域名访问。但是运营商封锁了常用端口,这就需要下面的神奇操作,借用CF的服务器进行中转。
设置回源规则(Origin Rules)
首先打开侧边栏的规则-概述
其次点击右边显示所有规则这里与旧版的界面不同,不能在侧边栏直接找到。CloudFlare的省钱神奇小妙招
找到我们需要的Origin Rules,点击创建规则,名字可如图设置。
设置选项如下图
这里重写到fnos默认的https端口5667,记得访问的时候使用https://
这样其实就已经能够访问了,通过https://v4fnos.example.com/
配置Cloudflare Workers 实现v4走cf中转,v6跳转到纯v6域名直连
配置Workers
首先返回CF主页面,配置Workers
进入Workers 和 Pages,点击创建一个默认的halloworldworkes,
创建完成后再点击编辑代码,使用下面代码替换原有代码,注意编辑好自己的域名
1 | addEventListener('fetch', event => { |
逻辑:判断客户端ip是否为公共v6地址,是则302重定向跳转到https://homefnos.example.com:5667/
不是v6地址则走Origin规则正常代理使用
点击部署
配置域名的Workers路由(匹配域名和Workers)
来到域名管理界面,点击侧边栏Workers 路由
添加路由,匹配v4访问的域名
这样就完成了所有的配置,实现了v4走CF中转,v6直接直连。
不足
不难发现CloudFlare实现的中转一次只能匹配一个端口,而且在访问速度十分慢,只能用于管理的web界面,影音视频流相关服务基本卡到不可用。
其实可以通过修改fnos默认的nginx配置文件,实现每个通过端口通信的服务都转换成5667端口下的子路径服务(类似飞牛影音)来白嫖飞牛的中转,但是目前fnos还处在公测阶段,每次更新都会洗掉nginx配置文件,所以不建议这么做。