使用frp穿透内网

1.前因后果

1.1弃用ngrok

为节约服务器成本,花了500多块买了一个华为云得1G 1核心 5M得云服务器.然后用ngrok来穿透内网.一直用得还  但是今天在弄nginx得时候发现 ngrok没有带客户请求的真实IP带过来.

看了以下ngrok的源码库,发现2.0以后的版本才支持. 但是2.0已经商用了.github上只有1.0的源码,并且没有维护了

ngrok1 源码地址 https://github.com/inconshreveable/ngrok

1.2选择frp

github地址:https://github.com/fatedier/frp

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。(摘自项目主页)

2.开始在服务端安装frp

2.1下载源码安装

cd /usr/local/src

wget https://github.com/fatedier/frp/releases/download/v0.25.3/frp_0.25.3_linux_amd64.tar.gz

tar -zxvf frp_0.25.3_linux_amd64.tar.gz

mv frp_0.25.3_linux_amd64 /usr/local/frp

2.2 目录简单的说明

目录中frps 开始的是服务端用的  frpc是客户端用的。  在服务器端口可以删除frpc开头的目录和文件.不删也可以

2.3编辑服务器端的配置文件

frps_full.info是开发团队提供的一个比较完整的配置示例.(当然也不是全部,最全的是项目文档.有中文文档)

我们这里编辑编辑 frps.ini 就可以了

[common]
bind_port = 7000
vhost_http_port = 80

配置很简单吧,来简单说明以下

bind_port:是frp监听客户端请求的端口(服务器和客户端需要通过TCP建立一个连接),需要注意  要在云主机上打开这个端口。否则...  客户端肯定连不上啊
vhost_http_port:是http的请求端口,这里使用80端口.否则用户在访问的时候需要加端口. 不加这个参数.客户端也无法使用http服务

2.4测试启动一下

在frp目录下执行命令: ./frps -c ./frps.ini 来启动服务, -c 是指定配置文件路径

如果看到以下输出,标识服务器已经开始监听.客户端可以开始连接了

[root@ecs-fa43 frp]# ./frps -c ./frps.ini
2019/04/06 17:52:50 [I] [service.go:136] frps tcp listen on 0.0.0.0:7000
2019/04/06 17:52:50 [I] [service.go:178] http service listen on 0.0.0.0:80
2019/04/06 17:52:50 [I] [root.go:204] Start frps success

2.5 添加开机自启动

在2.4中可以在shell中启动服务了,但是如果shell窗口关闭了,服务也就停止了

我们编辑/etc/rc.local  添加如下配置(具体视你的安装路径和配置文件路径而定)

/usr/local/frp/frps -c /usr/local/frp/frps.ini

重启一下服务器,看看7000已经被frp监听了

3.配置客户端

frp 采用go语言编写,但是跨平台的.

我这里内网机器是windows,所以下载windows客户端

3.1 下载windows客户端

下载地址:https://github.com/fatedier/frp/releases   注意版本最好和服务器用的版本一样.

3.2解压并根据业务需要编辑配置文件

按照服务器端的安装套路,frps开头的可以删掉   然后我们还是编辑frpc.ini文件

这里给出一个配置文件示例, 更多的配置可以参考项目文档

[common]
server_addr = 这里是你云服务器的地址
server_port = 7000

#ssh端口
[ssh50128]
type = tcp
local_ip = 192.168.161.128
local_port = 22
remote_port = 50128

[ssh50129]
type = tcp
local_ip = 192.168.161.129
local_port = 22
remote_port = 50129

[ssh50200]
type = tcp
local_ip = 192.168.161.200
local_port = 22
remote_port = 50200

[ssh50201]
type = tcp
local_ip = 192.168.161.201
local_port = 22
remote_port = 50201

[ssh50202]
type = tcp
local_ip = 192.168.161.202
local_port = 22
remote_port = 50202

[ssh50220]
type = tcp
local_ip = 192.168.161.220
local_port = 22
remote_port = 50220

[ssh50221]
type = tcp
local_ip = 192.168.161.221
local_port = 22
remote_port = 50221

[ssh50222]
type = tcp
local_ip = 192.168.161.222
local_port = 22
remote_port = 50222



#rabbitmq tcp端口
[tcprabbitmq]
type = tcp
local_ip = 192.168.161.129
local_port = 5672
remote_port = 5672
custom_domains = tcp.domain.site





#web 站点
[webmqweb]
type = http
local_ip = 192.168.161.129
local_port = 15672
use_encryption = false
use_compression = false
custom_domains = a.domain.site

3.3使用nssm 把客户端安装为windows服务

ps:对于不提供windows服务运行的程序都可以这么玩  比如kibana 你也可以这么玩

nssm下载地址:   http://www.nssm.cc/download

 .\nssm.exe install frp

最后具体业务,查看是否能正常运行

4.开发团体提供的项目文档

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

实际上frp,不仅仅提供内网穿透.还支持认证  反向代理等。 具体可以看文档

猜你喜欢

转载自www.cnblogs.com/gytangyao/p/10662439.html