用frp做内网穿透服务

在做网络开发的时候往往需要调试一些接口,特别是产品还没有上线的情况下要调试支付接口(支付接口需要回调公网地址)这个时候就需要使用内网穿透服务,将开发计算机上的测试接口暴露给公网测试

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

FRP分为服务端与客户端,一个服务端可以对应多个客户端,笔者首先需要在服务器中下载并安装FRP

文件选择

frp是开源的一个内网穿透软件,github源码以及文档地址如下

https://github.com/fatedier/frp 在文档当中可以看到编译好的二进制文件,URL地址如下:

https://github.com/fatedier/frp/releases

在下载地址当中有多个版本,笔者需要选择自己所对应系统的版本,笔者服务器使用的是64位的Centos系统,客户端使用的是mac系统,因此需要下载frp0.26.0linuxamd64.tar.gz和frp0.26.0darwinamd64.tar.gz两个压缩包,如下图所示

下载与解压

现在需要在服务器中下载对应版本,首先通过ssh登录服务器,参考命令如下

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

下载之后,需要解压刚才下载的压缩文件,参考命令如下

tar -zxvf frp_0.26.0_linux_amd64.tar.gz

命令返回结果如下

frp_0.26.0_linux_amd64/
frp_0.26.0_linux_amd64/frps_full.ini
frp_0.26.0_linux_amd64/frps.ini
frp_0.26.0_linux_amd64/frpc
frp_0.26.0_linux_amd64/frpc_full.ini
frp_0.26.0_linux_amd64/frps
frp_0.26.0_linux_amd64/LICENSE
frp_0.26.0_linux_amd64/frpc.ini

解压之后我重命名一下文件夹

rm frp_0.26.0_linux_amd64 frp

cd frp && ll 返回结果如下

-rw-rw-r-- 1 root root  12K Aug 12 12:38 LICENSE
-rwxrwxr-x 1 root root 7.2M Aug 12 12:34 frpc
-rw-rw-r-- 1 root root  126 Aug 12 12:38 frpc.ini
-rw-rw-r-- 1 root root 5.6K Aug 12 12:38 frpc_full.ini
-rwxrwxr-x 1 root root 8.6M Aug 12 12:34 frps
-rw-rw-r-- 1 root root   26 Aug 12 12:38 frps.ini
-rw-rw-r-- 1 root root 2.4K Aug 12 12:38 frps_full.ini

配置systemctl来控制,服务端运行

vim打开文件 vim /usr/lib/systemd/system/frp.service写入以下内容,注意上文的路径和此处有关。这里是启动的服务端。

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/root/frp/frps -c /root/frp/frps.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit

[Install]
WantedBy=multi-user.target

重新加载服务的配置文件 systemctl daemon-reload现在就可以用 systemctl 套装来控制 frp 了。

启动/停止/重启,查看状态,设置开机自启/关闭开机自启

systemctl start frp
systemctl stop frp
systemctl restart frp
systemctl status frp
systemctl enable frp
systemctl disable frp


修改配置

在返回结果当中可以看到有多个文件,不过实际上只需要关心frps和frps.ini就可以了

查看配置文件参考命令如下

cat frps.ini

返回结果如下

[common]
bind_port = 7000

在返回结果当中可以看到端口为7000,这个端口便是FRP与客户端通信的端口,因为笔者需要搭建Web服务,所以需要在配置文件当中加入http服务的监听端口,参考命令如下

vim frps.ini

修改配置文件,修改后的配置文件内容如下

[common]
bind_port = 7000
vhost_http_port = 8080

服务启动

修改完成之后,便可启动FRPS服务,参考命令如下

./frps -c frps.ini

返回结果

2018/08/29 23:43:30 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2018/08/29 23:43:30 [I] [service.go:172] http service listen on 0.0.0.0:8080
2018/08/29 23:43:30 [I] [root.go:207] Start frps success

配置客户端

在配置服务端完成之后,笔者还需要在内网中配置客户端,这个客户端也就是Web服务器,具体操作如下

下载与解压

搭建FRP客户端,首先需要在客户端下载FRP压缩文件;笔者mac系统所下载文件及对应的参考命令如下

wget https://github.com/fatedier/frp/releases/download/v0.26.0/frp0.26.0darwin_amd64.tar.gz 下载之后同样需要解压文件,参考命令如下

tar -zxvf frp_0.26.0_darwin_amd64.tar.gz

配置客户端服务

客户端所需注意的文件有两个,分别是frpc和frpc.ini,先来查看配置文件默认内容是什么,参考命令如下

cat frpc.ini

返回结果如下

[common]
server_addr = 127.0.0.1
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

在默认的客户端配置文件当中,配置了一个TCP映射,不过笔者需要搭建Web服务,因此还需要添加一个HTTP映射,并修改对应的服务端IP地址,参考命令如下

vim  fprc.ini

编辑后的结果如下所示

[common]
server_addr = 你的公网服务器地址
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 5000

[web]
type = http
local_port = 8000
custom_domains = test.rizhaodarkmatter.net

启动服务

修改客户端的配置文件完成之后,笔者需要让客户端的FRP来连接服务端的FRP服务,参考命令如下

sudo ./frpc -c frpc.ini

执行命令后返回结果如下所示

2018/08/30 09:50:07 [I] [proxy_manager.go:300] proxy removed: []
2018/08/30 09:50:07 [I] [proxy_manager.go:310] proxy added: [ssh web]
2018/08/30 09:50:07 [I] [proxy_manager.go:333] visitor removed: []
2018/08/30 09:50:07 [I] [proxy_manager.go:342] visitor added: []
2018/08/30 09:50:07 [I] [control.go:246] [55b8b354889e6f44] login to server success, get run id [55b8b354889e6f44], server udp port [0]
2018/08/30 09:50:07 [I] [control.go:169] [55b8b354889e6f44] [ssh] start proxy success
2018/08/30 09:50:07 [I] [control.go:169] [55b8b354889e6f44] [web] start proxy success

在返回结果当中,可以看到ssh服务代理成功,web服务也代理成功,说明配置无误

解析域名到服务器

然后解析test.rizhaodarkmatter.com到你的服务器IP即可

测试服务

打开test.rizhaodarkmatter.com:8080即可访问你的内网服务了

使用systemctl来控制启动

sudo vim /lib/systemd/system/frps.service 

在frps.service里写入以下内容

[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/your/path/frps -c /your/path/frps.ini

[Install]
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

文档信息

版权声明:可自由转载(请注明转载出处)-非商用-非衍生

发表时间:2019年4月19日 10:48