我个人几年前(2018)就在家里建立服务器,从最初的arm开发板(树莓派、nanopi、orange pi)到如今的标准机架式设备;于是自始至终我都希望所有的数据都可以存储在我本地的服务器上,当然博客也是如此,在这几年内我前后从 购买VPS建立FRP中转 到在VPS上搭建Nginx Proxy Manager代理,如今我决定更近一步,使用Cloudflare自带的Origin Rules功能实现站点的非标准端口的直接代理,在省去购买VPS开销的同时还使站点获得了DDOS防护(虽然对于国内用户来说是上了一层减速器)

首先需要更改域名的权威DNS服务器(名称服务器)至Cloudflare 并 在局域网内搭建好需要代理的站点。

既然要使用Cloudflare代理站点,那必须首先需要让Cloudflare可以正常访问到站点,所以便需要在网关(路由)中设置防火墙规则(NAT转发),以Roster OS为例(wordpress条目)

Cloudflare支持以下HTTP端口代理:80 8080 8880 2052 2082 2086 2095 支持以下HTTPS 端口:443 2053 2083 2087 2096 8443

# 防火墙规则代码 (自行酌情修改)
/ip firewall nat add action=dst-nat chain=dstnat comment=wordpress dst-port=2083 \
in-interface=pppoe-out1 protocol=tcp src-address-list=CloudFlare to-addresses=\
10.10.10.12 to-ports=443

根据截图可知,该规则是将外部pppoe-out1接口的2083端口转发至局域网10.10.10.12的443端口,同时为安全起见我仅允许来自CloudFlare的ip访问,为图省事站点https配置的CloudFlare自签发证书。

# Cloudflare代理服务器ip代码
/ip firewall address-list
:do { add address=173.245.48.0/20 list=CloudFlare } on-error={}
:do { add address=103.21.244.0/22 list=CloudFlare } on-error={}
:do { add address=103.22.200.0/22 list=CloudFlare } on-error={}
:do { add address=103.31.4.0/22 list=CloudFlare } on-error={}
:do { add address=141.101.64.0/18 list=CloudFlare } on-error={}
:do { add address=108.162.192.0/18 list=CloudFlare } on-error={}
:do { add address=190.93.240.0/20 list=CloudFlare } on-error={}
:do { add address=188.114.96.0/20 list=CloudFlare } on-error={}
:do { add address=197.234.240.0/22 list=CloudFlare } on-error={}
:do { add address=198.41.128.0/17 list=CloudFlare } on-error={}
:do { add address=162.158.0.0/15 list=CloudFlare } on-error={}
:do { add address=104.16.0.0/13 list=CloudFlare } on-error={}
:do { add address=104.24.0.0/14 list=CloudFlare } on-error={}
:do { add address=172.64.0.0/13 list=CloudFlare } on-error={}
:do { add address=131.0.72.0/22 list=CloudFlare } on-error={}
/ipv6 firewall address-list
:do { add address=2400:cb00::/32 list=CloudFlare } on-error={}
:do { add address=2606:4700::/32 list=CloudFlare } on-error={}
:do { add address=2803:f800::/32 list=CloudFlare } on-error={}
:do { add address=2405:b500::/32 list=CloudFlare } on-error={}
:do { add address=2405:8100::/32 list=CloudFlare } on-error={}
:do { add address=2a06:98c0::/29 list=CloudFlare } on-error={}
:do { add address=2c0f:f248::/32 list=CloudFlare } on-error={}

导入完成后在ip->firewall->address lists和ipv6->firewall->address lists下通过筛选“CloudFlare”可以看到如下图内容。

登陆到CloudFlare控制台,Rules -> Origin Rules ,可以看到每个账户有10个免费的规则,点击Create Rule创建规则。

Rule name 填写域名前缀,Field选择Hostname,Operator选择contains,Value填写域名主体,在下方Destination Port选择Rewrite to…并填入Nat转发至外部的端口2083。完成如下图

最后来到控制台的DNS界面,为域名解析记录开启CDN代理,如下图