🤩cloudflared内网穿透实现Windows远程桌面
00 min
2024-3-13
2024-3-15
type
status
date
slug
summary
tags
category
icon
password
个人经常会有远程Windows的需要,没有找到中意的远程软件用过向日葵,三天两头服务器奔溃,账户莫名登录不上,直接劝退。TeamViewer就厉害了,识别到国内IP就是特供版,不验证手机号直接不让用,也劝退了。Todesk就直接告辞了,你以为在白嫖它的服务,殊不知电脑的网络被它一直在白嫖偶然看到Cloudflare Tunnel穿透,配合Freenom的免费域名,通过windows远程桌面就可以直接远程了

提前准备

  • 自定义域名并托管到Cloudflare(使用Freenom免费域名)

被控端电脑配置

将 下载好的可执行文件(cloudflared-windows-amd64.exe) 复制到 自己定义的目录 并改短名称为(cloudflared.exe),方便操作
在当前目录打开 cmd 窗口,输入如下命令进行登录验证,会自动打开游览器进行登录
SH
1
cloudflared.exe login
登录完成之后会在 C:\Users\%USERNAME%\.cloudflared 目录下生成登录凭证
notion image
创建隧道,随意自定义名称
SH
1
cloudflared.exe tunnel create <NAME>
配置 DNS 记录(使用Freenom免费域名),就是上一步创建的隧道名称
SH
1
cloudflared.exe tunnel route dns <NAME> diy.domain.cf
配置完成之后,可以在控制台看到记录
notion image
在 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 能连接的话就说明配置没问题了
notion image

配置开机自启

被控端如果还需要手动执行命令,那不是脱裤子放屁。
肯定是需要注册成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 注意替换自己路径
notion image
再打开Windows服务(services.msc),找到 cloudflared agent 右键 重新启动。自启就配置完成啦!!!
notion image
配置文件的保存位置一般是~/.cloudflared/config.yml,也可以自定义随便在哪都可以。
示例配置文件:
12345678910111213
复制 tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551efcredentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.jsonprotocol: http2originRequest: connectTimeout: 30s noTLSVerify: falseingress: - 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 页面查看
举例:在刚才的配置文件中配置了两个服务,就需要运行两次:
12
复制 cloudflared tunnel route dns <Tunnel-NAME> gitlab.widgetcorp.techcloudflared tunnel route dns <Tunnel-NAME> gitlab-ssh.widgetcorp.tech

手动解析其他子域名

打开 Cloudflare 控制台 ,点击左侧网站,点击对应的域名,左侧DNS,找到刚才设置的子域名,将之前自动设置的子域名的解析内容复制到新子域名上就可以。

试运行

12
复制 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文件:
123456789101112
复制 [Unit]Description=Cloudflare TunnelAfter=network.target[Service]ExecStart=cloudflared --config <config-File> tunnel run <Tunnel-NAME>Restart=alwaysRestartSec=5StartLimitInterval=0[Install]WantedBy=multi-user.target
保存退出后systemctl enable cloudflared加入开机启动,systemctl start cloudflared启动服务。
查询日志:journalctl -a -u cloudflared

部分服务(ingress)配置示例

VNC

这里以RealVNC Server为例。
12
复制 - hostname: vnc.example.com service: tcp://localhost:5900

参考资料

 
💡
请站长喝杯咖啡 ✨勇敢点击✨ 👉 
🥤
赞赏