frp内网穿透
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
而且,你只需要配置一台有公网IP的服务器,便能通过该服务器的众多端口将多台内网机子、多个服务暴露到公网中,十分方便。
frp也提供了一个用于查看的管理面板,但只能说聊胜于无,远没有 nps 的面板功能强大。
原理
frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。
用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
下载
目前可以在 Github 的 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中
部署
解压缩下载的压缩包,将其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。
使用
编写配置文件,先通过 ./frps -c ./frps.ini 启动服务端,再通过 ./frpc -c ./frpc.ini 启动客户端。如果需要在后台长期运行,建议结合其他工具使用,例如 systemd 和 supervisior。
配置文件
参考,下面使用的所有端口都必须在公网服务上开启:5443、6443、5000、5001
注意:客户端的 token 值要与服务端保持一致,其次所有映射的远程端口都需要在防火墙放行。
还有,连接同一服务的时客户端的应用名不能重复,比如已经有一个机器使用了[ssh]
这个应用名,那么其他机器就不能使用这个应用名了,但是能使用[ss1]
(只要该名称没被使用)
# 服务端配置:ssh 客户端用户@服务器IP -p 客户端映射ssh端口
[common]
# 服务器IP地址
server_addr = xxx.xxx.xxx.xxx
# 服务器绑定端口,防火墙需开放
bind_port = 5443
# 仪表盘端口
dashboard_port = 6443
# 仪表盘用户名和密码
dashboard_user = admin
dashboard_pwd = 123456
# 连接密钥
token = xxxxxxxx
# http端口
vhost_http_port = 8000
# 客户端配置,common配置需要与服务器对应
[common]
# 服务器IP
server_addr = xxx.xxx.xxx.xxx
# 服务器绑定端口
server_port = 5443
# 连接密钥
token = xxxxxxxxx
[ssh]
# 连接协议
type = tcp
# 本机地址(不必修改)
local_ip = 127.0.0.1
# 本机ssh端口
local_port = 22
# 远端映射ssh端口,远端本地就通过这个端口地址访问本机
remote_port = 5000
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 5002
远程连接
像上面给出的配置信息,我们就能通过服务器端的 5000 端口访问部署了对应客户端的内部机器的22端口,通过服务器端的 5002 端口,访问内部机器的 3306 端口,下面给出对应的连接命令。
# 连接ssh
ssh [email protected] -p 5000
# 连接数据库,数据库需要事先设置允许远端登录
mysql -u root -P 5002 -h xxx.xxx.xxx.xxx -p