# FRP内网穿透

# 介绍

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

# 为什么使用frp

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

FRP官网 (opens new window)

Github仓库 (opens new window)

安装包下载地址 (opens new window)

image-20220208152645155

  • 我的服务器是centos7系统(腾讯云主机),拥有公网ip
  • 需要穿透网络的是win10系统电脑

根据所使用的系统来选择安装包,我这里服务器端选择了Linux_amd64安装包、客户端选择了windows_amd64安装包

# 安装

  • 服务端的相关配置为frps**
  • 客户端的相关配置为frpc**

# 服务端

  1. 解压frp压缩包

image-20220208164441844

  1. 进入目录修改服务端配置

image-20220208164611263

# 配置文件内容

vim frps.ini
1
[common]
bind_addr = 0.0.0.0 #服务端连接客户端的ip地址
bind_port = 7100 #服务端连接客户端的端口
bind_udp_port = 7101 #UDP绑定端口
kcp_bind_port = 7102 #KCP绑定端口
dashboard_addr = 0.0.0.0 #服务端仪表盘面板的ip地址
dashboard_port = 7500 #服务端仪表盘面板的端口
dashboard_user = admin #仪表盘页面登录的用户名
dashboard_pwd = 123456 #仪表盘页面登录的密码
enable_prometheus = true #开启普罗米修斯
log_file = ./frps.log #设置日志文件地址
log_level = info  #设置日志记录级别
token = 1327398885 #服务端连接客户端的口令
1
2
3
4
5
6
7
8
9
10
11
12
13

# 启动命令

# 前台启动命令
./frps -c frps.ini
# 后台启动命令
nohup ./frps -c frps.ini >/dev/null 2>&1 &
1
2
3
4

其中,>为输出重定向符号,>/dev/null 2>&1。这条命令其实分为两命令,一个是>/dev/null,另一个是2>&1。

  1. /dev/null

这条命令的作用是将标准输出1重定向到/dev/null中。/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。

  1. 2>&1

这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。

linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令,所以>/dev/null 2>&1的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。执行了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中。

# 客户端

我这里使用win10系统电脑,将安装包解压

image-20220208165636059

# 配置文件内容

[common]
server_addr = 192.168.1.1 # 修改为服务器地址
server_port = 7100 # 服务器绑定端口
token = 1327398885 # 访问token
admin_addr = 192.168.1.1 # 客户端Web地址
admin_port = 7500 # Web访问端口
admin_user = admin # Web访问账户
admin_pwd = 123456 # Web访问密码

[company_res]
type = tcp
local_ip = 192.168.1.243
local_port = 8088
remote_port = 7200
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 启动命令

# 前台启动命令/Ctrl+C停止服务
frpc -c frpc.ini
# 后台启动命令
nohup ./frpc -c frpc.ini >/dev/null 2>&1 &
1
2
3
4

启动成功日志:

image-20220208170249102

# 运行效果

我这里代理了我本地的一个nginx文件服务

image-20220208170345886

访问公网ip,正常显示

# 停止

# 查询到
lsof  -i |grep frpc

# 停止服务
kill -9 pid
1
2
3
4
5

# 参考

安装参考 (opens new window)

配置参考 (opens new window)

上次更新时间: 2024年2月14日星期三上午10点24分