frp搭建内网穿透
内网穿透工具 FRP
,FRP
全名:Fast Reverse Proxy
。FRP
是一个使用 Go 语言开发的高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务。FRP 支持 TCP
、UDP
、HTTP
、HTTPS
等协议类型,并且支持 Web
服务根据域名进行路由转发。
FRP 项目地址: https://github.com/fatedier/frp
笔者环境:
- 服务端:centos 7.9
- 客户端:win10 64位
FRP 的作用
- 利用处于内网或防火墙后的机器,对外网环境提供 HTTP 或 HTTPS 服务。
- 对于 HTTP, HTTPS 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个 80 端口。
- 利用处于内网或防火墙后的机器,对外网环境提供 TCP 和 UDP 服务,例如在家里通过 SSH 访问处于公司内网环境内的主机。
FRP 架构
RP 安装
- FRP 采用 Go 语言开发,支持 Windows、Linux、MacOS、ARM等多平台部署。FRP 安装非常容易,只需下载对应系统平台的软件包,并解压就可用了。
# 创还能目录(可自定义)
mkdir -p /home/frp
# 进入目录
cd /home/frp
# 下载资源包(可使用FTP离线上传)
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
# 解压
tar zxf frp_0.61.0_linux_amd64.tar.gz
# 进入解压的FRP资源目录
cd frp_0.61.0_linux_amd64
- 当前解压目录后的目录
- 编辑服务端配置文件
vi frps.toml
- 写入服务端配置信息
bindPort = 7000[common]
# frpc Client客户端连接Frps服务端时的token 为了安全 建议添加
token = QWE001
dashboard_port = 7500
# 指定 Dashboard 的监听的端口
dashboard_port = 7500
# 指定访问 Dashboard 的用户名
dashboard_user = admin
# 指定访问 Dashboard 的密码
dashboard_pwd = admin
注意:
1)命令可使用驼峰
或者下划线
,与版本无关哈。
2)默认配置中监听的是 7000
端口(如有防火墙需要开通服务器本级防火墙和边界防火墙7000/TCP端口
),可根据自己实际情况修改。
5. 启动FRP
./frps -c ./frps.toml
5.1 配置dashboard_port
信息后可以访问Dashboard
界面,用户名密码默认都为 admin
。
6. 配置守护进程
以下为frps
(服务端)的守护进程配置方式,客户端的守护进程配置方式与之相似。
要使用systemd
来控制frps
,需要先安装 systemd
,然后在 /etc/systemd/system
目录下创建一个 frps.service
文件。
1) 如Linux
服务端上没有安装 systemd
,可以使用 yum
或 apt
等命令安装 systemd
。
# yum
yum install systemd
# apt
apt install systemd
- 使用文本编辑器,如
vi
创建并编辑frps.service
文件。
vim /etc/systemd/system/frps.service
写入内容
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml[Install]
WantedBy = multi-user.target
注意:/path/to
为实际解压路径,笔者使用/home/frp/frp_0.61.0_linux_amd64
3)使用 systemd 命令,管理 frps。
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps
4) 配置 frps 开机自启。
systemctl enable frps
FRP 客户端配置
- 下载Windows版本的FRP客户端:https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_windows_amd64.zip
2. 编辑frpc.toml
[common]
server_addr = 0.0.0.1
server_port = 7000
# frpc Client客户端连接Frps服务端时的token 为了安全 建议添加
token = QWE001[event-tcp]
name = "event-tcp"
type = tcp
local_ip = 192.168.101.104
local_port = 10012
remote_port = 20012
CMD
运行(关闭窗口后停止运行),可使用服务的方式运行,作者可自行研究方法- 当前目录下执行
frpc.exe -c frpc.toml
5. 代理的web服务可通过
http://0.0.0.1:20012
0.0.0.1
:服务端IP
20012
:远程端口,服务端只需要开通私网和公网20012的端口
3
windows将frp或其他应用配置为service服务并开机自启
-
下载
WinSW
安装包
github下载地址:WinSW https://github.com/kohsuke/winsw/releases
可以将下载的文件改名为winsw.exe
,方便后续操作 -
编写一个配置文件
在winsw.exe
的同级创建一个和winsw
同名的xml
配置文件,exe
和xml
可以修改文件名称,保持同名
即可。最好创建一个logs
文件夹,看大家是否需要。
此处以frp客户端为例
注意:要配置服务的应用,如frpc最好是放在D盘下,因为C盘下可能会出现权限问题而无法正常运行
<service><!-- 该服务的唯一标识 --><id>frpc_0.57.0-windows-amd64</id><!-- 该服务的名称 --><name>frpc_0.57.0-windows-amd64</name><!-- 该服务的描述 --><description>frp内网穿透-客户端</description><!-- 要运行的程序路径 --><executable>D:\APPEXE\frp\frp_0.57.0_windows_amd64\frpc.exe</executable><!-- 携带的参数 --><arguments>-c D:\APPEXE\frp\frp_0.57.0_windows_amd64\frpc.toml</arguments><!-- 第一次启动失败 60秒重启 --><onfailure action="restart" delay="60 sec"/><!-- 第二次启动失败 120秒后重启 --><onfailure action="restart" delay="120 sec"/><!-- 日志模式 --><logmode>append</logmode><!-- 指定日志文件目录(相对于executable配置的路径) --><logpath>logs</logpath>
</service>
- 启动服务
【方式一】:打开终端,用winsw
命令启动
-
- 右击选择在终端打开,开启命令行
-
- 输入命令
.\winsw.exe install
- 输入命令
【方式二】:打开服务,找到frpc自行启动
-
- Win键 + R,然后输入
services.msc
- Win键 + R,然后输入
-
- 找到
frpc_0.43.0-windows-amd64
服务,右键,然后选择启动
- 找到
- WinSW常用操作命令
# 注册服务
.\winsw.exe install
# 卸载服务
.\winsw.exe uninstall
# 启动服务
.\winsw.exe start
# 停止服务
.\winsw.exe stop
# 重启服务
.\winsw.exe restart
# 查看状态
.\winsw.exe status
centos开放防火墙指定端口
在开启防火墙指定端口时需要保持防火墙开启
- 查看防火墙状态
systemctl status firewalld
- 如果是关闭则开启防火墙
systemctl start firewalld
- 开启之后就可以开启放指定端口了
firewall-cmd --zone=public --add-port=这里是需要开启的端口号/tcp --permanent
要加–permanent 这是永久生效,不然关机后就要重新开始配置
4. 重新加载防火墙,重新加载后配置生效
firewall-cmd --reload
- 查看开放的端口
firewall-cmd --list-port