frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。

项目地址:fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet. (github.com)

1.frp 的作用

1.利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。

2.对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。

3.利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。

以 Centos 7.6 为例,我们来实现一个简单的内网机器到 公网 IP 的端口映射,使得内网的机器可以在外部进行访问。

需要一台有公网 IP 的映射机器,我们这里用的是一台 阿里云的 centos 7.7

2.下面进入正文:
1.下载编译好的 release 版本 frp 文件。

根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。

将 frps 及 frps.ini 放到具有公网 IP 的机器上。

将 frpc 及 frpc.ini 放到处于内网环境的机器上。

centos64位下载amd64,写这篇文章的时候,最新版本是0.29。所以执行:

wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz

解压:tar -xvf frp_0.29.0_linux_amd64.tar.gz

cd frp_0.29.0_linux_amd64

2.配置 Server 端(用来代理的 那台 阿里云公网 IP 服务器)

修改 frps.ini 文件,这里使用了最简化的配置:

frps.ini

[common]
bind_port = 7000
注意:7000端口要开放,(下方有详细解释怎么开放系统端口)

启动 frps:

nohup ./frps -c ./frps.ini &
3.配置 Client 端(我们的内网服务器)

修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x;

这里是指将内网的22端口映射到公网的6000端口上

frpc.ini

[common]

server_addr = x.x.x.x

server_port = 7000

[ssh]

type = tcp

local_ip = 127.0.0.1

local_port = 22

remote_port = 6000

注意:公网服务器6000、7000端口要开放 (在阿里云的机器,点击“配置安全组”,在“配置规则”里假如两条安全组规则,)

image.png

同时,在 centos 的防火墙里,我们要开放这两个端口设置成对外可访问的。

分别执行这三条命令:

firewall-cmd --zone=public --add-port=6000/tcp --permanent # 开放 6000 端口

firewall-cmd --zone=public --add-port=7000/tcp --permanent # 开放 7000 端口

firewall-cmd --reload # 重载防火墙设置

4.启动 frpc:

nohup ./frpc -c ./frpc.ini &

上面是吧公网服务器的6000端口映射到内网服务器的22端口,这样就可以随时使用ssh连接内网服务器了。

5.我们测试下,使用 xshell,利用公网 IP 来登录。 [用户名] : [密码]@X.X.X.X:6000

image.png

成功了,我们通过公网 IP 连接到了一台内网的机器!

写在末尾:这次只是简单使用下,几步就成功了。这个工具功能还很强大有待使用挖掘。如果大家跟着这篇教程做了之后还有问题,或无法成功,欢迎下方评论留言,我会及时回复~