惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
L
LINUX DO - 热门话题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
V
V2EX
GbyAI
GbyAI
量子位
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
S
SegmentFault 最新的问题
O
OpenAI News
N
News and Events Feed by Topic
博客园 - Franky
爱范儿
爱范儿
Forbes - Security
Forbes - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V2EX - 技术
V2EX - 技术
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Schneier on Security
Schneier on Security
Cloudbric
Cloudbric
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recent Commits to openclaw:main
Recent Commits to openclaw:main
人人都是产品经理
人人都是产品经理
P
Privacy International News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
Last Week in AI
Last Week in AI
罗磊的独立博客
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
The Cloudflare Blog
Google DeepMind News
Google DeepMind News
AWS News Blog
AWS News Blog
The Register - Security
The Register - Security
Y
Y Combinator Blog
J
Java Code Geeks
I
Intezer

方寸之間

修复 Arch Linux 的内核缺失问题 - 方寸之間 安装定制化 Vim - 方寸之間 树莓派配置旁路由过程记录 - 方寸之間 解除 New Bing 地区和浏览器限制的方法 - 方寸之間 FRP 上手教程 - 方寸之間 深入理解 Linux nohup 命令 - 方寸之間 C++智能指针是什么 - 方寸之間 PGP 工作原理详解 - 方寸之間 如何恢复 Windows EFI 分区 - 方寸之間 Scaleway IPV6 server 申请及使用攻略 - 方寸之間 Arch Linux 升级系统提示签名无效 - 方寸之間 Arch Linux 音响有杂音的解决办法 - 方寸之間 Arch Linux 如何切换内核 - 方寸之間 Django 项目时区更改错误的解决方案 - 方寸之間 超简单的 Arch Linux + Windows 双启动教程 - 方寸之間 使用 UFW 配置 Linux 防火墙 - 方寸之間 Git 中的一个特殊 hash - 方寸之間 深入理解数据库事务 - 方寸之間 CRLF 和 LF 之间的区别与联系 - 方寸之間 DNS 的更新是如何工作的? - 方寸之間 浅析 Linux 的 cron 命令 - 方寸之間 如何快速查看 github 代码库中早期 commits - 方寸之間 黑科技:使用 GitHub 搭建自己的短链接服务 - 方寸之間 Build site with Franklin.jl - 方寸之間 iwd 的使用教程 - 方寸之間 超好用的 UML 工具推荐 - 方寸之間 ArchLinux 安装配置笔记 (Updated) - 方寸之間 如何将 Julia 添加到 Jupyter Notebook - 方寸之間 费曼技巧:最好的学习方式 - 方寸之間 How to Create Linux Desktop Entry - 方寸之間 Make a TODO robot with Github Actions - 方寸之間 C++继承 多态 虚函数 - 方寸之間 C++ inline 关键字详解 - 方寸之間 C++ Static 关键字详解 - 方寸之間 C++ type conversion notes - 方寸之間 Solution for _CRT_SECURE_NO_WARNINGS error - 方寸之間 IR Homework - 方寸之間 Customize Ubuntu themes, icons and Shell - 方寸之間 恢复右键菜单的新建命令 - 方寸之間 Hugo+Github 搭建个人博客 - 方寸之間
Cloudflare Tunnel 不完全上手指南 - 方寸之間
Mercas · 2023-04-01 · via 方寸之間

如何使用免费的 Cloudflare Tunnel 进行内网穿透,把树莓派整成家用服务器,实现数据私有化。

最近在树莓派上整了几个 web 服务,不过只能在本地使用,无法通过外网访问,所以试着使用 Cloudflare Tunnel 来进行内网穿透,这里记录下我的操作过程。

我的硬件配置

树莓派 4B+Ubuntu 系统

安装 cloudflared#

要在 Raspberry Pi 上设置 Cloudflare 隧道,我们将依赖一个名为“ Cloudflared ”的软件,Cloudflared 是在 本地网络 和 Cloudflare 网络之间创建和维护安全隧道的软件。有两种安装方法。

方法 1:使用 Cloudflare 存储库#

  1. 获取 Cloudflared 存储库的 GPG 密钥

curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpg >/dev/null

  1. 将 Cloudflared 存储库添加到软件源

echo "deb [signed-by=/usr/share/keyrings/cloudflare-archive-keyring.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list

  1. 更新软件包缓存并安装cloudflared

sudo apt update

sudo apt install cloudflared

方法 2:直接使用官方 deb 包#

使用以下在 Github 的Release界面下载最新版 deb 包,并使用dpkg进行安装:

wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb && sudo dpkg -i cloudflared-linux-arm64.deb

注意树莓派 4B 安装_arm64_版本。

配置账号#

命令行执行以下命令,按照引导进行账号验证:

创建隧道#

执行以下命令,创建一个 tunnel:

cloudflared tunnel create <tunnel-name>

运行上面的命令后,您将看到类似于下面的消息

Tunnel credentials written to /home/pi/.cloudflared/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.

Created tunnel pimytunnel with id XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

这一步在创建 tunnel 的同时,还生成一个 tunnel 的 UUID,一个凭证文件以及一个.cfargotunnel.com 的子域名,UUID 以及凭证文件将在之后配置文件时使用,务必记住 UUID 以及凭证文件的路径(在默认路径中,后面会提到)。

也使用以下命令验证是否创建成功:

详细配置隧道#

配置文件的默认路径有 3 个,分别是:

  1. ~/.cloudflared
  2. /etc/cloudflared
  3. /usr/local/etc/cloudflared

这里我们使用当前用户目录,即~/.cloudflared,我们在该目录下面创建一个配置文件,命名为config.yml,并填入之前创建的 tunnel 时的生成的配置信息:

tunnel: <Tunnel-UUID>

credentials-file: /home/pi/.cloudflared/<Tunnel-UUID>.json

ingress:

- hostname: test.example.com

service: http://localhost:80

- hostname: example.com

service: https://localhost:8000

- service: http_status:404

然后按照配置文件的格式配置自己的 web 服务的主机名和端口,每个规则一般包含hostnameservice两部分,注意最后一行的- service: http_status:404,我们可以发现没有 hostname 部分,这并不是错误,而是cloudflared的特殊规则,主要是用来匹配所有流量,是必须要有的。

这和cloudflared匹配规则有关,当 cloudflared 收到传入请求时,它会从上到下评估每个入口规则,以找到与请求匹配的规则。规则可以匹配传入请求的主机名或路径,或两者。如果所有规则都不匹配,就会匹配最后一条规则。

路由内网服务流量#

使用以下命令分配一个 CNAME 记录,将流量指向您的隧道子域。

cloudflared tunnel route dns <UUID or NAME> <hostname>

# example

cloudflared tunnel route dns pi test.example.com

运行隧道#

执行以下命令,将 cloudflared 连接到 Cloudflare 的网络,Cloudflared 会从默认位置检索配置文件,即 ~/.cloudflared/config.yml

cloudflared tunnel run <UUID or NAME>

如果你的配置文件不在默认路径,可以使用--config选项来运行隧道:

cloudflared tunnel --config /path/your-config-file.yaml run <UUID or NAME>

检查隧道参数#

至此,隧道配置完成,可以执行下面的命令来获得刚刚创建的隧道的信息:

其他一些常用的命令:

FunctionsCommands
创建隧道cloudflared tunnel run <NAME>
隧道列表cloudflared tunnel list
停止隧道cloudflared tunnel stop <NAME>
重新启动隧道cloudflared tunnel restart <NAME>
删除隧道cloudflared tunnel delete <NAME>
强制删除隧道cloudflared tunnel delete -f <NAME>
显示隧道信息cloudflared tunnel info <NAME>

将隧道作为服务运行#

将 Tunnel 安装为系统服务,允许 Tunnel 在启动时作为启动守护进程自动运行。默认情况下,Tunnel 希望在默认目录 ~/.cloudflared/config.yml 中找到配置文件,但要将 Tunnel 作为服务运行,我们需要将 config.yml 文件移动到 ~/etc/cloudflared/ 中。

使用 mv 命令来移动配置文件

sudo mv /home/pi/.cloudflared/config.yml /etc/cloudflared/

然后执行以下命令安装服务:

sudo cloudflared service install

启动服务:

systemctl start cloudflared

检查服务运行状态:

systemctl status cloudflared

踩坑#

启动隧道服务时遇到的一个问题:

failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB).

解决方法:

sudo sysctl -w net.core.rmem_max=2500000

参考#

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/

https://github.com/quic-go/quic-go/wiki/UDP-Receive-Buffer-Size