简单介绍frp
frp 是一种快速反向代理,允许您将位于 NAT 或防火墙后面的本地服务器暴露给 Internet。
它目前支持TCP和UDP,以及HTTP和HTTPS协议,可以通过域名将请求转发到内部服务。
准备服务器
- 1台有公网IP的服务器 A(公网IP: 120.1.2.3)作为frp服务端。
- 1台内网服务器 B(内网IP: 10.2.2.166),该服务器需要暴露给外网。
公网服务器A
- 登录服务器A,拷贝 frp_0.47.0_linux_arm64.tar.gz 到某个目录,比如 /home/data
- 解压 tar -zxvf frp_0.47.0_linux_arm64.tar.gz
- 进入 frp_0.47.0_linux_arm64,配置 frps.ini,指定bind_port,该端口为frp客户端用来连接frp服务端来注册。
# frps.ini
[common]
bind_port = 7000
- 把frps服务加入supervisor管理,执行 supervisorctl update
[program:frps]
command=/home/data/frp_0.47.0_linux_amd64/frps -c /home/data/frp_0.47.0_linux_amd64/frps.ini
autostart=true
autorestart=true
priority=10
user=root
redirect_stderr=true
stopasgroup=true
killasgroup=true
startretries=999999
stdout_logfile=/var/log/%(program_name)s.std
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=50
- 启动frps服务端 /supervisorctl start frps
2023/04/11 09:56:43 [I] [root.go:206] frps uses config file: frps.ini
2023/04/11 09:56:44 [I] [service.go:200] frps tcp listen on 0.0.0.0:7000
2023/04/11 09:56:44 [I] [root.go:215] frps started successfully
内网服务器B
- 登录服务器B,拷贝 frp_0.47.0_linux_arm64.tar.gz 到某个目录,比如 /home/data
- 解压 tar -zxvf frp_0.47.0_linux_arm64.tar.gz
- 进入 frp_0.47.0_linux_arm64,配置 frpc.ini,指定server_addr为A的公网地址,指定server_port为frps.ini的bind_port,
[ssh]改为[ssh6000],当存在多个客户端时,需要使用不同的ssh名字。指定服务器B的SSH端口local_port,remote_port为从公网ssh服务器B时需
要的端口。
# frpc.ini
[common]
server_addr = 120.1.2.3
server_port = 7000
[ssh6000] # [ssh]改为[ssh6000],当存在多个客户端时,需要使用不同的ssh名字。
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
- 把frpc客户端服务加入supervisor管理,执行 supervisorctl update
[program:frpc]
command=/home/data/frp_0.47.0_linux_amd64/frpc -c /home/data/frp_0.47.0_linux_amd64/frpc.ini
autostart=true
autorestart=true
priority=10
user=root
redirect_stderr=true
stopasgroup=true
killasgroup=true
startretries=999999
stdout_logfile=/var/log/%(program_name)s.std
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=50
- 启动frpc客户端 supervisorctl start frpc
2023/04/11 09:57:08 [I] [service.go:299] [52d830bcea80a311] login to server success, get run id [52d830bcea80a311], server udp port [0]
2023/04/11 09:57:08 [I] [proxy_manager.go:142] [52d830bcea80a311] proxy added: [ssh]
2023/04/11 09:57:08 [I] [control.go:172] [52d830bcea80a311] [ssh6000] start proxy success
frp客户端连接不上?
- 若使用的是云服务器,需在安全组里放开 bind_port 和 remote_port。此例子中分别为 7000 和 6000。
测试SSH,通过公网访问内部服务器B
ssh -p remote_port 服务器B用户名@服务器A公网IP
。比如服务器B有个用户为test,此处为ssh -p 6000 test@120.1.2.3
, 输入test对应
的密码即可访问内网服务器B。