使用FRP服务实现内网服务器的远程登录

本文主要介绍如何使用云服务器和FRP服务来远程连接到内网服务器


前言

很多时候在家办公需要远程登录到公司内网的服务器,除了使用公司布置的vpn服务,还可以使用反向代理的方式实现内网服务器的访问。


一、什么是NAT穿透或反向代理?

NAT 穿透或反向代理(如通过 FRP)是常见的解决内网穿透问题的技术手段,尤其适用于无法直接访问内网设备的场景。本文将详细介绍 使用 FRP(Fast Reverse Proxy) 工具来实现 NAT 穿透/反向代理 的实现步骤。

二、原理介绍

NAT穿透:通常家用路由器或公司内网服务器处于局域网中,外部无法直接通过公网访问。NAT 穿透的原理是通过公网中转服务器(可以是你购买的云服务器)进行中介,使内网设备主动与该中介服务器建立连接,然后外网设备通过连接到中介服务器,从而间接访问内网中的设备。

反向代理:它指的是内网设备主动向一个公网服务器发起连接,然后公网服务器接收到外部的访问请求时,将其转发到内网设备。FRP 就是一种常用的反向代理工具,它可以实现类似的内网穿透功能。

三、FRP 简介

1.什么是FRP

FRP(Fast Reverse Proxy)是一款高性能的反向代理应用,主要用于内网穿透。它能够将内网的服务暴露给外网,允许外部用户访问位于防火墙或路由器后面的内网服务。FRP 支持多种协议,如 TCP、UDP、HTTP 和 HTTPS,且具有较高的扩展性和易用性。

本文主要介绍通过FRP服务实现内网服务器的远程访问。

2.实现步骤

(1)准备工作

        • 一台公网服务器:例如购买阿里云、腾讯云等云服务器,拥有固定公网 IP。

        • 公司内网服务器:这是你想要远程访问的服务器。

        • 安装 FRP 工具:公网服务器和公司内网服务器上都需要安装 FRP

对于云服务器的配置要求并不严格,根据实际使用情况选择即可,这里我们只用作ssh连接的话:

带宽:根据需要传输的数据规模,5 Mbps 左右的带宽即可。

CPU:使用 1 核或 2 核 CPU即可。

内存:最少 1 GB 内存。

存储:一般 10-20 GB 系统盘足够。

并发:最好选择支持高并发连接的服务器实例。

(2)在公网服务器上配置 FRP 服务端

• 下载 FRP 服务端程序并解压:
[root@localhost ~]# wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz

下载成功开始解压

[root@ceshi ~]# tar -zxvf frp_0.37.1_linux_amd64.tar.gz

解压后进入解压的目录

[root@ceshi ~]# cd frp_0.37.1_linux_amd64

frpc : 这是 FRP 客户端的可执行文件。它用于在客户端运行,向服务器发起请求并通过服务器进行内网穿透。客户端负责将本地的服务暴露给外网。

frpc_full.ini : 这是 FRP 客户端的完整配置文件示例。里面包含了所有可以配置的选项。你可以根据自己的需求修改这个文件,配置内网穿透的行为,如指定哪些端口、协议、服务等。

frpc.ini : 这是 FRP 客户端的简化配置文件,用于快速配置和运行 FRP 客户端。通常,如果你不需要复杂的配置,可以直接修改这个文件来快速启动客户端。

frps : 这是 FRP 服务器端的可执行文件。服务器端用于接收来自客户端的连接请求,并通过 NAT 或防火墙将内网服务暴露给外网。服务器端在外网中运行,起到桥梁作用。

frps_full.ini : 这是 FRP 服务器端的完整配置文件示例,包含了所有可用的配置选项。你可以通过编辑这个文件,配置服务器如何处理来自客户端的请求。

frps.ini : 这是 FRP 服务器端的简化配置文件,用于快速配置和启动 FRP 服务器端。和客户端配置类似,这个文件可以用于简单场景下的快速部署。

LICENSE : 这是软件的许可证文件,里面列出了 FRP 的授权条款和使用协议。

systemd : 这是一个目录,里面通常包含 systemd 服务配置文件。可以通过 systemd 将 FRP 注册为 Linux 服务,以便开机启动和管理服务进程。

• 编辑 frps.ini,配置 FRP 服务端:
[root@localhost frp_0.37.1_linux_amd64]# vim frps.ini

向其中增加以下内容

[common]
bind_port = 7000   # FRP 服务端监听的端口
• 启动 FRP 服务端:
[root@localhost frp_0.37.1_linux_amd64]# ./frps -c frps.ini

根据终端输出信息可以看到FRP服务在7000端口已经正常启动。

PS : 因为现在是在云服务器上配置服务,请确定云服务器的7000端口的防火墙是正常开放的,请自行根据自己的云服务厂商的安全组配置策略开放7000端口,不然会影响后续的内网服务器的连接。

(3)在内网服务器上配置 FRP 客户端

• 下载 FRP 服务端程序并解压:

这里与上面服务端的步骤相同,直接复制前面的命令即可:

wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz
tar -zxvf frp_0.37.1_linux_amd64.tar.gz
cd frp_0.37.1_linux_amd64
• 编辑 frpc.ini,配置 FRP 客户端,主要配置以下几个参数:
[common]
server_addr = <公网服务器IP>  # 填写你的公网服务器的 IP
server_port = 7000  # 和 FRP 服务端一致

[ssh]
type = tcp
local_ip = 127.0.0.1  # 本地内网服务器的地址
local_port = 22  # 内网服务器的 SSH 端口
remote_port = 6000  # 映射到公网服务器上的端口

PS :因为这里我们配置的ssh映射到的是公网服务上的6000端口,所以公网服务器的6000端口也需要对外开放。

• 启动 FRP 客户端:
[root@ceshi frp_0.37.1_linux_amd64]# ./frpc -c frpc.ini

可以看到终端提示启动成功。

3. 远程访问内网服务器

完成上述配置后,我们便可以通过公网服务器的 IP 和 6000 端口,远程访问内网中的 SSH 服务:

[root@ceshi ~]# ssh -p 6000 用户名@<公网服务器IP>

此时即可正常通过公网ip远程登录到内网的服务器上了。 

4. FRP  注册为系统服务

在前文的介绍中我们知道FRP的解压目录有个systemd 目录,里面存放着将FRP服务注册成服务的文件(虽然我们自己写也可以,但是也完全可以用他们现成的)

进入到systemd 目录:

[root@ceshi frp_0.37.1_linux_amd64]# cd systemd/

 (1)公网服务器注册FRP服务端服务

首先停掉之前运行的frp服务(刚才的终端输出页面ctrl + c 或者直接kill掉启动的进程)

服务端的启动命令是frps,在systemd目录下,我们找到frps相关的service文件,一共有两个,我们使用frps.service这个service文件。看下文件内容:

[Unit] 段:

• Description=Frp Client Service:这是对服务的简短描述,说明该服务是用于管理 FRP 客户端的。

• After=network.target:表示该服务需要在网络服务(network.target)启动后再启动。这是因为 frpc 需要依赖网络服务。

[Service] 段:

• Type=simple:指定服务类型为 simple,即 ExecStart 启动的进程将作为主要的服务进程。

• User=nobody:指定以 nobody 用户身份运行 frpc,这种方式可以限制服务的权限,增强安全性。如果需要更高权限的操作可以修改为其他用户。

• Restart=on-failure:如果服务异常退出,它将会自动重启。

• RestartSec=5s:服务重启之前,等待 5 秒的间隔时间。

• ExecStart=/usr/bin/frps -c /etc/frs/frps.ini:指定执行的命令,用于启动 FRP 客户端。%i 是 systemd 的模板参数,它表示实例化服务时的名字,等同于配置文件名。

• ExecReload=/usr/bin/frps reload -c /etc/frp/frps.ini:指定重载服务时执行的命令,reload 用于重新加载配置。

• LimitNOFILE=1048576:设置服务允许的最大文件句柄数,通常用来提升文件打开的上限,防止在大流量或大量连接时资源耗尽。

[Install] 段:

• WantedBy=multi-user.target:表示该服务在 multi-user 运行级别(常见的 Linux 运行级别)下运行,表明这是一个普通的多用户模式下的服务。

其中我们需要注意的有一点就是service文件的FRP服务端的启动二进制文件和配置文件是放到/usr/bin和/etc/frp目录下,我们现在有两个选择,一是将FRP服务的解压目录下的二进制文件和配置文件移到service文件指定的路径下,二是直接修改service文件的内容,将其中启动的二进制命令和配置文件的路径替换成你FRP服务解压的目录下,然后再将service文件放到 /etc/systemd/system目录下,这两个方法,大家任选其一即可,对FRP服务的使用没有任何影响。

这里我选择第一种方法:

[root@VM-4-15-centos systemd]# mv ./frps.service /etc/systemd/system/

首先我们将frps.service 移动到/etc/systemd/system 目录下

然后再将FRP服务端的二进制启动文件和配置文件放到对应的目录下,到FRP服务的解压目录下执行:

[root@VM-4-15-centos frp_0.37.1_linux_amd64]# mv ./frps  /usr/bin/

[root@VM-4-15-centos frp_0.37.1_linux_amd64]# mkdir -p /etc/frp   && mv ./frps.ini /etc/frp/

然后重新加载 systemd 并启动服务

[root@VM-4-15-centos frp_0.37.1_linux_amd64]# systemctl daemon-reload 

然后启动服务并查看服务状态:

[root@VM-4-15-centos frp_0.37.1_linux_amd64]# systemctl start frps.service 
[root@VM-4-15-centos frp_0.37.1_linux_amd64]# systemctl status frps.service 

此时已将FRP的服务端注册成服务。

PS :这里也讲一下为什么不用frps@.service这个服务进行注册服务。

如果我们查看这个文件的话就会发现启动启动命令那一行会和我们使用的frps.service文件不一样,是当执行 ExecReload=/usr/bin/frps reload -c /etc/frp/%i.ini ,%i 会被替换为实例名称,具体来说,服务文件名是 frps@.service,你可以通过 systemctl start frps@myinstance 启动服务。在这种情况下,%i 就会被替换为 myinstance,对应的配置文件就会是 /etc/frp/myinstance.ini,你可以通过不同的实例名称来使用不同的配置文件,这里咱并不需要这种灵活性,所以不选择这个文件。

 (2)内网服务器注册FRP客户端服务

跟上面公网服务注册几乎是一致的,只不过移动的文件是frpc.service ,移动的二进制启动命令和启动配置文件是frpc和frpc.ini。这里直接给出命令、

移动service文件:

[root@ceshi systemd]# mv frpc.service /etc/systemd/system/

移动二进制启动命令:

[root@ceshi frp_0.37.1_linux_amd64]# mv ./frpc  /usr/bin/

移动启动配置文件:

[root@ceshi frp_0.37.1_linux_amd64]# mkdir -p /etc/frp  && mv ./frpc.ini /etc/frp/

重新加载 systemd 并启动服务:

[root@ceshi frp_0.37.1_linux_amd64]# systemctl daemon-reload 
[root@ceshi frp_0.37.1_linux_amd64]# systemctl start frpc.service 

查看frpc服务状态:

[root@ceshi frp_0.37.1_linux_amd64]# systemctl status frpc.service 

此时内网服务器的FRP客户端也启动完成。

测试使用公网地址的6000端口访问服务也是成功的。


总结

本文主要介绍了如何使用云服务器的公网IP和FRP服务来配置NAT穿透的反向代理服务实现公网IP和端口远程登录内网服务器。

本文内容仅作为参考和学习交流使用,如有错误请麻烦指正。

使用frp实现内网穿透功能的方法如下: 1. 首先,你需要准备一台公网服务器作为frp服务端,以及一台需要做转发的内网服务器作为frp的客户端。确保这两台服务器可以互相访问。 2. 在公网服务器上安装和配置frp服务端。你可以通过下载frp服务端的方式来安装。具体的步骤是,在公网服务器上下载frp服务端,并进行配置。 3. 下载frp服务端的方法可以根据你的操作系统来选择适合的版本。一般来说,你可以通过在公网服务器上执行命令来下载frp服务端,比如使用wget命令。 4. 下载完成后,你需要进行frp服务端的配置。配置文件通常是一个frps.ini文件,你可以根据自己的需求来修改配置文件中的参数,比如端口号、认证方式等等。 5. 在客户端的内网服务器上,你需要准备工作。比如,确保内网服务器上部署了需要暴露在公网上的资源,比如项目接口。 6. 通过scp命令将下载的frp服务端传送到公网服务器上,可以使用以下命令:scp -P ssh开放的端口 下载的frp_0.51.2_linux_amd64.tar.gz的位置 登录的账号@公网服务器ip:你要拷贝到的公网服务器的位置。 7. 在公网服务器上解压下载的frp服务端,并执行启动命令,启动frp服务端。 通过以上步骤,你就可以使用frp实现内网穿透功能了。这样,你就可以在外部网络访问到内网服务器上的资源,而无需在公网上部署一套相同的服务。同时,通过内网穿透,你可以在家中或其他地方访问公司内网的资源。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值