Cloud Flare+Caddy+Frp实现内网穿透和https访问

913 阅读3分钟

起因

家里有一台旧二手笔记本,想着应该给他动用起来,毕竟也卖不了两个钱,不如搭建些环境,做一做开发,刚好有一个域名是之前用来解析到自己github博客的,还有一台国外服务器做一些代理服务,这不就刚好可以内网穿透一下,完美实现三者价值,于是就有了这篇文章。

必备

  • 一台闲置电脑
  • 一个域名
  • 一台云服务器 (如果不是国外的需要有备案)

开始

这里云服务器和电脑都以系统为CentOS 7为例

安装frp

云服务器

frp下载地址 这里只介绍linux的使用,选择最新的以linux_amd64.tar.gz结尾的包

image.png 也可以在服务器上使用wget下载

wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz

解压缩

tar tar -zxvf frp_0.59.0_linux_amd64.tar.gz

修改文件夹名字

mv frp_0.59.0_linux_amd64 frp

进入文件夹修改frp配置

cd frp
vim frps.toml

frps.toml

bindPort = 7000              #连接端口
vhostHTTPPort = 5080         #对外访问端口                                                      
auth.token = "password"      #客户端连接密码,自定义 

创建 frps.service 文件

vim /etc/systemd/system/frps.service

frps.service

[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml

[Install]
WantedBy = multi-user.target

frps开机启动,启动frps

systemctl enable frps
systemctl start frps

查看frps是否启动成功

systemctl status frps

状态为running则代表启动成功

image.png

闲置电脑

电脑也下载并解压缩frp,修改frpc.toml

cd frp
vim frpc.toml

frpc.toml

serverAddr = "10.1.1.1"   #服务器地址
serverPort = 7000         #连接端口,对应frps.toml的bindPort
auth.token = "password"   #连接密码,对应frps.toml的auth.token

[[proxies]]
name = "alist"            #服务名称
type = "http"             #服务类型
localIP = "127.0.0.1"     #服务地址
localPort = 5244          #服务端口
customDomains = ["blog.demohiiiii.top"]    #服务域名地址

里面配置的是我博客的地址,有多个服务就写多个proxies,更多配置请参考文档

frp文档

创建 frpc.service 文件

vim /etc/systemd/system/frpc.service

frpc.service

[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frpc -c /path/to/frpc.toml

[Install]
WantedBy = multi-user.target

frpc开机启动,启动frpc

systemctl enable frpc
systemctl start frpc

查看frpc是否启动成功

systemctl status frpc

状态为running则代表启动成功

获取Cloudflare API token

首先需要把域名托管到Cloudflare,具体操作可以参考我之前写的文章使用Cloud Flare搭建免费的docker仓库加速服务 进入API token管理页,选择创建令牌

image.png

选择编辑区域DNS的模板

image.png

添加区域读取权限,区域资源包括所有区域,点击继续,创建令牌

image.png

复制token

image.png

安装Caddy

yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy

下载cloudflare dns插件

插件下载地址

Platform选择Linux amd64,然后搜索框输入cloudflare

image.png

选中第一个插件,点击Download

image.png

将下载的文件传入服务器,替换Caddy

mv caddy_linux_amd64_custom /usr/bin/caddy

修改Caddyfile

vim /etc/caddy/Caddyfile

Caddyfile

将*.demo.com替换成你的域名

在yourtoken处输入刚刚从cloudflare获取的API token

(logging) {
    log {                                                                                       
        output file /var/log/caddy.log
        format json
    }
}

*.demo.com {
        encode gzip
        reverse_proxy localhost:5080
        import logging
        tls {
          dns cloudflare yourtoken
        }
}

Caddy开机启动,启动Caddy

systemctl enable caddy
systemctl start caddy

查看Caddy是否启动成功

systemctl status caddy

状态为running则代表启动成功

image.png 更多配置请参考Caddy文档

最后

访问之前frpc.toml里设置的域名,可以看到https访问成功

image.png

如果无法访问

  • 请检查配置是否正确
  • 云服务器的端口是否开放
  • 域名是否解析正常

参考文章

frp官方文档

Caddy官方文档

CDN 加速网站,Caddy 与 Cloudflare 搭配使用,配置 TLS