在Linux系统中部署Frp服务           

在Linux系统中部署Frp服务

作者 hxwsq_华 于 2025-04-03 16:02:14.0 发表于 浙江    最近修改于 2025-04-03 16:02:14.0     本文浏览量:84人次

一、说明

1.1 服务器需求

Frp服务分为服务端frps和客户端frpc,frps部署在具有固定公网IP的服务器上,frpc部署在没有固定公网IP的内部服务器上

本文使用的服务器如下:

frps部署在有固定公网IP的云服务器上,操作系统版本:CentOS 7.6,公网IP地址:101.34.235.253

frpc部署在一台内部服务器上,操作系统版本:Rocky Linux 9.5,内网IP地址:192.168.8.221

1.2 准备工作

Frp安装包官方下载

Frp-0.61.0安装包(下载

二、部署服务端frps

2.1 上传Frp安装包至服务器目录(此处上传至/usr/local目录)

2.2 解压安装包

tar -zxf frp_0.61.0_linux_amd64.tar.gz
mv frp_0.61.0_linux_amd64 frp
---可以删除frpc相关文件

2.3 修改配置文件frps.toml

此处保持默认配置不做修改
端口7000是frps服务的监听端口,可自定义修改,并在云服务器的安全组和服务器系统防火墙中放通该端口

2.4 将frps服务配置成系统服务

cat << 'EOF' > /usr/lib/systemd/system/frps.service
[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /usr/local/frp/frps -c /usr/local/frp/frps.toml
[Install]
WantedBy = multi-user.target
EOF

2.5 启动frps服务并配置开机自启动

systemctl enable --now frps.service

三、部署客户端frpc

3.1 上传Frp安装包至服务器目录(此处上传至/usr/local目录)

3.2 解压安装包

tar -zxf frp_0.61.0_linux_amd64.tar.gz
mv frp_0.61.0_linux_amd64 frp
---可以删除frps相关文件

3.3 修改配置文件frpc.toml

此处只保留serverAddr和serverPort两项
serverAddr取值为云服务器的固定公网IP
serverPort取值为frps服务的监听端口
需要确保内部服务器可以连上frps服务

3.4 将frpc服务配置成系统服务

cat << 'EOF' > /usr/lib/systemd/system/frpc.service
[Unit]
Description = frp client
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /usr/local/frp/frpc -c /usr/local/frp/frpc.toml
[Install]
WantedBy = multi-user.target
EOF

3.5 启动frpc服务并配置开机自启动

systemctl enable --now frpc.service

四、通用配置

4.1 鉴权配置

配置项:
auth.method:鉴权方式,可选值为 token 或 oidc,默认为 token
auth.token:在 method 为 token 时生效,客户端需要设置一样的值才能鉴权通过

frps.toml配置如下:

frpc.toml配置如下:

配置完成后重启frps和frpc服务

systemctl restart frps.service
systemctl restart frpc.service

4.2 TLS协议加密-双向验证

该配置是为了使frpc 和 frps 之间的流量通过 TLS 协议加密,且frps和frpc需双向验证对方的身份

以下操作均在部署了frps服务的云服务器端操作:

4.2.1 用 openssl 生成 ca 和双方 SAN 证书

---创建Openssl配置文件
cat << 'EOF' >  my-openssl.cnf
[ ca ]
default_ca = CA_default
[ CA_default ]
x509_extensions = usr_cert
[ req ]
default_bits        = 2048
default_md          = sha256
default_keyfile     = privkey.pem
distinguished_name  = req_distinguished_name
attributes          = req_attributes
x509_extensions     = v3_ca
string_mask         = utf8only
[ req_distinguished_name ]
[ req_attributes ]
[ usr_cert ]
basicConstraints       = CA:FALSE
nsComment              = "OpenSSL Generated Certificate"
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer
[ v3_ca ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints       = CA:true
EOF

4.2.2 生成ca证书

openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/C=CN/ST=ZJ/L=HZ/O=hxwsq/CN=hxwsq" -days 36500 -out ca.crt

4.2.3 生成frps服务端证书

---生成密钥key文件
openssl genrsa -out server.key 2048
---生成csr文件
openssl req -new -sha256 -key server.key \
    -subj "/C=CN/ST=ZJ/L=HZ/O=hxwsq/CN=server.hxwsq.com" \
    -reqexts SAN \
    -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=IP:101.34.235.253")) \
    -out server.csr
---生成crt证书文件
openssl x509 -req -days 36500 -sha256 \
	-in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
	-extfile <(printf "subjectAltName=IP:101.34.235.253") \
	-out server.crt

4.2.4 生成frpc客户端证书

---生成密钥key文件
openssl genrsa -out client.key 2048
---生成csr文件
openssl req -new -sha256 -key client.key \
    -subj "/C=CN/ST=ZJ/L=HZ/O=hxwsq/CN=client.hxwsq.com" \
    -reqexts SAN \
    -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=IP:192.168.8.221")) \
    -out client.csr
---生成crt证书文件
openssl x509 -req -days 36500 -sha256 \
    -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
	-extfile <(printf "subjectAltName=IP:192.168.8.221") \
	-out client.crt

4.2.5 将ca证书、客户端证书和客户端密钥key文件复制到内部服务器上

4.2.6 证书配置

配置项:
transport.tls.certFile:证书存储路径
transport.tls.keyFile:密钥key文件存储路径
transport.tls.trustedCaFile:ca证书存储路径

frps.toml配置如下:

frpc.toml配置如下:

配置完成后重启frps和frpc服务

systemctl restart frps.service
systemctl restart frpc.service

4.3 日志配置

配置项:
log.to:日志输出文件路径
log.level:日志级别,可选值为 trace, debug, info, warn, error,默认级别为 info
log.maxDays:日志文件最多保留天数,默认为 3 天

示例配置:

配置完成后重启frps和frpc服务

systemctl restart frps.service
systemctl restart frpc.service

4.4 错误页面404配置

配置项(只需要在frps服务端中配置):
custom404Page:自定义 404 错误页面地址

此处仅給出一个简单的示例:

cat << 'EOF' > 404.html
<!DOCTYPE html>
<html>
<head>
<title>~~~404错误~~~</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1 align="center" style="color:red; font-size:35px">唉呀! 页面找不到啦~~~</h1>
</p>
</body>
</html>
EOF

frps.toml配置如下:

配置完成后重启frps和frpc服务

systemctl restart frps.service

 

本站声明

本站所有文章均由作者(hxwsq_华)个人整理和发布,仅供学习和参考,严禁任何形式的复制和转载!
如有疑问,请点击此处给作者发邮件,谢谢!