使用cloudflared进行内网穿透

#代理 #网络

因为目前使用的网络环境大部分为临时公网IP进行NAT,如果想要对外开放一个服务访问会因为不是固定IP以及运营商的限制,无法让外网直接访问到内网的某些服务。 这里就介绍用Cloudflare的“Cloudflare Zero Trust”来进行内网穿透,实现访问内网的服务。

要求:

  • 注册cloudflare账号

  • 有一个域名,并将DNS修改为cloudflare的DNS,以方便后面自动添加CNAME

目前该服务支持常见的操作系统,客户端下载地址

这里以Ubuntu 18.04系统为例进行安装说明

# 下载deb安装包
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb 

# 安装
dpkg -i cloudflared-linux-amd64.deb

# 登录cloudflare账号,如果是在命令行界面操作的话可以将用于授权认证的URL复制到浏览器中打开,登录账号,选择指定域名授权即可
# 授权完成后会在~/目录下创建一个.cloudflare/目录,并生成cert.pem密钥文件
cloudflared tunnel login

# 创建一个隧道,将${Tunnel_NAME}替换为自己想要定义的名称,创建完之后会在本地生成一个json文件,记录这个隧道的相关信息
cloudflared tunnel create ${Tunnel_NAME}

在~/.cloudflare/目录创建一个config.yaml配置文件,内容参考下面的配置示例

# 内网要对外服务的服务地址,也支持其它协议,例如SSH协议 ssh://1.1.1.1:22 ,TPC协议 TCP://1.1.1.1:8000 ,RDP协议 rdp://1.1.1.1:3389 ,甚至是Unix Socks unix:/home/production/echo.sock
url: http://192.168.3.88:80
tunnel: 3ea5e018-2f6b-423f-a1e8-654d15ab6173
credentials-file: /root/.cloudflared/3ea5e018-2f6b-423f-a1e8-654d15ab6173.json
# 添加流量路由,该操作会在域名的DNS中自动添加一个www的CNAME,用于访问
cloudflared trunnel route dns ${Tunnel_NAME} www.domain.com

# 启动隧道
cloudflared tunnel run ${Tunnel_NAME}

# 如果不在配置文件的目录,则需要指定配置文件的具体路径
cloudflared tunnel --config PATH/config.yml run

这时通过www.domain.com就能访问对应的内网服务

以上就是基本配置了,其它的网络穿透方案可以参考[[局域网穿透工具]]


错误处理记录

运行cloudflare tunnel run提示解析不到对应域名

ERR Error looking up Cloudflare edge IPs: the DNS query failed error="lookup _v2-origintunneld._tcp.argotunnel.com on 192.168.3.1:53: no such host"
ERR Please try the following things to diagnose this issue:
ERR   1. ensure that argotunnel.com is returning "origintunneld" service records.
ERR      Run your system's equivalent of: dig srv _origintunneld._tcp.argotunnel.com
ERR   2. ensure that your DNS resolver is not returning compressed SRV records.
ERR      See GitHub issue https://github.com/golang/go/issues/27546
ERR      For example, you could use Cloudflare's 1.1.1.1 as your resolver:
ERR      https://developers.cloudflare.com/1.1.1.1/setting-up-1.1.1.1/

解决方案

检查OpenWRT路由器上DNS是否开启了“过滤无用包”,如有开启,请关闭。

最后更新于