



























此文也作为本站网络架构分享
图片是架构完全体展示
(图片可点击后放大查看)

@startuml
left to right direction
actor 访客 as visitor
package "互联网" {
note "博客域名" as blog_address #orange
node "DNS服务器" as dns {
component "境内 cname 解析" as cname_cn
component "境外 cname 解析" as cname_intl
}
}
node "境内CDN" as cdn #lightblue {
component "CDN提供的域名" as cdn_address #orange
component "主回源地址\n(填写阿里云服务器IPv4地址)" as primary_origin #lightblue
component "备用回源地址\n(填写CF提供的泛播域名)" as backup_origin #lightblue
}
node "阿里云服务器" as aliyun {
component "FRP服务端" as frps #palegreen {
component "四层转发" as layer4_forwarding #palegreen
}
}
node "家庭网络" as home {
component "FRP客户端" as frpc #palegreen
component "服务器" as home_server_1 {
note "实际部署中,这是一台树莓派3b+" as raspberry_pi_note #yellow
component "Nginx" as home_nginx #pink {
component "SSL证书\nacme自动续期" as ssl_cert #pink
}
component "动态公网IPv6" as ipv6
component "ddnsgo服务" as ddnsgo
}
component "其他内网服务器" as internal_server
}
node "Cloudflare" as cf #skyblue {
note "CF要求: SaaS回源域名(回退源)是一个在 Cloudflare 的 DNS 管理区域中创建的,并且启用了 Cloudflare 的代理功能的域名" as cf_note #yellow
component "CF提供的泛播域名" as anycast_address #orange
component "DNS托管" as cf_dns #skyblue {
component "SaaS回源域名\nAAAA记录" as aaaa_record #skyblue
}
}
note "SaaS回源域名\n已开启CF代理\n(IPv4/IPv6双栈)" as saas_origin_address #orange
visitor --> blog_address : 访问博客
blog_address --> dns : DNS查询
dns --> cname_cn : 境内解析分流
dns --> cname_intl : 境外解析分流
cname_cn --> cdn_address : 境内流量
cdn_address --> primary_origin : 主回源
primary_origin --> frps : HTTPS回源\n(443)
frps --> layer4_forwarding : 四层转发\n(TCP)
layer4_forwarding --> frpc : FRP隧道\n(7000等端口)
frpc --> home_nginx : 本地转发\n(443)
cdn_address --> backup_origin : 备用回源
backup_origin --> anycast_address : 回源请求
anycast_address --> saas_origin_address : 根据Host头,回源到SaaS回源地址
aaaa_record --> home_nginx : HTTPS回源\n(443)
cname_intl --> anycast_address : 境外流量
saas_origin_address -> aaaa_record
ipv6 <-- ddnsgo : 监测变化
ddnsgo --> aaaa_record : 更新AAAA记录
home_nginx --> ssl_cert
ssl_cert --> internal_server : 根据Host头反向代理\nHTTP转发(80)
aliyun -[hidden]-> cf
@enduml
成本低
访问速度快
隐藏源 IP 防范 DDoS 攻击
智能分流抗攻击
稳定性好
DNS 国内外分流解析
CDN 主备双回源机制实现在 frp 服务不可用的情况下自动容灾切换。
家里云实现零成本服务器托管,不受限于云服务器羸弱的性能以及较低的带宽
安全合规架构
可满足国内备案合规性要求
其他优势
此部分属于知识点同步,并不是部署资源要求。
最简单的路线,就是用 ICP 备案时的云服务器自建一个 frp 服务器。
云服务器部署 frps 软件,本地部署 frpc 软件。
通过 ICP 备案后可免费使用的国内 CDN 或者直接 DNS 解析到云服务器即可访问站点。
具体如何建设不多阐述,网上相关教程很多,这并不是本文的重点。
要逐步建设上面“完全体”,请看路线 B。
这一步需要的资源:主域名、能访问上 Cloudflare 后台、本地部署 DDNS-GO 服务
必要步骤:本地部署 SSL 证书
注:你可以自己部署能免费自动申请 SSL 证书的服务,来避免 SSL 证书过期,如:宝塔面板自动申请、1Panel 面板自动申请、acme.sh、CertD、Certimate 等
看起来很美好,可惜国内访问速度及其慢(3s+反应速度,传输速率低)
这一步需要的资源:完成域名 ICP 备案
注:域名甲、域名乙均为主域名的子域名(当然也可以是 @)
配置注意点:域名乙一定要启用 Cloudflare 代理,将 IPv6 only 转换为 IPv4+IPv6 双栈。这些 CDN 明确说明设置域名回源时,不支持解析到 IPv6 Only 的域名。
在国内 CDN 加速的效果下:除了第一次访问需要回源,速度较慢,后续访问可以用秒开来形容。
注意:如果你 CDN 配置的合适,全部的资源,包括页面的文档(Chrome DevTools 的 network 中显示为 document)也能被 CDN 缓存分发。那么到这一步你的站点网络访问情况就非常好了。再通过精妙的设置定期回源刷新,或者手动去 CDN 后台管理进行刷新和预热,那体验可以非常棒了。
这一步需要的资源:一台有公网 IPv4 的云服务器(能部署 frps 即可)、本地部署 frpc 服务
此时你 CDN 回源主要走自建的 frp 服务,反应速度已经相当快了。
同时 CDN 备用源走 Cloudflare 路线,保证在 frp 服务无法正常工作的情况下,站点也能正常回源。
现在唯一的问题是国外流量也会走国内 CDN,抗攻击能力和访问速度上还有待提高。
这一步需要的资源:第二个域名(可以选择非常便宜的域名后缀)、能访问上 Cloudflare 后台、能使用国内 CDN(比如阿里云 DNS、腾讯 DNSPod)
简单的说明:自定义主机名(Cloudflare for SaaS)保证你可以让 DNS 不托管在 Cloudflare 的域名能使用 Cloudflare 泛播,代理功能的服务。
情景模拟加深理解:假设这个 DNS 不托管在 Cloudflare 的域名叫域名 A。同时域名 B 的 DNS 托管在 Cloudflare 上。
域名 B 设置为 Cloudflare for SaaS 的回源域名(回退源),通过 a/aaaa 记录解析到实际的家庭服务器,然后启用 Cloudflare 代理功能(这是 Cloudflare 要求,回退源必须是一个在 Cloudflare 的 DNS 管理区域中创建的,并且启用了 Cloudflare 的代理功能的域名)。
域名 A 的 DNS 解析设置 cname 记录为 Cloudflare 泛播域名或 a 记录设置为 Cloudflare 泛播 IP(这就是所谓 Cloudflare 优选 IP 发挥作用的地方)。
当访客访问域名 A,DNS 解析后,实际访问 Cloudflare 泛播 IP/域名。Cloudflare 手动请求后,根据你的 Host 头(此处是域名 A),Cloudflare 就会把访客的流量导到实际的 SaaS 回源域名。再通过 SaaS 回源域名的 DNS 记录解析到实际的家庭服务器。
恭喜你!如果做到这一步就已经完全部署完毕了,享受部署好的网络吧。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。