在一些地区或者一些场景下访问 Telegram 会有难度,Cloudflare 虽说在一些地区速度也不理想,但总比没有强

将通知消息的标题和内容发送到 Cloudflare Workers 的边缘网络,然后 Workers 转发到 Telegram Bot 的 API(发起 GET 或 POST 请求)

这个方法也可以在未被封禁的服务器上实现,或者在具有外网访问条件的环境内实现,然后通过端口转发到公网

下面是 Cloudflare Workers 的实现代码

const OPT = {
  BotToken: '', // Telegram Bot API
  ChatID:'', // User ChatID
  ParseMode: 'markdownv2' //keep blank, html, markdown or markdownv2
}
 
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})
 
async function handleRequest(request) {
  let url = new URL(request.url);

  let title = url.searchParams.get('title')||'Telegram Bot Notification';
  let msg = url.searchParams.get('msg')||'Add msg parameter to send customized message';
 
  if(msg.errcode){
    return new Response(JSON.stringify(msg), {
      status: 200, 
      headers:{
        'content-type':'application/json; charset=UTF-8'
      }
    })
  }
 
  return await sendMessage(title, msg);
}

async function sendMessage(title, msg){
  let url = "https://api.telegram.org/";
  url += "bot" + OPT.BotToken + "/sendMessage?";
  url += "chat_id=" + OPT.ChatID + "&";
  url += "parse_mode=" + OPT.ParseMode + "&";
  url += "text=*" + title + "*%0A%0A";
  url += msg;
  
  return fetch(url ,{
    method:'get',
    headers: {
      'Accept': 'text/html,application/xhtml+xml,application/xml;',
      'Accept-Encoding': 'gzip, deflate, br',
      'User-Agent': 'Mozilla/5.0 Chrome/90.0.4430.72'
    }
  });
}

新建 Workers,将代码粘贴至脚本中,点击部署

脚本默认使用 MarkdownV2 格式,如果使用纯文本或 HTML 格式,需要自行修改位于 34 行的标题加粗 ** 号

可以在 OPT 内添加其他通知参数,关于其他参数可以查看 Telegram Bot API

以上代码已发布到 azhuge233 / Teleflare-Messenger

Cloudflare 推出的 Argo Tunnel 本意是保护 Web 应用程序,连接服务器端口和 Cloudflare 节点,定位见下图(来自 Many services, one cloudflared

Cloudflare Argo Tunnel - 公网 IP 的新解决方案

其工作方式类似于 frp,可以将本地服务发布到公网。只不过 frp 所需的服务器 IP 在 Argo Tunnel 中变成了 Cloudflare 提供的节点。相比运营商公网 IP,Argo Tunnel 省去了跟运营商扯皮的时间,相比于 frp 则省去了服务器的成本

滥用开始

下文将展示如何在 Debian 10 下安装并使用 Cloudflare Argo Tunnel

环境

  • Debian 10

准备

  • Cloudflare 账号
  • 接入了 Cloudflare 的域名

参考

步骤

以下指令在 root 用户下执行,非 root 用户酌情添加 sudo

安装 Argo Tunnel Client

Argo Tunnel Client 支持 Windows、macOS 和 Linux

执行

wget -q https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb
dpkg -i cloudflared-stable-linux-amd64.deb

其他操作系统安装指令查看 Install cloudflared

身份认证

Argo Tunnel Client 需要使用者登录 Cloudflare 账号以进行授权,执行

cloudflared tunnel login

在连接了显示器的机器上,执行完毕会自动打开浏览器,在浏览器内登录账号

在无头模式的机器上,执行完毕后会输出一个链接,复制链接到浏览器内登陆账号,登录后选择使用的域名,完成验证Cloudflare Argo Tunnel - 公网 IP 的新解决方案Cloudflare Argo Tunnel - 公网 IP 的新解决方案

Cloudflared 会在 ~/.cloudlflared/ 下生成 cert.pem 证书,之后的操作都依赖于此文件 Continue reading “Cloudflare Argo Tunnel – 公网 IP 的新解决方案”