阿里云服务器配置FRP穿透内网的利器,轻松实现反向代理

在网络世界中,我们经常会遇到这样的需求:希望能够从外部网络访问到位于内网的服务器或服务。比如,在家里的电脑上搭建了一个网站,想让朋友从外面访问;或者,在公司内部部署了一个服务,需要让出差的同事也能使用。这时候,反向代理就显得尤为重要。

传统的反向代理通常需要配置端口映射和动态 DNS,步骤繁琐,而且稳定性也难以保证。今天,我们要介绍一款强大的工具:FRP (Fast Reverse Proxy),它可以帮助我们轻松实现内网穿透,进行反向代理,而且配置简单,功能强大。

我的场景 是在公司有一台深度学习服务器,回家后我也想用,那么就要做一个反向代码理才可以。看了几个博客,都是全而多,看完反正是乱,所以记录一下自己是如何实现的,加上更多的截图,方便理解的定位。

1 什么是 FRP

FRP 是一个高性能的反向代理应用,专注于内网穿透。它由 Go 语言开发,具有跨平台、易部署、低资源消耗等优点。FRP 的核心思想是在公网服务器上运行一个 FRP 服务端(frps),然后在内网服务器上运行一个 FRP 客户端(frpc),通过服务端进行数据转发,从而实现从外部网络访问内网服务。

2 FRP 的工作原理

FRP 的工作原理可以简单概括为:

  1. 客户端(frpc)连接服务端(frps): 内网的 frpc 客户端主动连接到公网的 frps 服务端,建立持久连接。
  2. 请求转发: 当外部用户访问 frps 服务端时,frps 会将请求转发到对应的 frpc 客户端。
  3. 客户端处理请求: frpc 客户端接收到请求后,会将其转发到内网对应的服务。
  4. 返回响应: 内网服务处理完请求后,将响应返回给 frpc,frpc 再通过 frps 将响应返回给外部用户。

3 FRP 的优势

  • 简单易用: 配置简单,只需编写简单的配置文件即可实现反向代理。
  • 跨平台支持: FRP 支持 Windows、Linux、macOS 等多种操作系统。
  • 高性能: 基于 Go 语言开发,具有高性能和低延迟的特点。
  • 多种协议支持: 支持 TCP、UDP、HTTP、HTTPS 等多种协议。 这个是有用的,你可以ssh 或者自己的网页,用不同协意,要以给代理出来
  • 多路复用: 支持多个客户端连接到同一个服务端,实现多个内网服务暴露。
  • 安全性: 支持 TLS 加密,保证数据传输的安全性。

4 实现步骤

下面以一个简单的 HTTP 反向代理为例,介绍如何使用 FRP。

4.1 准备工作

  • 公网服务器: 拥有一台具有公网 IP 的服务器,用于运行 frps 服务端。在这里插入图片描述

我是去阿里云买了一个,99一年,

  • 内网服务器: 拥有一台运行内网服务的服务器,用于运行 frpc 客户端。
    这个就是公司的电脑。
  • FRP 程序: 分别在公网服务器和内网服务器下载对应版本的 FRP 程序。你可以从 FRP 的 GitHub 仓库下载:https://github.com/fatedier/frp,下载最新版本就行
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
tar -xzvf frp_0.61.0_linux_amd64.tar.gz
cp frp_0.61.0_linux_amd64/* ./

在这里插入图片描述
可以看到有 frpc frpc.toml frps frps.toml 四个文件,c可以理解成cline,s就是server.

4.2 配置 FRP 服务端(frps)

有好多的配置选项,但可以直接用默认的:

配置 FRP 服务端(frps)

4.3 配置 FRP 客户端(frpc)

在内网服务器上,同样是下载那个软件,默认的内容是:
在这里插入图片描述

serverAddr = "X.XX.XX.XX" # 公网服务器 IP
serverPort = 7000 # 与服务端配置的 bind_port 一致

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1" # 内网服务 IP,一般为 127.0.0.1
localPort = 22 # 内网服务的端口
remotePort = 8001 # 外部访问的端口,注意不要与服务端端口冲突

如果有一台内网服务器需要穿透,可以在另一台上进行设置:

serverAddr = "X.XX.XX.XX" # 公网服务器 IP
serverPort = 7000 # 与服务端配置的 bind_port 一致

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1" # 内网服务 IP,一般为 127.0.0.1
localPort = 22 # 内网服务的端口
remotePort = 8002 # 外部访问的端口,注意不要与服务端端口冲突

这样就可以访问不同的机器

ssh -p 8001 user@"公网ip"  #访问第一台内网机
ssh -p 8002 user@"公网ip"  #访问第二台内网机

这里的user 都是指内网服务器上的用户名。

4.4 配置阿里云

打开网页,点击“控制台"
在这里插入图片描述
接着找到自己的轻量应用服务器:
在这里插入图片描述
接着点击自己的服务器名称:
在这里插入图片描述
接着点击防火墙:
在这里插入图片描述
在这里插入图片描述
要添加规则,把我们需要的端口都开放出来;tcp协议用来使用ssh;icmp协议是使用外网服务器可以通过公网ip被访问。
最后可以测试:

ping 公网ip
ssh user@公网ip

5 开启服务

正常的,开启servser 和 client就可以,分别在各自的机器上执行:

./frps -c frps.toml #开启
./frpc -c frpc.toml

但我们要保证两种情况,一是开机自启动,二是要进程误杀后自启动。
方法如下:
要让 FRP 服务在系统启动时自动启动,并且在进程被误杀时自动重启,可以通过以下方法配置:


5.1 使用 Systemd 配置开机自启和自我恢复

Linux(包括 Ubuntu)中的 Systemd 服务管理可以实现开机自启和自动重启。

5.1.1 创建 Systemd 服务文件

**以下过程以client的配置为例,服务端把c改成s即可。
运行以下命令创建一个服务文件:

sudo vim /etc/systemd/system/frpc.service

在文件中输入以下内容(请根据实际情况修改路径):
如果是客户端:

[Unit]
Description=FRP Client 
After=network.target

[Service]
Type=simple
ExecStart=/path/to/frpc -c /path/to/frpc.toml
Restart=always
RestartSec=5
User=root
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

服务端:

[Unit]
Description=FRP Server
After=network.target

[Service]
Type=simple
ExecStart=/path/to/frps -c /path/to/frps.toml
Restart=always
RestartSec=5
User=root
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
  • ExecStart:替换 /path/to/frpcfrpc 的实际路径,/path/to/frpc.toml 为配置文件路径。
  • Restart=always:确保进程被意外终止后自动重启。
  • RestartSec=5:如果进程被杀死,5 秒后重启。
  • User=root:指定运行用户,可改为普通用户。

5.1.2 重新加载 Systemd 配置

保存后,重新加载 Systemd 配置:

sudo systemctl daemon-reload

5.1.3 设置开机自启

让 FRP 服务随系统启动自动启动:

sudo systemctl enable frpc

5.1.4 启动服务

启动并测试 FRP 服务:

sudo systemctl start frpc

检查服务状态:

sudo systemctl status frpc

5.2 验证自启和自动恢复

5.2.1 重启验证

重启系统:

sudo reboot

确认 FRP 服务是否已启动:

sudo systemctl status frpc

5.2.2 模拟进程被杀死

使用以下命令终止 FRP 进程:

sudo pkill frpc

几秒后运行以下命令,查看进程是否自动重启:

ps aux | grep frpc

我们看一下成功后的是什么:
客户端:
在这里插入图片描述
阿里云:

在这里插入图片描述

6 总结

FRP 是一款功能强大、易于使用的反向代理工具,它可以帮助我们轻松实现内网穿透,让我们的内网服务能够被外部网络访问。无论是个人使用还是企业应用,FRP 都是一个非常不错的选择。

后续学习

希望这篇博客能够帮助你理解 FRP 的原理和使用方法。如果你有任何问题或建议,欢迎在评论区留言。

本文参考:1、https://zhuanlan.zhihu.com/p/720401107
2、https://blog.csdn.net/zhangxiaoquan2016/article/details/140345796

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值