家庭数据中心系列 通过tunnel技术,让无公网IP的家庭宽带也能白嫖cloudflare实现快速建站(推荐)
本文最后更新于 205 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。

前言

cloudflare提供的针对个人的免费CDN方案在除了天朝之外的地方都很好使,不过由于cloudflare正常情况下只接受二级域名以NS的方式接入,并且通过DNS设置的时候需要指定公网IP地址(动态公网IP不影响,可以通过api的方式实时更新cloudflare DNS设置的A记录;是否有80和443端口也不重要,可以通过Origin Rules设置非标源端口),这对没有公网IP的朋友就非常不友好了(大部分家庭宽带)。

但是,没有公网IP、没有HTTPS 443端口是不是就不能白嫖cloudflare了呢?

当然不是,都说了那是正常情况下,那么非正常情况下如何白嫖cloudflare?这就要依靠cloudflare的tunnel技术了。其实,所谓tunnel,就是在你站点的”本地”网络安装一个”连接器”,从而直接将你的本地网络和cloudflare逻辑上”直接”连在一起,就和以前的vpn原理是一样的,这样一来cloudflare就能直接访问你本地网络中的站点,从而回避了前面提到到各种不利的网络条件:不管有没有公网IP,不管有没有443端口,不管你用的哪个国内运营商的家庭宽带或者云供应商的云主机,都可是直接使用cloudflare建站了。

部署

(可选)激活Zero Trust 的Free计划

如果以前未使用过Zero Trust功能,第一次使用需要进行初始化,点击下图红框中的Zero Trust:

image.png

下图红框中的Team name随意填写即可:
image.png

选择Free计划:
image.png

添加付款方式,推荐双币信用卡:
image.png

填写信用卡信息(仅验证,不会扣款),完成配置
image.png

创建tunnel

image.png

点击下图红框中的Create a tunnel按钮:
image.png

这个tunnel我是准备部署在腾讯云的轻量服务器的,所以tunnel名称我取为tencentcloud,然后点击右下角红框中的save tunnel按钮:
image.png

选择部署方式

cloudflare的tunnel支持多种环境:windows,mac,debian,redhat还有docker,这里大家根据自己的实际情况选择即可,我选择了docker方式,其实Debian方式也行,我的腾讯云轻量服务器就是Debian的,不过docker的方式更干净和便于维护,是我优先使用的方式:

image.png

把上图红框中的命令先复制下来,这个命令不完整,需要添加内容,完整的下一节。

在腾讯云轻量服务器创建docker版的cloudflare connector

惯例在腾讯云轻量服务器上先创建需要映射到容器内的目录

mkdir -p /docker/cloudflare/data

创建docker版connector:

docker run --name cloudflare -d --restart=always \
-v /docker/cloudflare/data:/etc/cloudflared \
cloudflare/cloudflared:latest tunnel --no-autoupdate run --token xxxxxx

大家注意,上面的命令相比从cloudflare复制的主要多了第一行和第二行的内容,第二行的-v参数如果不加我的cloudflare connector的状态会不正常。正常状态的connector如下:
image.png

配置域名及应用的URL

在Tunnel界面选择刚刚创建的tencentcloud最右边红框中的configure:

image.png

依次选择:”Public Hostname”-“Public hostnames”:
image.png

出现以下界面:
image.png

4个红框是我们需要填写的内容,假设我们在cloudflare上的域名为example.com,而我们想添加的主机是www,腾讯云服务器对应的内网IP地址为10.0.0.3(不要直接用云服务器的公网IP,因为云服务器的公网IP是通过映射来实现的,服务器本身是私有地址,也不要使用127.0.0.1,所以只能使用服务器的内网IP地址),站点端口为80,则填写的信息如下:
Subdomain:www
Domain:example.com
Type :http
URL:10.0.0.3:80

Type使用http协议,因为cloudflare会对外自动提供https访问。

如果docker版connector是安装在家庭宽带内网,则URL直接使用内网站点的内网地址和端口即可。

其实这样配置的结果是在这个域名的dns里多了一个主机名为www的cname记录,其记录值就是tunnel的隧道id:

image.png

同理可以添加多个应用。
注:如果上面URL指定的应用会绑定主机名,例如应用是nginx,且站点指定了server_name,那么需要根据前面配置的域名在nginx的server_name里添加对应的域名,在上面的例子中是www.example.com,否则无法正常访问。

访问

直接使用https://www.example.com即可访问内网应用。当然,使用cloudflare发布的应用,直接国内访问速度会比较慢,我后面其他文章会探讨速度优化的问题,不过总的来说,如果主要访问的用户是国内用户,且对体验要求较高的话,还是尽量备个案为好,我现在2个域名,一个备案,主要供国内用户访问,因为要使用腾讯云的CDN;另一个域名就放到cloudflare上,主要供国外访问,也算2种方式互为备份。

博客内容均系原创,转载请注明出处!更多博客文章,可以移步至网站地图了解。博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。

评论

  1. 小鱼儿
    Windows Edge 128.0.0.0
    5 月前
    2024-9-14 16:59:32

    请教这种方法能不能进一步优化网速,或者下一篇指路的文章。我目前使用的是cftunnel+traefik的方案,实现内网穿透+反向代理,还有没有进一步优化的空间,感谢指点!

    • 博主
      小鱼儿
      Macintosh Chrome 128.0.0.0
      5 月前
      2024-9-14 20:43:55

      可以啊,你使用tunnel只不过实现了最基本的的将内网的网站发布出来而已,才刚开了个头,后续优化还多着呢,网站加速、网站安全,你可以跟着我置顶的cloudflare学习地图一步一步的来。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       
error:
zh_CN
春节
快乐