新版frp 内网穿透 (linux+windows)+bash脚本

内网穿透解决的是没有公网ip的问题,如果有动态的公网ip,需要稳定的连接,也可以通过内网穿透来稳定提供服务

以0.61.0版本为例(2024年11月版本)

一、相关链接

github项目地址:frp giuhub链接

frp大更新了一次,主要是配置文件改了,新版和旧版(0.51.3之前)

2023.8月之前的旧版本参考这个教程:旧版教程链接
老版的博客我写的很详细,包括原理,这个新版我就简单演示一下,原理是一样的

二、frp的下载

(一)对应版本的选取

linux和windows默认就下载下面的两个版本就行,从这也可以看到可以支持bsd系统、android系统、arm架构、mips架构和risv架构,根据你的cpu架构和系统来决定下载哪一个。

三、安装、启动、配置(windows+linux)

(一)linux安装和启动

1.下载

bash 复制代码
cd /usr/local
bash 复制代码
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz

2.解压并重命名文件

bash 复制代码
tar -zxvf frp_0.61.0_linux_amd64.tar.gz

重命名文件夹

bash 复制代码
mv ./frp_0.61.0_linux_amd64 ./frp && cd frp

3.配置frp

我这里以穿透http为例
frps配置

bash 复制代码
vi /usr/local/frp/frps.toml
bindPort = 10086
vhostHTTPPort = 80
vhostHTTPSPort = 443
auth.method = "token"
auth.token = "abc123456"
webServer.addr = "0.0.0.0"
webServer.port = 10010
webServer.user = "abc"
webServer.password = "abcdefg123456"

log.to="/var/log/frp/frps.log"
log.level="info"
log.maxDays=7

我这里设置了日志,另外配置了默认的http端口,如果是用来做网站的,可以直接抄,当然里面的端口和密码需要改。
根据作者的文档,新版是自带加密的,所以无需在自己生成证书加密了

frpc配置

这里是简化的,因为和具体穿透的内容有关,我这里假设是穿透一个http端口、一个https端口、一个wss端口。日志一定要配置的。
注意修改里面的参数

serverAddr = "xxx.xxx.xxx.xxx"
serverPort = 10086
auth.method = "token"
auth.token ="abc123456"
log.to="/var/log/frp/frpc.log"
log.level="info"
log.maxDays=7

[[proxies]]
name = "http"
type = "http"
localPort = 80
customDomains = ["example.com","www.example.com"]
transport.useEncryption = true
transport.useCompression = true


[[proxies]]
name = "https"
type = "https"
localPort = 443
customDomains = ["example.com","www.example.com"]
transport.useEncryption = true
transport.useCompression = true  # 压缩过长数据


[[proxies]]
name = "wss"
type = "tcp"
localIP = "127.0.0.1"
localPort = 12345
remotePort = 12345

4.systemctl管理-frps

bash 复制代码
vi /lib/systemd/system/frps.service

frps

[Unit]
Description=frps
After = network.target syslog.target
Wants = network.target

[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.toml
ExecStop=/bin/kill $MAINPID
Restart=always 
RestartSec=5

[Install]
WantedBy=multi-user.target

启动、开机启动、状态检查

bash 复制代码
systemctl start frps && systemctl enable frps && systemctl status frps

5.systemctl管理-frpc

frpc

bash 复制代码
vi /lib/systemd/system/frpc.service
[Unit]
Description=frpc
After = network.target syslog.target
Wants = network.target

[Service]
Type=simple
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.toml
ExecStop=/bin/kill $MAINPID
Restart=always 
RestartSec=5

[Install]
WantedBy=multi-user.target

启动、开机启动、状态检查

bash 复制代码
systemctl start frpc && systemctl enable frpc && systemctl status frpc

(二)windows客户端

1.下载对应的客户端

下载下来.zip的文件

2.解压到文件夹

比如解压到c://frp文件夹

3.使用命令行操作

就是命令提示符啦,注意运行之后不能关闭命令提示符。

cmd 复制代码
cd c:/frp

4.配置文件和linux下的一样

三、应用

frp新版和老版的原理是一样的,仅仅在配置格式上不一样,另外一些细节不一样

网站的穿透在上面就处理了,其它的穿透原理参考老版的。

老版的frp教程:链接

四、bash脚本一键部署(for linux)

我这里封装好了bash脚本,需要根据自己的需要调整参数,或者可以使用程序语言调用来实现运维的自动化,我这里抛砖引玉了,不再多写。

(一)frps(服务端)

bash 复制代码
vi /usr/local/frps.sh

记得修改下面常量设置里的参数,根据自己的情况修改。

如果下载太慢,把下载那一行用#注释掉,手动下载上传后再运行脚本

bash 复制代码
#!/bin/bash

# 常量设置
frp_version="0.61.0" # frp版本
install_path="/usr/local" # 安装、操作目录
frps_token="abc123456" # frps的连接密码
frps_port=10086 # frps和frpc通讯的端口


# 1.下载安装包
cd ${install_path}
wget -P ${install_path} https://github.com/fatedier/frp/releases/download/v${frp_version}/frp_${frp_version}_linux_amd64.tar.gz 
echo "......安装包下载完成......"

# 2.解压缩
tar -zxf frp_${frp_version}_linux_amd64.tar.gz
echo "......安装包解压完成......"

# 3.重命名文件夹
mv ./frp_${frp_version}_linux_amd64 ./frp && cd frp

# 4.配置frps.toml
sed -i "s/bindPort = 7000/bindPort = ${frps_port}/g" ${install_path}/frp/frps.toml
echo "vhostHTTPPort = 443\nauth.method = \"token\"\nauth.token =\"${frps_token}\"" >> ${install_path}/frp/frps.toml
echo "......配置完成......"


# 5.配置frps的systemctl管理脚本
cat>/usr/lib/systemd/system/frps.service<<EOF
[Unit]
Description=frps
After = network.target syslog.target
Wants = network.target

[Service]
Type=simple
ExecStart=${install_path}/frp/frps -c ${install_path}/frp/frps.toml
ExecStop=/bin/kill $MAINPID
# 这里设置了5s重新启动
Restart=always 
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl start frps
systemctl enable frps
systemctl status frps
bash 复制代码
chmod -x /usr/local/frps.sh
bash 复制代码
sh /usr/local/frps.sh

(二)frpc(客户端)

参考上面的frps,然后修改下就好,我这后面补上。

相关推荐
乌南竹3 分钟前
四十五:HTTP/2特性概述
网络·网络协议·http
hgdlip17 分钟前
ip地址暴露了怎么办?手机怎样改ip地址以保障安全
网络·tcp/ip·智能手机
dog2501 小时前
TCP 的文化内涵
服务器·网络·tcp/ip
RayLink远程控制电脑2 小时前
远程协助,打工人的数字生活私人医生
服务器·网络·生活
前端与小赵2 小时前
什么是WebSocket,有什么特点
网络·websocket·网络协议
网络安全Ash2 小时前
网络安全-态势感知
网络·安全·web安全
运维有小邓@2 小时前
U2F和FIDO2 两种安全认证技术优劣势对比
服务器·网络·安全
小翼不想投降2 小时前
nmap详解
网络·安全·web安全
黑客呀3 小时前
密码学——密码学基础、散列函数与数字签名
网络·数据库·人工智能
黑客K-ing8 小时前
从 HTTP 到 HTTPS 再到 HSTS
网络·网络协议·安全·web安全