Skip to content

搭建内网穿透代理

概述

  在开发阶段,为了方便开发,我们有时需要像以下搭建开发环境。

  正常情况下,上述的开发环境都是能满足工作需求的。但是如果远程办公时,那么这个开发环境就出现问题了。远程办公时,研发人员的个人电脑是通过 VPN 的方式连接,此时服务器就无法将请求转发到研发人员的个人电脑了(VPN 播号时,VPN 会给外部设备分配虚拟 IP,内部网络是不能直接访问这个虚拟 IP 的)。为了解决这个问题,则需要使用内网穿透,此时的开发环境如下图:

  研发人员的个人电脑通过和代理建立了一条 Socket,因此代理就可以将流量转发给员工的个人电脑了。市面上目前可以使用公网的 ngrok 代理服务[链接],也可以自己搭建一个内网穿透代理。这里选用 frp 代理(主要是 ngrok 2.0 之后就闭源了,1.x 已经不维护了,源代码编译都困难)。

运行环境

服务端运行环境

  • CentOS7(x86_64)

客户端运行环境

  • macOS (x86_64)

下载相关包

  下载 frp 程序包。可以在 GitHub 的 Release [链接]中下载到最新版本的客户端和服务端二进制文件。比较重要的是以下这 4 个文件:

frp
├── frpc        // 客户端程序文件
├── frpc.ini    // 客户端配置文件

├── frps        // 服务端程序文件
└── frps.ini    // 服务端配置文件

搭建服务端环境

准备环境

  服务器端在运行程序之前,需要调整一下防火墙的配置,开放一些端口:

bash
# 开启 7000 端口,客户端与服务器连接时使用此端口
$ firewall-cmd --zone=public --add-port=7000/tcp --permanent
# frp 可视化界面的管理端口
$ firewall-cmd --zone=public --add-port=7500/tcp --permanent
# 开启 6500 端口,用于代理客户端的流量
$ firewall-cmd --zone=public --add-port=6500/tcp --permanent
# 重新加载防火墙
$ firewall-cmd --reload

# 如果不想那么麻烦,也可以直接停掉防火墙(生产环境不建议)
$ systemctl stop firewalld
$ systemctl disable firewalld

运行服务

  将 frpsfrps.ini 两个文件复制到服务器端。然后修改 frps.ini 的配置如下:

ini
[common]
# 客户端连接端口
bind_port = 7000
# 启用可视化管理界面
dashboard_port = 7500

  接下来使用以下命令启动服务即可:

bash
$ ./frps -c frps.ini

2022/11/29 22:43:13 [I] [root.go:206] frps uses config file: frps.ini
2022/11/29 22:43:14 [I] [service.go:196] frps tcp listen on 0.0.0.0:7000
2022/11/29 22:43:14 [I] [service.go:297] Dashboard listen on 0.0.0.0:7500
2022/11/29 22:43:14 [I] [root.go:215] frps started successfully

搭建客户端环境

启动客户端

  修改 frpc.ini 文件如下:

ini
[common]
# 将此值修改为 frps 所运行的服务器
server_addr = 10.10.20.20
# 将值值修改为 frps 监听的连接口端(默认不需要改动)
server_port = 7000

# 添加新的连接,这个 nacos 随便取名,因此可以取一个你觉得好记的名称即可
[nacos]
# 需要代理的协议
type = tcp
# 本地 IP
local_ip = 127.0.0.1
# 需要代理的本地端口
local_port = 8848
# 告诉服务端,将 6500 端口的流量转发到本地的 8848 端口
remote_port = 6500

  使用以下命令启动客户端即可:

bash
$ ./frpc -c frpc.ini

2022/11/29 22:48:21 [I] [service.go:357] [8bcb833a4e96ae41] login to server success, get run id [8bcb833a4e96ae41], server udp port [0]
2022/11/29 22:48:21 [I] [proxy_manager.go:142] [8bcb833a4e96ae41] proxy added: [nacos]
2022/11/29 22:48:21 [I] [control.go:177] [8bcb833a4e96ae41] [nacos] start proxy success

访问服务

  完成以上步骤之后,客户端和服务器端就建立好一条 socket 了。此时,你只需要在浏览器访问服务器端的 6500 端口,就会发现流量已经转发到本地的 8848 端口上。

  完整的流程图如下:


Released under the MIT license.