frp是什么?
frp采用Golang语言编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。
frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP,UDP,HTTP,HTTPS等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。
市面上一些主流的内网穿透工具有:Ngrok,Natapp,花生壳,Ssh、autossh,Frp,Lanproxy,Spike。
这里介绍使用frp工具。
我的frp是在局域网内实现的,如要实现公网,可以参考别的教程
一台服务器,服务器端,如IP为:192.168.80.133.
一台客户端服务器,客户端,如IP为:192.168.80.132.
gitlab地址:https://github.com/fatedier/frp,可以在 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。
找到自己Linux合适的版本,下载,主流Linux版本基本上都是amd64。
#下载
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
#解压
tar -zxvf frp_0.44.0_linux_amd64.tar.gz
#进入目录
cd frp_0.44.0_linux_amd64/
进入文件夹,有两个名称文件frpc(c结尾代表client)和frps(s结尾代表server),分别是服务端程序和服务端配置程序。
需要将frpc拷贝至客户端,即内网服务器,或者在客户端直接下载也可以,客户端只需要使用frpc文件即可。
在这里的话,我就直接在两台linux上都下载了frp,方便互传
这里是为服务端配置frp 只关注frps和frps.ini即可,原始最简单配置为。
cat frps.ini
[common]
#隧道通道,服务器和客户端通过此端口通讯
bind_port = 7000
只关注frpc和frpc.ini即可,修改frpc.ini。
vim frpc.ini
原始配置已经有ssh的端口配置,所以修改server_addr为服务器IP即可。
[common]
server_addr = 123.32.12.32
server_port = 7000
[ssh]
type = tcp
#本机IP
local_ip = 127.0.0.1
#本机需要映射的端口22
local_port = 22
#远程服务器映射的端口为6000
remote_port = 6000
注:服务器,如有防火墙,请开启7000端口和有需要的端口。
服务器运行启动:
./frps -c frps.ini
客户端运行启动:
./frpc -c frpc.ini
可以看到提示,都已经启动成功
测试ssh连接,这里直接使用linux的ssh工具:
浏览器打开web管理界面,http://192.168.80.133:7500/,可查看端口映射相关情况。
其他更多参数参考中文文档:https://gofrp.org/docs/
当然对于正式环境,可以配置后台启动,并报存日志输出到相关文件。
服务端:
nohup ./frps -c frps.ini > /usr/local/frp/frp.log 2>&1 &
客户端:
nohup ./frpc -c frpc.ini > /usr/local/frp/frp.log 2>&1 &
这里只演示客户端单向连接服务端,如需双向连接,请移步其他博客
进入文件夹:
cd /etc/systemd/system
创建启动文件:
vim frp.service
编写启动文件,其中启动路径是自己的路径:
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
ExecReload=/usr/local/frp/frps reload -c /usr/local/frp/frps.ini
[Install]
WantedBy=multi-user.target
保存退出之后,设置开机自启:
systemctl start frp.service
systemctl enable frp.service