0X00 前言

在生活中,如果需要将内网的服务映射到公网,但自身环境又在一个大内网中,没有公网IP时,我们可以通过内网穿透来实现公网IP服务器来代理内网中的服务。
内网穿透的工具有很多,例如 花生壳等,但为了安全和扩展性,我这里使用开源的FRPS来进行穿透。

0X01 搭建FRPS服务端

FRPS的下载地址为:https://github.com/fatedier/frp/releases/tag/v0.37.1
在服务器上下载对应系统版本的软件包,本次用的是Ubuntu,因此通过wget下载软件包,并解压:

wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz
tar -zxvf frp_0.37.1_linux_amd64.tar.gz
mv frp_0.37.1_linux_amd64/ frp/
cd frp/

进入到frp目录中,可以看到有以下文件:
image.png
其中,frpc为客户端文件,我们此时搭建服务端,因此这些文件用不上,可以删除。

 rm -f frpc frpc.ini frpc_full.ini

fprs.ini是服务端的配置文件,我们通过vim编辑器修改配置如下:

bind_port = 9000
dashboard_port = 7500
token = 123456789
dashboard_user = liuxincode
dashboard_pwd = hello
vhost_http_port = 10080
vhost_https_port = 10443

其中,bind_port = 9000 值服务端监听端口为9000dashboard_port = 7500为管理面板端口为7500token = 123456789指客户端在连接到服务端时,需要提供值为123456789token才允许注册。dashboard_user = liuxincodedashboard_pwd = hello指的是在进入管理面板时的账号为liuxincode,密码为hellovhost_http_port = 10080vhost_https_port = 10443分别为代理http和https的端口为1008010443
接下来,我们直接运行frps,并给他指定配置文件为frps.ini

nohup ./frps -c frps.ini >info.log &

此时,FRP服务端已经搭建完毕。

0X02 FRPC的使用

在需要进行穿透的机器上,下载frp客户端( https://github.com/fatedier/frp/releases/tag/v0.37.1 )。
编辑frpc.ini配置文件:

[common]
server_addr = 47.101.205.141
server_port = 9000
token = 123456789

[liuxincode_tomcat]
type = tcp
local_ip = 127.0.0.1
local_port = 8080
remote_port = 18080

[liuxincode_web]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 10080

在上述配置中,common节点下配置我们服务端信息,其中server_addr填写部署了frps服务器的公网IP地址。server_porttoken 填写frps配置中的bind_porttoken
[liuxincode_tomcat][liuxincode_web]是自己定义的两个穿透服务的名称,type填写需要实现穿透的协议类型,local_ip填写内网ip,local_port 填写服务端口,remote_port 填写一个远程服务器未使用的端口。
运行frpc程序,我们可以通过 server_addr + remote_port 来访问 local_ip + local_port的服务。

0X03 使用FRP dashboard面板

浏览器打开我们的server_addr + dashboard_port地址,如:0.0.0.0:7500,在弹出的账号密码输入框中输入服务端配置的dashboard_userdashboard_pwd登录成功后即可进入面板。
image.png