Linux搭建FRP实现HTTPS内网穿透
前言:
各系统的配置过程大同小异,本次示例使用Linux系统作为服务端,Windows系统作为用户端进行演示。
一、准备
1、查看FRP服务端、客户端CPU架构
①Linux
uname -a
②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类型) | 记录值 |
---|---|---|
frp | A | 服务端公网IP,如:123.123.123 |
*.frp | A | 服务端公网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 &
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:7500
或http://frp.123.com:7500
输入用户名(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”即为启动成功
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内网穿透与Nginx结合,实现多子域名转发服务(四级子域名)
文章不足之处还请斧正!
本文By:NonNullPointer --2024/10/02