https://github.com/fatedier/frp

1. 环境准备

ssh连接 1. 需要一台可以直接访问外网的服务器,比如阿里云服务器(服务端) 2. 需要做内网穿透的服务器,比如公司内部的局域网测试服务器(客户端) web访问 3. 需要额外的已经备案的域名

2. 下载地址

https://github.com/fatedier/frp/releases 选择最新的就行,一般都是linux环境

下载并进行解压

  1. wget https://github.com/fatedier/frp/releases/download/v0.35.1/frp_0.35.1_linux_amd64.tar.gz
  2. tar -xvf frp_0.35.1_linux_amd64.tar.gz

服务端配置

  查看frps.ini文件,修改为如下内容

  1. [common]
  2. bind_port = 7000 # 客户端跟服务端绑定的端口号
  3. vhost_http_port = 80

  默认的配置信息中只有一个绑定端口为7000,意思是我们在外网服务器中绑定7000端口和客户端进行通信。注:端口可以自定义,但是需要客户端和服务端进行统一。阿里云服务器需要在esc管理中配置安全组规则中暴露7000端口
  启动服务端

  1. ./frps -c frps.ini

  如下表示启动成功

  启动成功之后,关闭xshell或者是退出回话,都会使连接断开,可以使用nohup来进行后台启动(后面启动都可以使用这种方式)
  如下是后台启动并将日志输入到file.log文件中

  1. nohup ./frps -c ./frps.ini > file.log 2>&1 &

客户端配置

  查看frpc.ini文件,修改为如下内容

  1. [common]
  2. server_addr = 39.105.97.50 # 你的公网ip
  3. server_port = 7000 # 绑定的端口,自定义,跟服务端一直即可
  4. [ssh]
  5. type = tcp
  6. local_ip = 127.0.0.1 # 绑定的ip,填写127.0.0.1表示本机即可
  7. local_port = 22
  8. remote_port = 6008 # ssh默认是22,现在转发为6008端口


  • [common]表示以下配置信息是一些公用配置信息
  • server_addr是我们服务端即外网服务器的公网访问ip
  • server_port是我们前面在服务端配置的frps.ini中bind_port中对应的端口。需保持两边一致
  • [ssh]表示以下配置信息是我们使用ssh连接内网服务器时需要的一些配置信息
  • type 是连接类型,ssh方式连接就用tcp
  • local_ip 是本机ip,直接使用127.0.0.1即可
  • local_port 是本地ssh端口,ssh默认端口为22
  • remote_port 是外网服务器请求过来的端口 注:阿里云服务器需要在esc管理中配置安全组规则中添加6008端口

启动客户端

  1. ./frpc -c ./frpc.ini

OK,之后可以通过xshell来连接,只需要指定端口号为remote_port(6008)即可,如下

多个ssh配置

  1. [common]
  2. server_addr = 39.105.97.50
  3. server_port = 7000
  4. [ssh001] # 不能重复
  5. type = tcp
  6. local_ip = 127.0.0.1
  7. local_port = 22
  8. remote_port = 6009 # 不能重复

  单个ssh配置成功,项配置多个,一样的操作,在另一台机器进行下载frp,之后只需要修改frpc.ini文件,修改格式如下

  需要将remote_port进行修改,[ssh]名称不能重复
  frpc命令启动即可。

外网服务器HTTP配置

  配置了http之后,就可以访问内网的web服务了,比如云盘前提是需要有已经备案的域名,这样才能配置。

配置方式

服务端:修改frps.ini,内容如下
[common]
bind_port = 7000
vhost_http_port = 6001 # 访问6001端口,映射到内网web服务
  bind_port和之前做ssh时是一个意思。也是为了和客户端建立通信的端口,只需要在之前的配置文件中添加上vhost_http_port = 6001,这个配置意思是让别人在访问我们的服务器6001端口时。frp将http请求转发到内网服务器
客户端:修改frpc.ini,修改内容如下

  1. [common]
  2. server_addr = 39.105.97.50
  3. server_port = 7000
  4. [ssh]
  5. type = tcp
  6. local_ip = 127.0.0.1
  7. local_port = 22
  8. remote_port = 6008
  9. [web]
  10. type = http
  11. local_port = 8080 # 访问本地8080web服务
  12. custom_domains = www.chendahai.cn # 必须已经备案


  • [web]表示我们的配置是一个web服务
  • type表示我们的请求方式是http方式
  • local_port表示我们的本地服务端口号为80
  • custom_domains表示配置为一个已经备案的域名(必填,并且需要域名可用) 并且域名解析配置为外网服务器ip

  OK,使用frpc命令重启即可,通过www.chendahai.cn:6001,即可访问内网的8080服务了。

多个web服务配置

  如果想配置多个web服务怎么办,跟ssh类似,添加多个[web]即可,注意不能重名
  服务端不需要做任何修改,修改ftpc.ini内容如下

  1. [common]
  2. server_addr = 39.105.97.50
  3. server_port = 7000
  4. [ssh]
  5. type = tcp
  6. local_ip = 127.0.0.1
  7. local_port = 22
  8. remote_port = 6008
  9. [web01]
  10. type = http
  11. local_port = 8080
  12. custom_domains = www.chendahai.cn
  13. [web02]
  14. type = http
  15. local_port = 80
  16. custom_domains = cd.chendahai.cn # 使用二级域名进行配置

  之后访问内网的80端口web服务可以通过cd.chendahai.cn:6001就可以访问了,二级域名是需要配置域名解析的
  如下是配置了2个ssh和3个web服务,服务端日志如下

3. 配置自动启动

笔者使用systemctl来控制启动,以服务端为例。
首先
sudo vim /lib/systemd/system/frps.service
在frps.service里写入以下内容

  1. [Unit]
  2. Description=fraps service
  3. After=network.target network-online.target syslog.target
  4. Wants=network.target network-online.target
  5. [Service]
  6. Type=simple
  7. #启动服务的命令(此处写你的frps的实际安装目录)
  8. ExecStart=/your/path/frps -c /your/path/frps.ini
  9. [Install]
  10. WantedBy=multi-user.target

然后启动 frps
sudo systemctl start frps
再打开自启动
sudo systemctl enable frps
同时

  • 重启 sudo systemctl restart frps
  • 停止 sudo systemctl stop frps
  • 查看应用日志 sudo systemctl status frps

<br />
结束  OK,内网穿透基本配置完毕  frp的使用和配置相当简单,如有疑问或者想了解关于frp的其它功能可以查看官方中文文档<br />