Linux搭建FRP实现HTTPS内网穿透

前言:

各系统的配置过程大同小异,本次示例使用Linux系统作为服务端,Windows系统作为用户端进行演示。

一、准备

1、查看FRP服务端、客户端CPU架构

①Linux

uname -a

如图为x86_64,也就是adm64

②Windows

#cmd运行
echo %PROCESSOR_ARCHITECTURE%

2、下载FRP

①下载地址:https://github.com/fatedier/frp/releases

②根据服务器/客户端CPU架构下载对应的压缩包

因为我的Linux服务器和PC客户端的CPU架构都是ADM64,所以下载图示的两个压缩包

二、配置FRP服务端(此处为Linux,其他系统仅供参考)

1、解析域名

需要解析共两条A记录(泛域名及其本身)

如:frp.123.com 和 *.frp.123.com

记录值记录类型(A类型)记录值
frpA服务端公网IP,如:123.123.123
*.frpA服务端公网IP,如:123.123.123

2、上传FRP压缩包到服务器

这里我上传到/usr/local/frp/

3、解压刚刚上传的压缩包

tar -xzvf frp_0.42.0_linux_amd64.tar.gz

文件作用

4、检查FRP版本是否正确

./frps --help

出现帮助列表即为下载了正确架构的版本,反之提示-bash: ./frps: cannot execute binary file: Exec format error 即为下错版本了

帮助列表如图

5、配置服务端的frps.ini

[common]
#服务器公网IP
server_addr = 123.123.123.123
# frp服务端端口(必须,服务端与客户端通信端口)
bind_port = 7000
# http、https穿透端口,后面需要配置https,这里避免使用80和443端口
vhost_http_port = 880
vhost_https_port = 4443

# frp 服务端密码(可以不设置)
token=123456

# 认证超时时间,由于时间戳会被用于加密认证,防止报文劫持后被他人利用
# 因此服务端与客户端所在机器的时间差不能超过这个时间(秒)
# 默认为 900 秒,即 15 分钟,如果设置成 0 就不会对报文时间戳进行超时验证
#authentication_timeout = 900

# 仪表盘端口,只有设置了才能使用仪表盘
dashboard_port = 7500

# 仪表盘访问的用户名密码,如果不设置
dashboard_user = admin
dashboard_pwd = 123456
# 自定义子域名,一级二级都可以,需要在dns中将域名解析为泛域名(*.frp.123.com)
subdomain_host = frp.123.com

0.52.0及以上版本使用.toml配置

#绑定端口
bindPort = 7000
# 身份验证方式
auth.method = "token"
# 身份验证令牌
auth.token = "123456"

# 虚拟主机端口 
vhostHTTPPort = 880 
## SSL 虚拟主机端口 
vhostHTTPSPort = 4443

# 配置 Web 服务器以启用 frps 的仪表板。
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "123456"

# 日志配置
log.to = "/path/to/frps.log"
log.level = "info"
log.maxDays = 3
log.disablePrintColor = false

6、防火墙放行端口

需要放行的端口有:

①frp 服务端端口(bind_port = 7000)

②仪表盘端口(dashboard_port = 7500)

7、启动FRP服务端(FRPS)

#①前台启动
#服务端的这个命令行窗口不要关,关了服务就挂了。
#提示 Start frps success,这表示服务端启动成功。
./frps -c frps.ini
#0.52.0及以上版本用这个命令
./frps -c frps.toml
#②后台启动
nohup ./frps -c ./frps.ini &
#0.52.0及以上版本用这个命令
nohup ./frps -c ./frps.toml &

FRP服务端启动成功

PS:

①停止FRP服务端(FRPS)适用于后台启动

#查看frps的进程号
ps -e | grep frps
 
#根据进程号结束进程
kill 进程号

②Windows启动FRP服务端脚本

@echo off
start cmd /c "title FRP内网穿透服务端 && echo By:NonNullPointer--2022/05/05 && echo. && frps.exe -c frps.ini"

8、验证服务端是否启动成功

进入仪表盘登录界面:http://服务器IP或者域名:仪表盘端口

如:http://123.123.123.123:7500http://frp.123.com:7500

FRPS仪表盘登录界面

输入用户名(dashboard_user)和密码(dashboard_pwd)即可进入仪表盘

仪表盘界面

如果上述步骤没有问题,则说明frp的服务端配置成功了

9、配置HTTPS(acme.sh+nginx)

①acme.sh

大概步骤如下,具体操作请看《acme实现免费获取、自动续签泛域名SSL证书》

I、下载安装配置acme.sh

II、获取subdomain_host的泛域名(*.frp.123.com)SSL证书

III、“安装”SSL证书

IV、设置acme.sh自动更新

②nginx

服务端nginx配置如下

server {
        listen 80;
        listen 443 ssl;
        server_name *.frp.123.com  frp.123.com; #泛域名和本身

        ssl_certificate      /usr/local/nginx/acmesh/cert.pem; #泛域名SSL证书文件路径
        ssl_certificate_key  /usr/local/nginx/acmesh/key.pem; #泛域名SSL证书私钥路径

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            proxy_pass http://127.0.0.1:880; #此处的880为frps.ini文件中的vhost_http_port
            proxy_redirect http://$host/ http://$http_host/;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
        }
    }

三、配置FRP客户端(此处为Windows,其他系统仅供参考)

1、解压前面下载下来的压缩包

2、配置客户端的frpc.ini

[common]
#FRP服务端公网IP
server_addr = 123.123.123.123
#FRP服务端端口
server_port = 7000
#FRP服务端密码
token = TVPEwhV6w3yZhwBHzVwmoiEWjADFsujo

#中括号[]内为自定义的配置名称
[NNP] 
#穿透类型
type = http
#本地需要穿透的IP
local_ip = 127.0.0.1 
#本地需要穿透的端口
local_port = 8080
#子域名,拼接后完整域名为:test.frp.123.com
subdomain = test

0.52.0及以上版本使用.toml配置

# 修改为frps部署服务器ip
serverAddr = "123.123.123.123"
#frps部署服务器端口
serverPort = 7000

#鉴权方式,可选值为 token 或 oidc,默认为 token。
auth.method = "token"
# 身份验证令牌
auth.token = "123456"

# 设置管理员地址,通过 http API 控制 frpc 的操作,例如重新加载
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "123456"
webServer.pprofEnable = false

# 日志配置
log.to = "/path/to/frpc.log"
log.level = "info"
log.maxDays = 3
# disable log colors when log.to is console, default is false
log.disablePrintColor = false


[[proxies]]
name = "NNP"
#穿透类型
type = "http"
#本地需要穿透的IP
localPort = 8080
customDomains = ["nnp.local.lateralbranch.com"]

3、启动FRP客户端(FRPC)

①CMD进入当前解压文件的路径

②启动FRP客户端

frpc.exe -c frpc.ini
#0.52.0及以上版本用这个命令
frpc.exe -c frpc.toml

提示“start proxy success”即为启动成功

FRP客户端启动成功

PS:

①Windows启动FRP客户端脚本

@echo off
start cmd /c "title FRP内网穿透客户端 && echo By:NonNullPointer--2022/05/05 && frpc.exe -c frpc.ini"


#0.52.0及以上版本用这个脚本:
@echo off
start cmd /c "title FRP内网穿透客户端 && echo By:NonNullPointer--2024/07/04 && frpc.exe -c frpc.toml"

②关闭FRP客户端:关闭CMD窗口即可

四、腾讯EO缓存配置

参考文章:

搭建frp实现内网穿透

FRP内网穿透与Nginx结合,实现多子域名转发服务(四级子域名)

【新版本.toml】内网穿透工具frp,搭建保姆级教程

frp55版本如何配置泛域名

文章不足之处还请斧正!

本文By:NonNullPointer --2024/10/02

最后修改:2025 年 01 月 05 日
如果觉得我的文章对你有用,请随意赞赏