一、前言
cloudflare虽然是一家cdn服务商,但其丰富的规则配合workers往往可以实现很多我们所需要的功能,还有反机器人验证等等防护功能。
但是 cloudflare的IP现在经常被国内地区运营商间歇性屏蔽 ,之前通过 不良林大佬的视频初次了解了反代了CF IP的IP(也被称作非cloudflare官方节点) ,确实可以解决cloudflare国内访问慢的问题,参考了 中转cloudflare的安全隐患与隐患利用 这篇文章后知道这类 反代了CF IP的IP
其实可以通过像iptables这类中转程序 同端口转发到cloudflare,实现既加速访问 又用到了cloudflare某些功能
本文记录一下利用常见的中转协议搭建一个属于自己的 cloudflare反代IP
,类似前置代理
链路为:用户 >> 自己的vps >> cloudflare cdn >> 源服务器
本文是站在服务端视角,所做的均为对自己的服务端优化,让所有用户尽可能有更好的体验
而不是站在客户视角 去让自己更好的访问什么
二、搭建方法
其实原理很简单,就是将自己(速度快的)vps的端口转发到cloudflare对应的端口
测试中我会将我的vps 80/442/8080/8443 端口转发到cloudflare官网IP对应的 80/442/8080/8443
更多cloudflare允许的端口可以查看 官方文档
我测试机器都是境外vps 所以vps和cloudflare交互的数据不需要加密直接iptables转发就行(当然我也没有权限操作cloudflare服务器 也设置不了) ,这样并不会对cloudflare的IP造成任何影响
如果你是用的国内服务器,我不建议你直接将流量转发到cloudflare的IP,这样可能会使防火墙对这个IP进行封锁。你可以选择再拿一台国外vps组隧道并加密数据,这样防火墙只可能封禁你的两个节点机
法一:iptables中转
最直接的就是iptables直接转发,后续的方法也是基于 iptables/ 等端口转发工具开发的程序实现
我对iptables的端口转发操作不太熟悉,这里使用 arloor 大佬的一键脚本:https://github.com/arloor/iptablesUtils
此方法演示机器:5.78.90.112
1、执行脚本
1 | bash <(curl -fsSL https://www.arloor.com/sh/iptablesUtils/natcfg.sh) |
依次添加80/443等你需要的端口即可
你可以随意设置一个属于cloudflare cdn的IP,我这里简便就直接写的cloudflare官网
可以看到添加后这台vps会将所有的80端口流量(tcp&udp)全部转发到104.16.132.229:80
建议用其他cloudflare的IP而非cloudflare官网,否则可能会出现1034报错,下文有提到
2、测试
测试需要你的域名已经CNAME接入cloudflare(不会的可以参考:https://blog.tanglu.me/cloudflare-configure/#Custom-Hostnames)
因为cloudflare官方的限制,不能随意自选,因为即使SaaS接入后cloudflare也会每次检查你的接入域名是否CNAME指向 Fallback Origin。但是因为cloudflare dns服务器在国外(应该是在美国)这就让我们国内有机可乘,即国内可以自选,国外走官方CNAME
如下图,成功转发流量,类似前置代理
法二、利用端口转发管理面板
常见的端口转发管理面板有 咸蛋面板 和 极光面板 (都支持ipv6)
咸蛋面板免费版只支持iptables协议,极光面板纯免费支持 iptables socat gost ehco realm brook等中转协议,这里我以极光面板的realm中转为例
此方法演示机器:5.78.101.164
1、一键脚本安装极光面板
执行官方一键安装脚本,执行后选 1. 安装 极光面板
,设置管理员邮箱和密码,通过 http://ip:8000 访问
国内机器连接不了github可能需要自己想办法,似乎docker好像也被国内屏蔽了
1 | bash <(curl -fsSL https://raw.githubusercontent.com/Aurora-Admin-Panel/deploy/main/install.sh) |
添加中转服务器,这里我演示就用这台面板机器了
显示连接成功后,点击查看端口,添加端口即可,我这里测试就添加80和433
添加转发,选择你喜欢的中转程序(有些不是中转程序而是代理程序)
激光面板还可以限制端口的流量和出入站速度,点击 修改端口
进行配置
如这个配置就表示443这个端口出站+入站总能量为2TB,超出后限速1Mbit/s(约为1Mbps)
2、测试
测试正常
法三、使用nginx的四层转发
这里我直接用cdnfly提供的转发程序,我自己对nginx的stream模块不太了解
安装配置cdnfly可以参考我这篇记录:使用cdnfly自建CDN并配置CC防护
此方法演示节点机器:159.223.69.251
我80 443被nginx占用了,就用的8443端口反代的 1.0.0.1:8443
测试正常
三、借用其他人的反代IP
上面三种搭建方法都是使用的自己的vps,大多数用户可能想(不道德的)直接用其他人已经反代好的IP,其实是可以的,这里记录一下知道这些反代IP可以做什么
此节的测试IP为我之前搭的已经反代CF的IP:5.78.90.112
1、加速自己的网站
上一节搭建中的三个测试都是CNAME接入到cloudflare自选IP,你也可以这样做,方法一模一样 这里就不再演示
2、加速访问其他人的网站
比如我要加速访问 www.nodeseek.com ,我没有对该域名DNS的解析权,这里只能修改hosts文件
win10的hosts文件在 C:\Windows\System32\drivers\etc
在上节中 5.78.90.112:443 是转发到了 cloudflare.com:443
这里如果访问nodeseek的话,就不能填写cloudflare.com 会产生 1034报错
可能一些IP是cloudflare自己服务专用的吧(不过这也不好解释为什么cname接入后就可以使用这些IP),你换成其他的一个IP就可以了 例如 digitalocean.com:443
3、富强上网
这个不难,和套cdn/中转服务 类似
server填写反代的IP 有域名的话clash是设置sni v2rayN是设置伪装域名(host)
可以参考 不良林大佬的教程
这里不建议瞎搞的小伙伴直接使用扫描到的国内IP,一个是不安全 你无法判断数据是否被监听,另一个是可能扫描到的国内机器到国外(如cloudflare)速度并不好 可能和你直连cloudflare速度差不多(毕竟都是国内访问国外),如果真的想用国内IP 建议再买个国外vps搭隧道,并确保国内机器和国内机器连通速度(可以使用iperf3等工具速)
四、常见问题
- 为什么开头要强调服务端视角和客户端视角
因为如果文中端口转发机器的所有者不同 会造成机器的属性不同。比如如果这台端口转发机属于用户,那么他(用户)只是用来让自己一个人更好的访问,机器由用户操作,机器的角色相当于用户的前置代理(类似于客户端开启富强软件)
- 作为用户 我可以直接使用反代了CF IP的IP吗
的确可以 滥用 借用这些IP来实现自己某些目的
- 此方法cloudflare防ddos还起作用吗?
不起作用,用自己vps端口转发后,防dd效果完全取决于你的前置代理机,也就是取决于你的前置代理机的机房
- nat机可以吗?
可以,例如将nat机的50001端口转发到cf 80端口,将50002端口转发到cf 443端口,但是这样访问的话需要带上对应的端口号(如 https://blog.tanglu.me:50002)
- 只能转发到cloudflare吗?
很明显不是,你可以转发其他cdn的IP或者像 扩展 中的搭建隧道cdn等
- 只能处理http协议的内容吗?
iptables gost realm等端口转发工具都支持tcp所有流量中转,nginx四层代理实测可以支持 ssh rdp等tcp流量(可能支持所有tcp流量 我也不太清楚)
- 我的vps80端口必须转发到其他IP的80端口吗?
很明显不,你可以将80转发到81 或者81转发到80,我的示例是同端口转发只是为了方便演示
- 其他人是否可以扫描发现并使用我的反代IP
是可以的,或许这篇文章可以帮到:通过zmap和zgrab2扫描cloudflare的反向代理 - 矢澤にこ (ni-co.moe)
反代CF的IP有一个很明显的特征 就是访问其IP 不管是否会报错,响应头的server一定是 cloudflare
这个通过cloudflare的规则也更改不了。扫描这类IP可以通过 https://fofa.info ,教程可以参考 不良林大佬的教程
- 如何设置sni白名单阻止其他人扫到并使用
暂时不清楚。它们扫描一般是根据响应头的 server 为 cloudflare 来判断
五、扩展
除了反代cloudflare的IP,你可以反代任何cdn,不过似乎没啥用用 :)
我尝试过使用端口转发来搭建一个隧道cdn,结果可以用 但还是有细节待完善,这里记录一下
情况是这样的:
我有一台国内vps,但是资源是放在几台国外服务器,我最初想使用国内vps做cdn节点,但很快意识到一个问题,就是我在晚高峰使用iperf3测试国内vps和我三台国外vps的网络速度,结果是cdn节点和我一台机器之间速度很好,但是和其他两台机器之间的网络很差。国内带宽贵 我没法再买一台国内vps 将文件放在上面,另外因为ddcc稳定性的问题 我也没法直接将文件放到这台国内vps上。
最后就是尝试了一些商家,找了一个晚高峰和我国内vps能跑满的机器做cdn后端节点,在国内机器上搭建端口转发程序 转发到这台国外机器上,这样一个隧道cdn就组好了。将域名解析到国内vps的IP 可以正常访问
数据包为 用户 >> 国内vps(iptables转发) >> 国外vps(cdn程序) >>文件服务器
最后感觉这样还有一个优势就是:之前我的cdn节点既要优质线路加速用户访问,又需要较高的配置来运行cdn程序,这往往代价比较高(因为一般优质线路机器配置很低往往只有1核0.5GB内存 加配置要贵很多)。而隧道cdn则解决了这一点,我只需要低配置的优质线路机器来运行iptables中转程序,吃配置的cdn程序等放到一台线路普通的高配置vps上 这样可以节省一部分费用
例如我想使用阿里云的机器,价格如下图。之前我需要花费$19购买2H4G配置来运行cdn 但是我每月仅需要200GB的流量,$19很大部分是流量费用。
现在我只需要购买一台$3.5的最低配机器运行iptables(占用内存低于50MB)将流量无脑中转,再花费€6购买一台普通线路的vps运行cdn程序即可,这样几乎节省了一半的成本。
有小伙伴可能会疑惑
既然用户访问中转机 那么运行cdn程序的机器就无法实现对访客进行拦截等 cdn防护规则不起作用
其实不是,因为这两台机器整个才是一个cdn节点或者说运行中转机的机器才是cdn节点,在cdn面板添加cdn节点时 你填写的cdn IP是运行中转程序的IP,而不是运行cdn程序的IP我用的是cdnfly,运行cdn机器的文件设置确实无法反馈给中转机,导致无法封禁用户IP 暂时不清楚如何解决(似乎iptables有cc速率限制 但是我不会)
六、杂谈
我不清楚是iptables realm socat gost brook nginx四层转等发哪个占用资源更低,也不清楚不同程序的效率和速度是否有差异,有知道的小伙伴可以评论区留言告诉我,实测iptables占用不超过50MB