frp 算是我常用的工具,1024 趁着活动,又入了台腾讯的 VPS,国内的,也不想备案,所以拿来做FRP服务器用吧。
之前用的都是简洁配置,没太考虑安全性,这次新布置,干脆把其他几台 VPS 也升级一下,加强一下安全性吧。
首先是去 Github 下载了最新的版本,然后在宝塔里上传、解压;
然后去宝塔的终端里先把当前运行的 frp 服务停止,因为用的是 systemd
停止 frps:
systemctl stop frps然后回到宝塔的文件管理里,把 frps 覆盖到原 frps 所在的位置。
接下来才是这次改造的重点,官方的文档有点难懂,甚至豆包都没能给出正确答案,最后还是靠千问。
frps.toml 配置
bindPort = 服务器上开放的监听端口,别忘记防火墙
auth.method = "token"
auth.token = "建议用随机密码生成器生成一组超过64位的强字符串"
transport.tls.force = true
transport.tls.certFile = "/opt/frp/certs/server.crt"
transport.tls.keyFile = "/opt/frp/certs/server.key"
# 日志
log.to = "/opt/frp/frps.log"
log.level = "info"
log.maxDays = 7然后用脚本生成自签证书,注意一下 frps 所在的目录,以及服务器的 IP 地址
cd ~ && cat > gen_frp_cert.sh << 'EOF'
#!/bin/bash
mkdir -p /opt/frp/certs
cd /opt/frp/certs
# 1. CA 根证书
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/CN=frp-ca"
# 2. 服务器私钥和包含 IP SAN 的 CSR 和 CRT
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr \
-subj "/CN=frp-server" \
-addext "subjectAltName=IP:你服务器的IP地址"
openssl x509 -req -in server.csr \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-out server.crt -days 1825 -sha256 \
-extfile <(printf "subjectAltName=IP:%s" "你服务器的IP地址")
chmod 600 *.key
echo "========================================="
echo "证书生成成功!位置:/opt/frp/certs/"
echo "========================================="
EOF
chmod +x gen_frp_cert.sh && bash gen_frp_cert.sh在终端里运行上面的脚本,获取到证书后,启动 frps 服务
启动 frps:
systemctl start frps
重启 frps:
systemctl restart frps运行后查看一下状态,看看有没有报错
查看 frps 状态:
systemctl status frps没问题就进入下一步,先在宝塔里把 certs 目录下,刚才脚本生成的证书里的 ca.crt 下载到本本地
然后上传到 NAS 里,比如位置放在 docker/frp/certs/ca.crt
然后就是 frpc.toml 的配置
# 1. 基础连接配置(全局放在最顶部,不要加任何段头)
serverAddr = "frps服务器的IP地址"
serverPort = 之前服务器上开放的监听端口
# 登录失败是否直接退出(设为false,方便你调试连接问题)
loginFailExit = false
# 2. 传输与心跳配置(所有 transport 配置合并在这里)
[transport]
protocol = "tcp"
tcpMux = true
tcpMuxKeepaliveInterval = 30
heartbeatTimeout = 90
heartbeatInterval = 30
# TLS 安全配置(合并进上面的 transport 段)
tls.enable = true
tls.trustedCaFile = "/certs/ca.crt"
#之前就是这一步卡了好久
# 3. 身份认证配置
[auth]
method = "token"
token = "从服务器上 frps.toml 里复制过来"
# 4. 端口映射配置(注意是双中括号 [[proxies]])
[[proxies]]
name = "起个不重的名字"
type = "tcp"
localIP = "你内网服务器的IP,如果是NAS本机就用 127.0.0.1"
localPort = NAS上应用的端口
remotePort = 映射到 VPS 上的端口,别忘记 VPS 的防火墙要开放对应的端口号
[[proxies]]
name = "起个不重的名字"
type = "tcp"
localIP = "你内网服务器的IP,如果是NAS本机就用 127.0.0.1"
localPort = NAS上应用的端口
remotePort = 映射到 VPS 上的端口,别忘记 VPS 的防火墙要开放对应的端口号运行 Docker ,网络选择 Host 模式,要留意的是挂载路径,有二个
本地 frpc.toml 所在的地址,比如 docker/frp/frpc.toml : /ect/frp/frpc.toml
本地 ca 证书所在的地址,比如 docker/frp/carts/ca.crt : /certs/ca.crt
到了这儿,基本上就成功了;
之前只用了 Token 认证,现在开了 TLS 加了认证证书,应该要比之前安全些吧。

评论区(4条评论)
技术上实现起来应该非常有利,但是访问带宽是个问题啊,不知道划不划算。
Frp,一个内网穿透的神器。