FRP内网穿透
一、环境:
内网服务器 Centos
外网服务器 Centos
模拟场景:使用虚拟机安装Centos系统模拟内网服务器,外网服务器是正常使用云服务器
适用于:Company内部有自己的机房,部署相关服务,但是只能在内网中使用。当出现新的需求,需要通过外网访问内网中的服务的时候,可以通过内网穿透,通过内网指定的端口与外网IP端口转换,达到通过外网IP直接访问内网服务的效果。
二、需求:
通过外网服务器的公网IP访问内网服务器
通过外网服务器的端口访问内网服务器的端口服务
三、内网穿透:
内网服务器有自己的内部IP,但是通过外网无法访问,所以就需要内网穿透,将外网IP转换为内部合法的IP来进行合法访问
四、内网穿透过程:
1.在公网IP的服务器上配置运行frp的服务器程序frps
2.在内网IP的服务器上配置运行frp的客户端程序frpc
3.用户通过公网服务器通过内网穿透来访问内网服务器
五、部署
1. 下载
查看Linux系统体系结构,并选择对应的frp版本
# 1.1 初次在不知情情况下,下载了arm安装包frp_0.42.0_linux_arm64.tar.gz# 1.2 因为安装包与linux系统体系不符合,所以导致报错无法执行二进制文件[root@zxy_master frp]# ./frpsfrps: frps: cannot execute binary file# 2.1 再次根据查找资料,找到与linux系统匹配的安装包frp_0.42.0_linux_amd64.tar.gz# 2.2 执行测试成功[root@zxy_master frp]# ./frps/05/22 23:00:53 [I] [root.go:202] frps uses command line arguments for config/05/22 23:00:53 [I] [service.go:194] frps tcp listen on 0.0.0.0:7000/05/22 23:00:53 [I] [root.go:209] frps started successfully
下载方式一
wget /fatedier/frp/releases/download/v0.38.0/frp_0.42.0_linux_amd64.tar.gz
下载方式二
方式三:可以通过博客资源下载
2.服务端
2.1 安装
# frp安装包上传到software下,解压到/zxy/apps/下[root@zxy_master software]# tar -zxvf frp_0.42.0_linux_amd64.tar.gz -C /zxy/apps/# 修改名称[root@zxy_master apps]# mv frp_0.42.0_linux_amd64/ frp# frpc frpc_full.ini frpc.ini 属于客户端应用# frps frps_full.ini frps.ini 属于服务端应用[root@zxy_master frp]# lsfrpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE systemd
2.2 修改配置文件
[root@zxy_master frp]# vim frps.ini[common]bind_port = 7000dashboard_port = 7500dashboard_user = admindashboard_pwd = admintoken = frpstcp_mux = truelog_file = /zxy/apps/frp/logs/frps.loglog_level = infolog_max_days = 3authentication_timeout = 0privilege_mode = true
2.3 开放端口
关闭防火墙在云服务器管理平台,开放7000,7500端口
2.4 启动服务端
# 启动服务端frps,并将日志输出到logs下以server和时间开头的日志文件中[root@zxy_master frp]# nohup ./frps -c ./frps.ini > ./logs/server`date +%Y-%m-%d`.log 2>&1 &# 查看启动进程[root@zxy_master frp]# ps -ef | grep frproot22460 19596 0 23:15 pts/0 00:00:00 ./frps -c ./frps.iniroot24755 19596 0 23:19 pts/0 00:00:00 grep --color=auto frp
内网穿透管理平台[IP:7500]
3.客户端
3.1 安装
# frp安装包上传到software下,解压到/opt/apps/下[root@hadoop software]# tar -zxvf frp_0.42.0_linux_amd64.tar.gz -C /opt/apps/# 修改名称[root@hadoop apps]# mv frp_0.42.0_linux_amd64/ frp# frpc frpc_full.ini frpc.ini 属于客户端应用# frps frps_full.ini frps.ini 属于服务端应用[root@hadoop frp]# lsfrpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE systemd
3.2 修改配置文件
[root@hadoop frp]# vim frpc.ini[common]server_addr = [外网IP]server_port = 7000token = frpstcp_mux = truelog_file = /opt/apps/frp/logs/frpc.loglog_level = infolog_max_days = 3authentication_timeout = 0[ssh]type = tcplocal_ip = 192.168.130.100local_port = 22remote_port = 7001
3.3 关闭防火墙
服务端需要开启7001端口
[root@hadoop frp]# systemctl status firewalld● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)
3.4 开启客户端
## 后台启动[root@hadoop frp]# nohup ./frpc -c frpc.ini > ./logs/client`date +%Y-%m-%d`.log 2>&1 &[1] 26756## 查看进程[root@hadoop frp]# ps -ef | grep frproot26756 1789 0 23:34 pts/0 00:00:00 ./frpc -c frpc.iniroot26815 1789 0 23:34 pts/0 00:00:00 grep --color=auto frp[root@hadoop frp]#
六、ssh服务穿透-ssh测试
frp服务端:外网IP地址
frp客户端:内网IP地址
frp服务端和frp客户端的交换端口是7000
使用frp服务端的7001端口来 交换 frp客户端的22端口
测试连接
测试连接成功
七、添加其余服务穿透-MySQL
1.客户端修改frpc.ini
[root@hadoop frp]# vim frpc.ini## frpc.ini添加以下内容[mysql]type = tcplocal_ip = 192.168.130.100local_port = 3306remote_port = 7002
2.测试外网IP端口Port连接MySQL
八、内网穿透管理平台[外网IP:7500]
1.Overview
这里可以从Proxy Counts看到,目前内网穿透服务有两项
2.Proxies
Proxies下分为了多种代理类型,我们目前使用到的服务中有ssh和mysql都是使用了TCP模式
九、如果需要一台外网服务器穿透多台服务器
将第一台内网服务器的frp文件夹打包,并发送到其他内网服务器中
在第二台内网服务器中解压frp文件,并修改frpc.ini配置文件即可
1.部署
# 内网服务器一[root@hadoop apps]# tar -cvf frp.tar ./frp/[root@hadoop apps]# scp frp.tar root@192.168.130.101:/opt/apps/# 内网服务器二[root@hadoop apps]# tar -xf frp.tar
2.修改frpc.ini文件
第一:[common]部分不需要变
第二:在内网服务器一中,我们穿透了ssh服务和mysql服务,在内网服务器二中如果再次穿透这两个服务,命名需要修改否则会报如下错误:
/05/23 15:54:48 [W] [control.go:179] [80ed2e1283ba3e9b] [ssh] start error: proxy name [ssh] is already in use
/05/23 15:54:48 [W] [control.go:179] [80ed2e1283ba3e9b] [mysql] start error: proxy name [mysql] is already in use
[common]server_addr = [外网IP]server_port = 7000token = frpstcp_mux = truelog_file = /opt/apps/frp/logs/frpc.loglog_level = infolog_max_days = 3authentication_timeout = 0[ssh2]type = tcplocal_ip = 192.168.130.101local_port = 22remote_port = 7003[mysql2]type = tcplocal_ip = 192.168.130.101local_port = 3306remote_port = 7004
3.防火墙
指定端口开放防火墙方法
内网服务器二开放22和3306端口,或者关闭防火墙外网服务器则需要开放7003和7004端口
4.启动
[root@hadoop frp]# nohup ./frpc -c frpc.ini > ./logs/client`date +%Y-%m-%d`.log 2>&1 &[root@hadoop frp]# ps -ef | grep frproot 62901 0 15:59 pts/0 00:00:00 ./frpc -c frpc.iniroot10372 1983 0 16:10 pts/0 00:00:00 grep --color=auto frp
5.通过外网服务器[IP:7500]查看内网穿透管理平台
这时可以观察到内网服务器二的ssh服务[ssh2]和MySQL服务[mysql2]已经穿透成功