用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