有需求将自己的nas还有一些内网服务穿透到外网进行访问,但是苦于ipv4地址枯竭,没有获取到公网ipv4,ipv6的普及性又不多,机缘巧合之下,了解到了cloudflare tunnel服务,发现是免费的,仔细了解了下,并记录下自己的配置过程。
安装
前置条件
- 你必须要有一个域名,并且NS在CloudFlare下,也就是DNS解析
- 一台可以访问互联网的Linux服务器(不需要公网IP)
- CloudFlare账户,同时需要绑定PayPal账户,所以你还需要一个PayPal账户
- 一些基础的Linux知识
如果有疑惑,可以在下面留言,博主收到邮件后会进行解疑。
准备CloudFlare账户
请先前往CloudFlare面板注册一个账号,随后将域名绑定,这里不做叙述,百度均有详细教程。
随后进入Cloudflare Zero Trust 控制面板,首次访问会提示绑定信用卡,这里选择PayPal账户即可,同时选择Free Plan白嫖即可。
至此,账户与域名准备就完成,下面开始在Linux服务器上安装Cloudflared
安装Cloudflared
其实安装教程官方已经给的非常详细了,基本都是无脑输入命令即可,这里贴出Debian的详细安装方法,教程源自官方文档。
连接上你的SSH,以此执行下面命令即可:
# Add cloudflare gpg key
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
# Add this repo to your apt repositories
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared buster main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
# install cloudflared
sudo apt-get update && sudo apt-get install cloudflared
这样就安装上了CloudFlared了,安装完毕之后,进行配置与转发。
附:Github开源地址
配置与转发
tunnel有两种配置方式,一种是通过 cloudflare 控制台,另一种是通过命令行。我使用的是命令行,比较方便。
以下示例使用 debian 作为服务器的用户名,example.com 作为域名)
创建tunnel
# 登录CloudFlare
cloudflared tunnel login
登录之后,会在/root/.cloudflared
下创建一个cert.pem
文件,该文件存储着你的登录信息
# 创建一个tunnel,名字自定,这里用debian
cloudflared tunnel create debian
执行cloudflared tunnel list
显示 debian 的 ID:
root@debian:~ $ cloudflared tunnel list
ID NAME CREATED CONNECTIONS
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx debian 2023-12-09T11:26:41Z 2xLAX, 2xSJC
记住这个id,稍后会用到,该xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json文件在root目录
下,请记得检查是否存在该文件,如果不存在,请尝试删除
新建配置文件,vim ~/.cloudflared/config.yml
将上面获得的ID复制到下面两个对应位置上,随后修改你想映射的服务,例如我这里映射了ssh、vnc、还有一些http服务,具体支持那些服务,请查询官方文档。
本地运行的服务做到端口不重复即可无限内网穿透出去。
新建一个脚本文件,自动更新设置的DNS以及运行tunnel服务,vim ~/tunnel-sh.sh
# update cloudflare DNS record
/usr/bin/cloudflared tunnel route dns debian ssh.example.com
/usr/bin/cloudflared tunnel route dns debian vnc.example.com
/usr/bin/cloudflared tunnel route dns debian mc.example.com
/usr/bin/cloudflared tunnel route dns debian file.example.com
/usr/bin/cloudflared tunnel route dns debian speed-test.example.com
# run tunnel
/usr/bin/cloudflared tunnel run my-tunnel
设置开机自启动,sudo vim /etc/systemd/system/cloudflared-tunnel.service
[Unit]
Description=cloudflared tunnel
Wants=network-online.target
After=network-online.target
StartLimitInterval=300
[Service]
User=root
ExecStart=sh /root/.cloudflared/tunnel-sh.sh
# 如果启动失败,自动重试,因为开机自启大概率报错网络问题
Restart=always
RestartSec=30
[Install]
WantedBy=default.target
启动服务 & 设置开机自启
sudo systemctl start cloudflared-tunnel.service
sudo systemctl enable cloudflared-tunnel.service
所有步骤完成后,便可以方式访问网站进行测试,是否成功映射出去了。访问http://file.example.com/img
相当于访问了局域网内的http://127.0.0.1:10086/img
。至此,Linux服务器下的CloudFlare tunnel配置完毕。
SSH访问配置
需要在客户端安装cloudflared
,安装方式和上面一样,我的客户端是Windows
,下载cloudflared-windows-amd64.exe
文件,然后新建一个SSH配置
Host ssh.example.com
# 把 D:\tools\cloudflared-windows-amd64.exe 改成你自己的目录
ProxyCommand D:\tools\cloudflared-windows-amd64.exe access ssh --hostname %h
使用 ssh [email protected] 即可 ssh 登录。
VNC远程桌面
客户端使用vnc远程桌面
访问服务器 (服务器需要开启vnc server
),需要先在客户端的命令行里执行
cloudflared access tcp --hostname vnc.example.com --url tcp://localhost:5901
这条命令把vnc.example.com
(对应服务器的tcp://localhost:5900
)映射到客户端本地的tcp://127.0.0.1:5901
。然后我们用vnc viewer
,或者其他 vnc 软件,使用 127.0.0.1:5901
登录 VNC。
使用浏览器访问SSH与VNC服务
浏览器本身不支持ssh
与vnc
,但是cloudflare
的application
提供了ssh和vnc浏览器访问功能。
首先创建一个 application,域名输入刚刚配置的vnc.example.com
,在Settings
界面选择Browser rendering
为 VNC
保存后,访问http://vnc.example.com
,输入密码登陆即可登录VNC。
SSH同理
1 条评论