内网穿透解决的是没有公网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,然后修改下就好,我这后面补上。