frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
frp 的作用
利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
可查看通过代理的所有 http 请求和响应的详细信息。(待开发)
序号 | 主机名 | 服务器IP | 服务器作用 | 部署服务名称 |
---|---|---|---|---|
1 | jump-server-1 | 172.20.254.254 | JumpServer, 可以连通线上线下 | frps 服务端 |
2 | redis-1 | 172.18.254.254 | prod redis instance1 | frpc 客户端 |
3 | nn2 | 172.18.254.253 | prod bdc server2 | frpc 客户端 |
4 | windows-host | 10.3.254.254 | windows client | frpc 客户端 |
实现本地访问prod redis instance1:
redis节点上已安装frp软件:
[root@server1 frp_0.34.1_linux_amd64]# pwd
/opt/software/frp_0.34.1_linux_amd64
[root@server1 frp_0.34.1_linux_amd64]# ll
total 22648
-rwxrwxr-x 1 1000 1000 9908224 Sep 30 15:38 frpc
-rw-rw-r-- 1 1000 1000 7928 Sep 30 15:44 frpc_full.ini
-rw-rw-r-- 1 1000 1000 126 Sep 30 15:44 frpc.ini
-rwxrwxr-x 1 1000 1000 13205504 Sep 30 15:38 frps
-rw-rw-r-- 1 1000 1000 4928 Sep 30 15:44 frps_full.ini
-rw-rw-r-- 1 1000 1000 143 Oct 14 13:10 frps.ini
-rw-rw-r-- 1 1000 1000 11358 Sep 30 15:44 LICENSE
-rw------- 1 root root 29775 Oct 29 08:50 nohup.out
drwxrwxr-x 2 1000 1000 4096 Sep 30 15:44 systemd
步骤1:>服务端操作
JumperServer 端配置:
配置后,执行启动命令:
cd/opt/software/frp_0.34.1_linux_amd64
;
nohup ./frps -c ./frps.ini &
.
说明: 设置frps web侧管理、查看功能, 账户信息配置如下:
[common]
bind_port = 7000
dashboard_addr = 0.0.0.0
dashboard_port = 7001
dashboard_user = admin
dashboard_pwd = dashboard@5431
token = QAZ1235
步骤2:>客户端操作
Redis server instance1 客户端配置:
配置后,执行启动命令:
cd/opt/software/frp_0.34.1_linux_amd64
;
nohup ./frpc -c ./frpc.ini & 或者 nohup ./frpc &
[common] # 配置frps服务器信息
server_addr = jump-server-1
server_port = 7000
token = QAZ1235
[my-redis-7001] # 配置Redis对外暴露的端口、data加密、data压缩信息
type = stcp
sk = abcdefg
local_ip = redis-1
local_port = 7001
use_encryption = true
use_compression = true
步骤3:>Windows客户端操作
Windows客户端主机上已安装frp软件:
user@DESKTOP-CODE123 MINGW64 /d/BIGDATA_DEV/FRP/frp_0.34.1_windows_amd64
$ ll
total 22923
-rwxr-xr-x 1 user 197121 10039808 9月 30 15:41 frpc.exe*
-rw-r--r-- 1 user 197121 335 10月 21 13:51 frpc.ini
-rw-r--r-- 1 user 197121 7928 9月 30 15:44 frpc_full.ini
-rwxr-xr-x 1 user 197121 13379072 9月 30 15:41 frps.exe*
-rw-r--r-- 1 user 197121 26 9月 30 15:44 frps.ini
-rw-r--r-- 1 user 197121 4928 9月 30 15:44 frps_full.ini
-rw-r--r-- 1 user 197121 11358 9月 30 15:44 LICENSE
-rw-r--r-- 1 user 197121 14660 10月 22 14:15 README.docx
drwxr-xr-x 1 user 197121 0 10月 14 14:21 systemd/
Windows client instance1端配置:
[common]
server_addr = jump-server-1
server_port = 7000
token = QAZ1235
[my-redis-7001_visitor]
type = stcp
role = visitor
server_name = my-redis-7001
sk = abcdefg
bind_adrr = 127.0.0.1
bind_port = 6000
配置后,执行启动命令:
cd /d/BIGDATA_DEV/FRP/frp_0.34.1_windows_amd64;
frpc.exe 或 将封装win脚本并加入C:\Users\user>services.msc做成win自启动服务。
步骤4:
使用Redis客户端连接redis:
连上后,测试效果如下:
实现本地访问某台服务器(如:nn2):
步骤1:
[common] # frps服务端认证信息配置
server_addr = jump-server-1
server_port = 7000
token = QAZ1235
[my-sqoop-22]
type = stcp #使用stcp协议
sk = abcdefg
local_ip = nn2 #配置nn2 所在的本地IP
local_port = 22 #配置prod希望访问的PORT
use_encryption = true
use_compression = true
步骤2:
Windows客户端主机上已安装frp软件:
Windows client instance1端配置:
[common]
server_addr = jump-server-1
server_port = 7000
token = QAZ1235
[my-redis-7001_visitor]
type = stcp
role = visitor
server_name = my-redis-7001
sk = abcdefg
bind_adrr = 127.0.0.1
bind_port = 6000
[my-sqoop-22_visitor]
type = stcp
role = visitor
server_name = my-sqoop-22
sk = abcdefg
bind_adrr = 10.3.254.254 #Windows本地IP
bind_port = 6001
配置后,执行启动命令:
cd /d/BIGDATA_DEV/FRP/frp_0.34.1_windows_amd64;
frpc.exe 或 将封装win脚本并加入C:\Users\user>services.msc做成win自启动服务。
步骤3:
Windows客户端主机,安装ssh服务:
Win键-》设置-》应用-》应用和功能-》可选功能-》找到openssh服务器-》安装。
Win键-》设置-》应用-》应用和功能-》可选功能-》找到openssh客户端-》安装。
步骤4:
验证ssh client 是否安装成功:
任意目录下,右键打开“git bash here”(假设已安装Git客户端),输入ssh:
user@DESKTOP-CODQ9G8 MINGW64 /d/BIGDATA_DEV/FRP/frp_0.34.1_windows_amd64
$ ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
[-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
[-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
[-i identity_file] [-J [user@]host[:port]] [-L address]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-Q query_option] [-R address] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] destination [command]
步骤5:
ssh keygen后生成ssh共秘钥信息:
user@DESKTOP-CODQ9G8 MINGW64 ~
$ cd .ssh/
user@DESKTOP-CODQ9G8 MINGW64 ~/.ssh
$ ll
total 7
-rw-r--r-- 1 user 197121 403 10月 22 13:51 authorized_keys
-rw-r--r-- 1 user 197121 1679 10月 21 13:33 id_rsa
-rw-r--r-- 1 user 197121 403 10月 21 13:33 id_rsa.pub
-rw-r--r-- 1 user 197121 379 10月 21 13:35 known_hosts
步骤6:
将win上生成的公钥文件 id_rsa.pub 中的内容,拷贝至 prod bdc server2 上root用户的 authorized_keys文件中。
步骤7:
设置开机自启动:
在/lib/systemd/system 目录下, 新建启动服务文件(frp.service):
[Unit]
Description=Frp Client Start on Reboot.
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/opt/software/frp_0.34.1_linux_amd64/frpc -c /opt/software/frp_0.34.1_linux_amd64/frpc.ini
[Install]
WantedBy=multi-user.target
将该服务设置开机自启动:
[root@nn2 system]# pwd
/lib/systemd/system
[root@nn2 system]# vim frp.service
[root@nn2 system]# ll frp.service
-rw-r--r-- 1 root root 266 Oct 29 11:50 frp.service
[root@nn2 system]# systemctl enable frp.service
Created symlink from /etc/systemd/system/multi-user.target.wants/frp.service to /usr/lib/systemd/system/frp.service.
文件格式为bat, 如可以命名为: start_frp.bat
@echo off
start /d "D:\BIGDATA_DEV\FRP\frp_0.34.1_windows_amd64\" frpc.exe
exit
登录web控制台: http://${dashboard_addr}:${dashboard_port}
弹出的账户弹窗中填入: $dashboard_user $dashboard_pass