内网穿透Frps使用教程
文章树列

简介

frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。

相比ngrok,frp内网穿透无需多复杂的配置就可以达到比较好的穿透效果,具有较强的扩展性,支持 tcp, udp, http, https 协议。

       teamview 太黑心,莫名其妙检测商用劝退,实在是不得不脱坑。与其每个月给几百块RMB不如花几十块钱买台云服务。自己组建远程连接环境,使用windows远程桌面在公司连家里的电脑,安全无后门。 

       此种方式基本能穿透各种类型的网络类型了,我们公司用的代理上网,使用这种方式穿透也没有问题了,就是远程有使用一点手段,但是穿透完全没有问题,如果不是使用代理上网,以下的方式完全可以实现跨局域网使用windows远程连接。

下载安装

    首先下载frp  下载地址  https://github.com/fatedier/frp/releases

                       我下载的是  frp_0.21.0_linux_amd64.tar.gz

                        解压后得到7个文件如下:

                         然后 编辑 frpc.ini

                vi  frpc.ini

                     配置文件内容如下:

[common]
bind_addr=0.0.0.0
 bind_port = 7000
 auto_token=yumianfeilong 
dashboard_port = 7500
 dashboard_user = admin
 dashboard_pwd = admin

关于这几个配置意思 我就不废话了  直接上中文api地址 :https://github.com/fatedier/frp/blob/master/README_zh.md

然后执行  ./frps -c ./frps.ini 

看到如下 

则说明成功了,

但是也可能有意外  比如脚本可能不能运行 

那么先执行这个 :  chmod +X *.sh

赋予脚本执行权限

然后在执行   ./frps -c ./frps.ini 

然后访问  http://服务器ip:7500 

上面配置的7500端口,使用上面配置的用户名和密码 admin/admin

登陆可以看到如下界面

到此处服务器端的配置完成了

接下来配置设置对应的客户端

同样在上面的地址下载客户端 我用的是windows  使用下载的是

frp_0.21.0_windows_386.zip

同样解压,解压后 只需要里面的两个文件

如下:

然后修改frpc.ini

修改内容如下:

[common]

server_addr = 这个地方是你的外网服务器的ip 
server_port = 7000
auto_token=yumianfeilong

[yumianfeilong]

type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3389

保存后就可以在命令行使用  frpc.exe -c frpc.ini  

看到如下输出

那么环境就搭建成功了

接下来可以直接使用windows远程桌面连接了

远程桌面连接的地址 与正常的远程连接不一样的地方是  需要在远程桌面的地址上写个端口号,这个端口号就是客户端配置的端口号;例如:

接下来就和正常的远程桌面连接一样了

客户端以上就是客户端A的配置了

客户端B的配置就是改一下配置的端口号和名称和名称就行

如下

[common]
server_addr = 这个地方是你的外网服务器的ip 
server_port = 7000
auto_token=yumianfeilong

[yumianfeilong]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3389

这个时候远程的ip和地址就是   服务器IP:配置的3390端口

依次类推 客户端C 客户端D 只需要改一下名字和端口就行了,名字不能重复

需要提前准备的材料:

  1. 公网服务器1台(国内!!!)
  2. 系统要求:CentOS 7+、Debian 8+

需要额外注意的事项:

  1. 注意,除http(s)以外,客户端frpc.ini内任何端口修改时须在以下范围内:
    默认端口白名单:2000-3000,3001,3003,4000-50000
  2. 转发远程桌面时,需先在本机开启允许远程协助 我的电脑-右键属性-远程设置
  3. 需要注意frpc所在机器和frps所在机器的时间相差不能超过15分钟

安装使用

Github地址:https://github.com/dylanbai8/frpspro

wget -N --no-check-certificate git.io/f.sh && chmod +x f.sh && bash f.sh install

安装完成后,会输出一些参数信息。

然后根据所给地址下载Frpc Windows便捷脚本,解压出来,再修改配置文件后,直接开启即可。配置文件参考此处

编辑配置文件的时候用记事本编辑可能会出问题,建议使用notepad++或者vscode。

二、常用命令

#一键关闭 apache2、防火墙,释放80端口
bash f.sh unapache2

#一键修改token
bash f.sh token

#一键修改bind_port
bash f.sh bind_port

#一键修改vhost_http_port
bash f.sh vhost_http_port

#一键修改vhost_https_port
bash f.sh vhost_https_port

备用命令

#一键修改dashboard_port
bash f.sh dashboard_port

#一键修改dashboard_user
bash f.sh dashboard_user

#一键修改dashboard_pwd
bash f.sh dashboard_pwd

#一键修改bind_udp_port
bash f.sh bind_udp_port

#一键修改kcp_bind_port
bash f.sh kcp_bind_port

#一键修改subdomain_host(用于泛解析子域名)
bash f.sh subdomain_host

#一键卸载frps
bash f.sh uninstall

案例列举

内网穿透访问web项目
1.外网服务端配置
1.1配置Frps.ini文件

[common]
#内网穿透服务器端监听的IP地址,可以省略,默认为127.0.0.1
bind_addr = 0.0.0.0
#服务器端监听的端口,默认是7000,可自定义
bind_port = 7001
#该端口就是以后访问web服务需要用到的端口
vhost_http_port = 8006


1.2启动命令
注:需要切换到文件目录

./frps -c frps.ini
1
后台启动:nohup ./frps -c ./frps.ini &

1.3启动日志

2019/03/23 17:27:41 [I] [service.go:136] frps tcp listen on 0.0.0.0:7001
2019/03/23 17:27:41 [I] [service.go:178] http service listen on 0.0.0.0:8006
2019/03/23 17:27:41 [I] [root.go:204] Start frps success


则说明服务器端已经启动Frp服务,监听的端口是7001。

2.内网客户端配置
2.1内网机器配置Frpc.ini

[common]
#外网-服务器端ip
server_addr = xx.xx.xx.xx
#外网-服务器端监听的端口(必须与Frps.ini中的配置一致)
server_port = 7001

[web]
#配置类型为http协议
type = http
#内网机器的IP
local_ip = 127.0.0.1
#内网需要监听的端口
local_port = 8821
#公网服务器的IP或者已解析的域名
custom_domains = xxx.xxxx.xxxx

启动命令

./frpc -c frpc.ini
1
后台启动:nohup ./frps -c ./frps.ini &

启动日志

2019/03/23 17:28:21 [I] [service.go:221] login to server success, get run id [3435ffb8820dbcf1], server udp port [0]

2019/03/23 17:28:21 [I] [proxy_manager.go:137] [3435ffb8820dbcf1] proxy added: [web]

2019/03/23 17:28:21 [I] [control.go:144] [web] start proxy success

1
2
3
4
5
6
3.访问内网http服务

custom_domains:vhost_http_port

frp设置开机启动

待整理

 

下载frp

这个不多说,选择好自己的平台就可以了,注意版本号一定要一致,下载地址

打开可以看到 linux 平台有很多版本,386, amd64, arm, arm64 等等,这里说一下,如果你服务器是32位,就下载 386,如果你服务器是64位的,而且你又不能分清cpu是arm架构的还是amd架构的,那也选386

 

总之一句话,对系统架构分不清的就只下载386的就对了

解压下载好的压缩包,可以看到几个文件

1
2
3
4
5
6
7
8
.
├── LICENSE
├── frpc
├── frpc.ini
├── frpc_full.ini
├── frps
├── frps.ini
└── frps_full.ini

各文件说明

  • LICENSE 版权说明文件
  • frpc 客户端启动命令
  • frpc.ini 客户端配置文件
  • frpc_full.ini 客户端配置文件参考文件
  • frps 服务端启动命令
  • frps.ini 服务端配置文件
  • frps_full.ini 服务端配置文件参考文件

frp运行流程

做内网穿透需要事先准备的

  1. 一台外网服务器
  2. 一台内网服务器

一次请求的经过,最简单的流程

用户请求(浏览器) -> 外网服务器ip -> 外网服务器上部署的frps -> 内网服务器上部署的frpc -> 内网服务器上部署的服务

请求成功后,响应过程与请求过程相反

这个过程中还可以加上 nginx 来做不同域名共用80端口的转发工作,那样就会变成

用户请求(浏览器) -> 外网服务器ip -> 外网服务器nginx -> 外网服务器上部署的frps -> 内网服务器上部署的frpc -> 内网服务器nginx -> 内网服务器上部署的服务

好了明白这些了,就可以来做配置了

配置frps

想办法把 frps frps.ini 拷贝到外网服务器上

我这假设放在 /opt/frp/ 下,假设外网服务器ip是 10.10.10.10, 假设网站域名是 example.com

修改 frps.ini

1
2
3
4
5
6
7
8
[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = 123123
token = 123123
vhost_http_port = 8000
subdomain_host = example.com
  • bind_port frps启动时要占用的端口
  • dashboard_port frps启动后管理后台的端口
  • dashboard_user frps启动后管理后台登录的用户名
  • dashboard_pwd frps启动后管理后台登录的密码
  • token frpc连接frps时要用到的令牌,如果不设置任何一个frpc都能连进来就不安全了
  • vhost_http_port frps转发的内网服务的端口
  • subdomain_host 你的域名

然后启动 frps

1
2
3
4
# 给frps附上可执行权限
sudo chmod +x frps
# 在后台运行并将日志写入到当前目录下的 log.file 里
./frps -c frps.ini > log.file 2>&1 &

配置frpc

想办法把 frpc frpc.ini 拷贝到内网服务器上

我这假设放在 /opt/frp/ 下, 假设要配置的网站域名是 example.com bbs.example.com``blog.example.com 三个域名

修改 frps.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[common]
server_addr = 10.10.10.10
server_port = 7000
token = 123123

[example]
type = http
local_ip = localhost
local_port = 8080
use_encryption = false
use_compression = true
custom_domains = example.com

[bbs]
type = http
local_ip = localhost
local_port = 8081
use_encryption = false
use_compression = true
subdomain = bbs

[blog]
type = http
local_ip = localhost
local_port = 8082
use_encryption = false
use_compression = true
subdomain = blog

相关配置说明

  • server_addr 外网服务器的ip,也就是frps所在服务器的ip
  • server_port frps.ini 上配置的 bind_port
  • token 必须跟在 frps.ini 里配置的 token 一致,否则会导致连不上frps
  • use_encryption 是否使用加密,我这没用,因为我在外网通过nginx配置了https所以内网的服务都是http的
  • use_compression 是否使用压缩,使用了网站响应数据会小一些,网站速度也会更快一些
  • subdomain 二级域名的名字

启动 frpc

1
2
3
4
# 给frps附上可执行权限
sudo chmod +x frpc
# 在后台运行并将日志写入到当前目录下的 log.file 里
./frpc -c frpc.ini > log.file 2>&1 &

注意:内网服务器上要启动三个web服务,分别端口对应 8080, 8081, 8082

映射ssh

如果我们不在内网服务器旁边,web服务要是出问题了,会比较麻烦,这时可以通过frp映射一个ssh,这样就可以随时随地的操作内网了

只需要配置frpc.ini 即可

1
2
3
4
5
6
7
8
9
10
11
[common]
...

[ssh]
type = tcp
local_ip = localhost
local_port = 22
remote_port = 7001

[example]
...

同样的方法还可以映射游戏,同样的使用 type = tcp 把端口改成游戏的端口就可以了,比如Minecraft的端口是25565,是不是相当的方便,快跟小伙伴组队吧

重启 frpc , 然后就可以使用命令 ssh -p 7001 root@10.10.10.10 来连接内网的终端了

总结

  1. 你可以通过访问 http://10.10.10.10:7500 然后输入 frps.ini 里配置的 dashboard_user dashboard_pwd 来查看frp的运行情况
  2. 在启动frpc之前,你要在域名提供商那把域名解析到外网服务器上
  3. 如果ssh映射连接总是超时,要看一下外网服务器是否把7001端口开放了,有可能是外网服务器的防火墙拦住了
  4. 关于nginx配置https,参见:https://tomoya92.github.io/2016/08/28/letsencrypt-nginx-https/

参考

  • https://github.com/fatedier/frp/blob/master/README_zh.md

参考

https://www.jianshu.com/p/a6e9627dbe29

https://www.cnblogs.com/zhanggaoxing/p/9221705.html

https://simplove.me/archives/1737
https://www.vmvps.com/how-to-break-lan-barrier-with-frps-and-frpc-using-a-script.html

https://blog.csdn.net/u011976966/article/details/82019688

https://github.com/DXJian/frp/blob/master/README_zh.md

新版下载
本文原创,商业转载请联系作者获得授权,非商业转载请注明出处。

评论

发送评论 编辑评论


                        

待分类分类热门文章

标签热门文章排行

☛免责声明 ☛本站使用教程
Theme Argon With Ry-Plus By 清欢
我的第24132位朋友,历经140584次回眸才与你相遇
内容失效/资源代找/交流学习
内容失效/资源代找/交流学习