type
status
date
slug
summary
tags
category
icon
password
个人经常会有远程Windows的需要,没有找到中意的远程软件用过向日葵,三天两头服务器奔溃,账户莫名登录不上,直接劝退。TeamViewer就厉害了,识别到国内IP就是特供版,不验证手机号直接不让用,也劝退了。Todesk就直接告辞了,你以为在白嫖它的服务,殊不知电脑的网络被它一直在白嫖偶然看到Cloudflare Tunnel穿透,配合Freenom的免费域名,通过windows远程桌面就可以直接远程了
提前准备
- Cloudflare账号,注册地址:https://www.cloudflare.com
- 自定义域名并托管到Cloudflare(使用Freenom免费域名)
- 下载 Cloudflare可执行文件 下载地址:https://github.com/cloudflare/cloudflared/releases
被控端电脑配置
将 下载好的可执行文件
(cloudflared-windows-amd64.exe)
复制到 自己定义的目录 并改短名称为(cloudflared.exe)
,方便操作在当前目录打开 cmd 窗口,输入如下命令进行登录验证,会自动打开游览器进行登录
SH
1 | cloudflared.exe login |
登录完成之后会在
C:\Users\%USERNAME%\.cloudflared
目录下生成登录凭证创建隧道,随意自定义名称
SH
1 | cloudflared.exe tunnel create <NAME> |
配置 DNS 记录(使用Freenom免费域名),就是上一步创建的隧道名称
SH
1 | cloudflared.exe tunnel route dns <NAME> diy.domain.cf |
配置完成之后,可以在控制台看到记录
在 cloudflared.exe 同级目录创建一个
config.yaml
文件,内容如下验证连接情况
被控端
被控端输入如下命令,注意替换配置文件路径
SH
1 | cloudflared.exe --config=D:\Config\config.yaml tunnel run |
控制端
同样下载可执行文件,并在目录打开 cmd。输入如下命令,即可启动
Start Websocket listener
- hostname 填写自定义的域名
- url 填写映射的本地端口,如localhost:3000
SH
1 | cloudflared.exe access rdp --hostname diy.domain.cf --url localhost:3000 |
再打开 windows远程桌面 -> 输入 localhost:3000 能连接的话就说明配置没问题了
配置开机自启
被控端如果还需要手动执行命令,那不是脱裤子放屁。
肯定是需要注册成Windows服务,自动启动滴!
首先 以管理员身份打开
cmd
, 进入cloudflared.exe所在目录,执行如下命令,注册成服务SH
1 | cloudflared.exe service install |
打开注册表(regedit.exe),在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 找到 Cloudflared
将 ImagePath 修改为
D:\Config\cloudflared.exe --config=D:\Config\config.yaml tunnel run
注意替换自己路径再打开Windows服务(services.msc),找到
cloudflared agent
右键 重新启动。自启就配置完成啦!!!配置文件的保存位置一般是
~/.cloudflared/config.yml
,也可以自定义随便在哪都可以。示例配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 复制
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json protocol: http2 originRequest: connectTimeout: 30s noTLSVerify: false ingress: - hostname: gitlab.widgetcorp.tech service: http://localhost:80 - hostname: gitlab-ssh.widgetcorp.tech service: ssh://localhost:22 - service: http_status:404 |
其中
ingress
字段可以创建多个服务,支持的服务类型如下表,新建其他服务前需要到 Cloudflare 控制台对其他子域名进行解析。服务名称 | 描述 | service 示例值 |
HTTP/S | 常规网页服务 | https://localhost:8000 |
TCP | TCP 连接 | tcp://localhost:25565 |
SSH | SSH 连接 | ssh://localhost:22 |
RDP | 远程桌面(RDP) | rdp://localhost |
上表转自 Cloudflare 官方文档,仅节选常用协议,若需要完整版请至 Ingress rules 页面查看
举例:在刚才的配置文件中配置了两个服务,就需要运行两次:
1 2 | 复制
cloudflared tunnel route dns <Tunnel-NAME> gitlab.widgetcorp.tech cloudflared tunnel route dns <Tunnel-NAME> gitlab-ssh.widgetcorp.tech |
手动解析其他子域名
试运行
1 2 | 复制
cloudflared --config <config-File> tunnel run <Tunnel-NAME> # 例:cloudflared --config /root/.cloudflared/config.yml tunnel run mytun |
随后稍等一分钟左右,在其他设备上访问刚才解析的子域名测试即可。
注册为系统服务(自动安装)
1 | 复制
cloudflared service install |
注册为系统服务(Systemd)
在
/etc/systemd/system
下创建cloudflared.service
文件:1 2 3 4 5 6 7 8 9 10 11 12 | 复制
[Unit] Description=Cloudflare Tunnel After=network.target [Service] ExecStart=cloudflared --config <config-File> tunnel run <Tunnel-NAME> Restart=always RestartSec=5 StartLimitInterval=0 [Install] WantedBy=multi-user.target |
保存退出后
systemctl enable cloudflared
加入开机启动,systemctl start cloudflared
启动服务。查询日志:
journalctl -a -u cloudflared
。部分服务(ingress)配置示例
VNC
这里以RealVNC Server为例。
1 2 | 复制
- hostname: vnc.example.com service: tcp://localhost:5900 |
参考资料
请站长喝杯咖啡 ✨勇敢点击✨ 👉 赞赏
- Author:Scu
- URL:https://bk.9277.eu.org//article/cloudflaredtoWindows
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!