如何使用Cloudflare Tunnel代理SMTP邮局端口?

正在尝试使用Pmail搭建在一台NAT服务器上搭建属于自己的邮局。

现在已成功代理Web访问端口,但是SMTP端口难以正常工作,是不是因为邮件服务器无法通过CNAME记录访问?寻求各位大佬的帮助,配置文件附下。
Docker Compose配置

services:
  pmail:
    image: ghcr.io/jinnrry/pmail:latest
    container_name: pmail
    ports:
      - 25:25
      - 8001:80
      - 8443:443
      - 110:110
      - 465:465
      - 995:995
    volumes:
      - ./config:/work/config
    networks:
      - pmail
  cloudflared-tunnel:
    container_name: cloudflared-tunnel-pmail
    image: cloudflare/cloudflared
    restart: unless-stopped
    command: tunnel run
    environment:
      - TUNNEL_TOKEN=
    networks:
      - pmail
networks:
  pmail:
    driver: bridge

我尝试将smtp.domain.com代理到【http://pmail:25】、【http://pmail:465】、【tcp://pmail:25】,均不能成功,使用软件尝试发信时会提示:“no such host”。

1 个赞

smtp 不是 http 协议的,如果要代理,也是代理 tcp 协议。tunnel 代理 tcp,还得运行一个客户端才成。

指向tcp://pmail:25也不行,是不是没有办法。

tcp 应该可以,但代理tcp需要本地有cf客户端,不像http代理了开箱即用。你应该不会想用这种

这是什么意思呢?我看Tunnel里的Public Hostname选项可以指向tcp类型的地址。

这种你指向了 tcp 地址,是不能直接访问的,和指向 http 的不一样。

用的时候要在你电脑上起一个cloudflare 进程。描述起来有点麻烦,估计你也不会想用这种方式,不然就要翻翻 cf 官方文档看下用法,没带电脑,我手机就不给你翻了 :joy:

原来如此,明白了,那也很难直接嵌入服务作为邮件验证码发送端。

回家摸到电脑了,给你翻了下官方文档,你可以了解下 TCP 是怎么通过 couldflare 代理出来。
SMB 协议为例,你需要的 SMTP 也是类似用法。

Connect to SMB server with cloudflared access

2 个赞

如果是用在服务端,那在服务端运行一个 cf 客户端,也不是不可以,只是一个进程,一条命令。通过它代理,相反还安全一些。