利用开源的 FRP 简单实现一个内网穿透效果
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
frp 的作用
1.利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
2.对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
3.利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
以 Centos 7.6 为例,我们来实现一个简单的内网机器到 公网 IP 的端口映射,使得内网的机器可以在外部进行访问。
需要一台有公网 IP 的映射机器,我们这里用的是一台 阿里云的 centos 7.7
下面进入正文:
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端口要开放 (在阿里云的机器,点击“配置安全组”,在“配置规则”里假如两条安全组规则,)
同时,在 centos 的防火墙里,我们要开放这两个端口设置成对外可访问的。
分别执行这三条命令:
firewall-cmd --zone=public --add-port=6000/tcp --permanent # 开放 6000 端口
firewall-cmd --zone=public --add-port=7000/tcp --permanent # 开放 7000 端口
firewall-cmd --reload # 重载防火墙设置
启动 frpc:
nohup ./frpc -c ./frpc.ini &
上面是吧公网服务器的6000端口映射到内网服务器的22端口,这样就可以随时使用ssh连接内网服务器了。
4. 我们测试下,使用 xshell,利用公网 IP 来登录。 [用户名] : [密码]@X.X.X.X:6000
成功了,我们通过公网 IP 连接到了一台内网的机器!
写在末尾:这次只是简单使用下,几步就成功了。这个工具功能还很强大有待使用挖掘。如果大家跟着这篇教程做了之后还有问题,或无法成功,欢迎下方评论留言,我会及时回复~