首页
文章
标签
关于
使用cloudflare转发ssh端口
发布于: 2022-7-21   更新于: 2023-1-21   未收录
文章字数: 260   阅读时间: 2 分钟   阅读量:

Cloudflare Tunnel

cloudflare 提供的免费加密通道,通过 cloudflare 的 cnd 访问部署在内网的服务,比如 web,ssh,smb,tcp 等。 其工作方式类似于 frp,可以将本地服务发布到公网。只不过 frp 所需的服务器 IP 在 Cloudflare Tunnel 中变成了 Cloudflare 提供的节点。 相比于 frp 省去了服务器的成本。

架构图.png

1.准备

1.1 先决条件

  1. 必须需要一个 cloudflare 账号,以及开通 cloudflare zero trust。
  1. 在你的需要内网穿透的设备上安装 cloudflared(cf 的本地 cli 客户端)

    • ubuntu/centos amd64架构 curl -L 'https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64' -o /usr/bin/cloudflared && chmod +x /usr/bin/cloudflared
    • arm64 curl -L 'https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64' -o /usr/bin/cloudflared chmod +x /usr/bin/cloudflared
  2. 用命令登录cloudflared

  • cloudflared tunnel login
    终端会给出一个类似 https://dash.cloudflare.com/argotunnel?callback=https%3A%2F%2Flogin.cloudflareaccess.org%xxxxxxxxxxxxxxxxxxxxxxx 的登陆地址,复制黏贴该地址到浏览器中,然后按照要求登录即可。
    如果是有二步验证的,需要登录了以后,再次黏贴该地址,因为二步验证结束后并不会自动跳转到该 cloudflared 验证登录页面。
    
    授权的话,每次只能选择一个网站,当然,一个网站也就够用了,我们可以解析很多三级域名。
    
    当然如果需要授权多个网站,授权完成后不要关闭网页!依次点击其他需要授权的域名,进行多次授权。 
    

2. 在目标机器上设置要转发SSH服务器

授权完成后,就可以创建我们需要的隧道了。cloudflare 提供两种方式;

  1. 一种是在 zero trust 页面用 web 添加授权
  2. 在本地服务器(raspberry)上用 config 文件添加

下面用的是 config 文件添加,因为本地 config 更方便操作一些,如果有多台服务器,那么可以在不同的服务器安装多个Cloudflared,配置多个Tunnel

2.1 创建tunnel

创建完以后,会把信息保存到 root 下的 .cloudflared 文件夹下,注意不要误删了

  • cloudflared tunnel create <你的隧道名字>
  • 示例: cloudflared tunnel create amd-test

2.2 创建域名 CNAME

添加一个域名:

  • cloudflared tunnel route dns <隧道名字> <域名>
  • 示例 cloudflared tunnel route dns amd-test test.hujian.xyz

然后 cloudflare 就会在你的域名下自动生成一个 CNAME,把 test.hujian.xyz 指向 <隧道 UUID>.cfargotunnel.com

以此类推,我们可以如法炮制在面板上添加其他的需要的 CNAME

2.3 配置 Config 文件

添加好想要穿透的域名后,我们就可以开始映射了。

1
2
3
4
5
6
7
8
9
# vi  ~/.cloudflared/config.yml

tunnel: <隧道UUID>
credentials-file: /root/.cloudflared/<隧道UUID>.json

ingress:
  - hostname: test.hujian.xyz
    service: ssh://localhost:22
  - service: http_status:404

注意:最后的 - service: http_status:404 一定要加,这是兜底的规则。还有复制黏贴的时候确保格式没有错误,很可能会发生 mapping error。

2.4 配置完以后,可以测试下配置文件是否有问题。

1
2
3
# cloudflared --config ~/.cloudflared/config.yaml  tunnel ingress validate
Validating rules from /root/.cloudflared/config.yaml
OK

2.5 启动服务

如果不指定配置文件路径,cloudflared 会默认读取 ~/.cloudflared/config.yml

cloudflared tunnel --config [配置文件路径] run 示例:cloudflared tunnel --config config.yaml run

3. 创建 systemctl 开机自启动服务

cloudflared service install
systemctl start cloudflared
systemctl enable cloudflared
systemctl status cloudflared

4. SSH 客户端使用

4.1 客户端也要安装cloudflared,参考准备-先决条件

4.2 更改 SSH 配置文件

1
2
3
4
$ vi ~/.ssh/config

Host ssh.example.com
ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h

4.3 运行ssh命令访问服务器

ssh <username>@ssh.example.com

运行该命令时,cloudflared将生成连接,提示您在从终端建立连接之前通过您的身份提供者进行身份验证。

  • 示例:
1
https://test.hujian.xyz/cdn-cgi/access/cli?edge_token_transfer=true&redirect_url=https%3A%2F%2Fgo.hujian.xyz%3Ftoken%3Dr2BxxxmiFzTisCZxN8KJtm_wjTyFHK3E%253D&send_org_token=true&token=r2xxxxzxxx_wxyFHK3E%3D

5 参考

kelleygo
随笔记录,为技术沉淀.
目录
相关文章
cn博客添加音乐组件
1. 博客底部添加音乐组件 音乐效果 1.1 直接上代码示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <!-- 为博客底部添加音乐组件 --> <div id="player" class="aplayer"></div> <link href="https://files.cnblogs.com/files/shwee/APlayer.min_v1.10.1.css" rel="stylesheet"> <script src="https://files.
2022-5-21
生成HTTPS证书
生成HTTPS证书 1. 使用loge命令的方式生成HTTPS证书 参数说明: *.domain.com 替换为你的域名,支持所有子域名 – dns 是指域名在哪个云厂商,支持的云厂商有alidns/cloudflare aws;详细参考github官方文档 CLOUDFLARE_EMAIL="xx@gmail.com" \ CLOUDFLARE_API_KEY="xxx" \ lego --email "xx@gmail.com" --dns cloudflare --domains "*.domain.com" run 2 使用certbot的方式生成HTTPS证书 xx.domain.com 替换为你指定的子域名,只支持单个子域名 sudo certbot certonly --agree-tos --email xx@gmail.com --webroot -w /var/lib/letsencrypt/ -d xx.domain.com 3.检查HTTPS证书是否生效 cfssl-certinfo -domain xx.domain.com:443 4 参考文档: 使用certbot的方式生成HTTPS证书 使用lego手动生成tls证书参数文档
2022-3-21
seo网站搜索优化
1. seo网站搜索优化 搜索排行问题,主要是两方面优化方向: 第一是外链引用 第二是让搜索引擎的爬虫能收录/分析页面中的文本 技术相关的是第二,针对技术上的解决方案: 分析是否指定的浏览器才能展示结果,比如google游览器能正常访问网页,IE游览器访问 404,这样会影响搜索引擎的爬虫对真实内容的爬取,搜索引擎收录到这样的页面,一个相关的词都没有,搜索索引是没法建立的。解决方案是去掉这个判断逻辑。 网站是动态内容,且没有提供sitemap文件。这样的话,意味着即便没有第一个问题,搜索引擎也只会收录到了根页面,其它主页面、各个产品页,是不可能被收录到的,关键词索引也无从建立。解决方案是通过工具自动/手动生成一个根目录sitemap文件,和前端页面一起部署。 在网关title加上name为keywords和description 以及对应的content描述 示例: 1 <meta name="keywords" content="LoRaWAN,LoRaWAN module,LoRaWAN gateway,LoRaWAN 解决方案"><meta name="description" content="...."> 通过Google/百度站点管理工具分析数据,通过此分析 官网相关的关键列表、搜索率、点击率等指标在一定时间范围内的变化,一个是看之前是什么状态,另外一个 要看解决了以上3个问题后,后面有没有得到改进。 2. 解决方案 目的: 提交seo收录,sitemap站点地图,将robots.t文件和sitemap.xml文件放到网站根目录下,示例文件如下: 蜘蛛访问站点权限 robots 站点sitemap地图 sitemap 通过站长工具分析网关排名以及关键字索引 百度站长 google站长 通过模拟器分析网站关键字收录情况 蜘蛛模拟-Screaming Frog SEO Spider 3 参考 seo优化
2022-3-10
小米路由器开发板
小米路由器开发板环境制作 准备条件 a.小米路由器型号要符合支持开发板,参考下图; b.下载开发板固件(与路由器型号匹配):选择下载>ROM>小米路由器3 下载小米路由器3 开发版(miwifi_r3_firmware_e9f31_2.27.120.bin) http://miwifi.com/miwifi_download.html 升级固件 步骤一 路由器初始管理平台地址:http://192.168.31.1。登陆小米路由器的web界面,进入后台。选择手动升级,上传开发版固件(miwifi_r3_firmware_e9f31_2.27.120.bin)点击升级,等待5分钟左右就会自动升级完成。wifi的ssid和密码仍然保持不变。 步骤二 a.绑定路由器到自己的小米账号 打开小米路由器的web界面,使用微信扫描登录页面的二维码安装miwifi 登录后页面提示小米路由器3(R3) MiWiFi 开发版 2.27.120,表示安装成功。 安装ssh并登录到终端 必须升级固件后才开始操作安装SSH,满足条件:安装固件:1. 开发版 2.27.120;2. 用户已经绑定路由器到自己的小米账号 获取ssh密码 访问:https://d.miwifi.com/rom/ssh 并登录以上的网页。网页上展示了root的密码和开启SSH的工具包,下载工具包,将下载好的文件移植到U盘,保证U盘里面的文件名为miwifi_ssh.bin。 注意事项: 使用chrome下载工具包可能会被拦截,请使用其他浏览器下载。 安装步骤: 1. 请将下载的工具包bin文件复制到U盘(FAT/FAT32格式)的根目录下,保证文件名为miwifi_ssh.bin; 2. 断开小米路由器的电源,将U盘插入USB接口; 3. 按住reset按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开reset键; 4. 等待3-5秒后安装完成之后,小米路由器会自动重启,之后您就可以尽情折腾啦 :) 使用SSH进入终端 连接小米路由器WIFI ,在终端输入:ssh root@192.168.31.1;SSH密码在页面查看(https://d.miwifi.com/) 下载潘多拉固件 访问:https://opt.cn2qq.com/padavan/ 搜索 MI 打开小米路由器3的固件并下载。 将下载的MI-3_3.4.3.9-099.trx 放入U盘根目录,名字不要随意更改,保证为:MI-3_3.4.3.9-099.trx;插入U盘到路由器,然后重启; 刷入潘多拉固件 上传下载的固件到路由器的/tmp目录下:
2024-8-21
使用aws-cloudfront做CDN转发
CND转发到v2ray服务 环境: 域名一个 aws cloudfront服务 数据转发流程 A.example.com->cloudfront->B.example.com->ip.ec2.port 注意事项 踩过的坑: v2ray-plugin报错 http: TLS handshake error from 64.252.173.97:23912: read tcp 172.21.0.3:443->64.252.173.97:23912: read: connection reset by peer 原因为2层(EC2,cloudfront)TLS证书不一致; 第一个想法就是将两个证书整成一致,然后cloudfront就上传"Let’s Encrypt自签的证书,发现使用自上传的证书cloudfront根本不转发数据了;得出一个结论:cloudfront必须使用它请求生成的tls证书; 解决方案:A.example.com->cloudfront->ip.ec2.port转发流程修改为A.example.com->cloudfront->B.example.com->ip.ec2.port v2ray-plugin报错not found in 'Sec-Websocket-Version' header 1 cloudfront ws一直是v2ray.com/core/transport/internet/websocket: failed to convert to WebSocket connection > websocket: unsupported version: 13 not found in 'Sec-Websocket-Version' header 原因是cloudfront没有配置转发HTTP请求头,CloudFront 预设并不会转发所有的 HTTP request headers, 有些 request headers 在经过 CloudFront 之后就被丟掉了导致 v2ray 无法识别到必要的数据。 需要更改 origin request policies 為 Managed-AllViewer,這樣它才會轉發所有的 headers。 - 解决方案:cloudfront设置源请求策略为```Managed-AllViewer``` cloudfront转发数据到源失败,解决方法是需要更改行为策略->缓存策略名称(Managed-CachingDisabled)->源请求策略名称(Managed-AllViewerExceptHostHeader) 源服务器没有接收到数据,错误的提示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 root@localhost ~ # curl -v https://proxy.
2023-3-20