You need to enable JavaScript to run this app.
导航

使用frp进行反向代理

最近更新时间2024.01.02 11:35:01

首次发布时间2023.07.18 20:39:30

本文将介绍使用 frp 实现反向代理。

前言

本文档介绍如何使用frp进行反向代理,实现了边缘实例通过ssh登录到中心内网实例,以及通过边缘实例来转发HTTP请求到中心实例。

关于实验
  • 预计部署时间:60分钟
  • 级别:中级
  • 相关产品:ECS
  • 受众: 通用
实验说明

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp github 地址:https://github.com/fatedier/frp

前置条件
  • 在北京region创建 Centos 7.9 实例,实例通过NAT可以访问公网,并在实例内部部署http服务。
  • 在边缘创建边 Centos 7.9边缘实例,边缘实例绑定公网IP地址。
操作步骤

暂定边缘实例为A,中心云实例为B。

步骤一:下载并安装frp软件

本文以v0.49.0版本为例,下一步骤都需要在实例A和B上面执行。

  1. 下载安装包
wget https://github.com/fatedier/frp/releases/download/v0.49.0/frp_0.49.0_linux_amd64.tar.gz

如果下载其他版本可以在github上面来下载:https://github.com/fatedier/frp
2. 解压安装包

tar -zxvf frp_0.49.0_linux_amd64.tar.gz 

步骤二:配置frp服务

配置A实例

  1. 进入到解压完成的目录,示例如下
cd frp_0.49.0_linux_amd64
  1. 编辑frps.ini 文件
vi frps.ini
  1. 将下列配置粘贴到配置文件中,并报错退出
[common]
bind_port = 7000
dashboard_port = 7500
token = LdBlojOZkSjHMuo8!
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 8080
  • bind_port表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
  • dashboard_port是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500。
  • token是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。
  • dashboard_userdashboard_pwd表示打开仪表板页面登录的用户名和密码,自行设置即可。
  • vhost_http_port用于反向代理HTTP主机时使用。
    若有其他配置可以参考文档:https://github.com/fatedier/frp/blob/dev/conf/frps_full.ini
  1. 配置systemd管理frp服务,执行命令 vim /etc/systemd/system/frps.service,将下列内容粘贴到frps.service文件中。
[Unit]
Description = frps
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
## 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /root/frp_0.49.0_linux_amd64/frps -c /root/frp_0.49.0_linux_amd64/frps.ini
[Install]
WantedBy = multi-user.target

使用 systemd 命令,启动frps 。

systemctl start frps

配置B实例

  1. 进入到解压完成的目录,示例如下
cd frp_0.49.0_linux_amd64
  1. 编辑frpc.ini 文件
vi frpc.ini
  1. 将下列配置粘贴到配置文件中,并报错退出
[common]
server_addr = x.x.x.x  #服务器A的公网地址
server_port = 7000
token = LdBlojOZkSjHMuo8!

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[web]
type = http
local_port = 80
custom_domains = www.test.com
  • server_addr为A实例的公网IP地址,填入即可。
  • server_port为服务器端口,填入你设置的端口号即可,如果未改变就是7000 。
  • token是你在服务器上设置的连接口令,原样填入即可。
  • local_iplocal_port 配置为本地需要暴露到公网的服务地址和端口。
  • remote_port 表示在 A 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口。
  • 绑定自定义域名为 custom_domains。

若有其他配置可以参考文档:
https://github.com/fatedier/frp/blob/dev/conf/frpc_full.ini

  1. 配置systemd管理frp服务,执行命令 vim /etc/systemd/system/frpc.service,将下列内容粘贴到frps.service文件中。
[Unit]
Description = frpc
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
## 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /root/frp_0.49.0_linux_amd64/frpc -c /root/frp_0.49.0_linux_amd64/frpc.ini
[Install]
WantedBy = multi-user.target

使用 systemd 命令,启动frpc。

systemctl start frpc
验证结果

ssh验证

在A机器,执行以下命令,会跳转到B机器上面

ssh -p 6000 user@x.x.x.x #这里边缘实例的内网地址和公网地址都可以访问。

Web访问

在个人PC中配置A机器的IP地址映射www.test.com,访问www.test.com是否能访问成功。