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

内网穿透解决的是没有公网ip的问题,如果有动态的公网ip,需要稳定的连接,也可以通过内网穿透来稳定提供服务,当具备了稳定的公网ip,内网穿透就基本没有意义了。

以0.61.2版本为例(2025年3月版本)

一、相关链接

github项目地址:frp giuhub链接

frp大更新了一次,主要是配置文件改了,新版和旧版(0.51.3之前)
2023.8月之前的旧版本参考这个教程:旧版教程链接
老版的博客我写的很详细,包括原理,这个新版我就简单演示一下,原理是一样的

这里的案例主要对网站进行穿透,包括支持ipv6、http3、wss

二、frp的下载

(一)对应版本的选取

在这里插入图片描述

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

在这里插入图片描述

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

(一)linux安装和启动

1.下载

cd /usr/local
wget https://github.com/fatedier/frp/releases/download/v0.61.2/frp_0.61.2_linux_amd64.tar.gz

2.解压并重命名文件

tar -zxvf frp_0.61.2_linux_amd64.tar.gz

重命名文件夹

mv ./frp_0.61.2_linux_amd64 ./frp && cd frp

3.配置frp

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

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端口。日志一定要配置的。
注意修改里面的参数,customDomains 修改为自己的域名,否则无法访问
使用http、https做穿透,只能用域名访问,不能用ip访问!另外穿透是自动把ipv4和ipv6都穿透的,无需额外设置。只要公网服务器支持ivp6就行,我的本地也支持ipv6的(大部分路由器是单向ipv6,我用的是ikuai开启的ipv6双向支持)
http3使用的是udp,所以只需要再对443端口进行udp穿透就可以支持http3了(http3必须要证书,而且需要服务器支持才行)

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 = "http3"
type = "udp"
localIP = "127.0.0.1"
localPort = 443
remotePort = 443


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

4.systemctl管理-frps

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

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

systemctl start frps && systemctl enable frps && systemctl status frps

5.systemctl管理-frpc

frpc

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

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

systemctl start frpc && systemctl enable frpc && systemctl status frpc

(二)windows客户端

1.下载对应的客户端

下载下来.zip的文件

2.解压到文件夹

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

3.使用命令行操作

就是命令提示符啦,注意运行之后不能关闭命令提示符。
进入到frp解压后的目录

cd c:/frp

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

参考上面的linux配置

5.启动

在命令行下操作,.exe加不加都行
启动frps
(注意frps很可能会被杀毒软件误报!)

frps -c frps.toml 

启动frpc

frpc -c frpc.toml 

6.开机启动

使用计划任务可以实现开机启动,参考老版链接。

三、应用

frp新版和老版的原理是一样的,仅仅在配置格式上不一样,另外一些细节不一样
网站的穿透在上面就处理了,其它的穿透原理参考老版的。

老版的frp教程:链接

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

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

(一)frps(服务端)

vi /usr/local/frps.sh

记得修改下面常量设置里的参数,根据自己的情况修改。
如果下载太慢,把下载那一行用#注释掉,手动下载上传后再运行脚本

#!/bin/bash

# 常量设置
frp_version="0.61.2" # 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
chmod -x /usr/local/frps.sh
sh /usr/local/frps.sh

在这里插入图片描述

(二)frpc(客户端)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziqibit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值