本文主要介绍如何使用云服务器和FRP服务来远程连接到内网服务器
文章目录
目录
前言
一、什么是NAT穿透或反向代理?
二、原理介绍
三、FRP 简介
1.什么是FRP
2.实现步骤
(1)准备工作
(2)在公网服务器上配置 FRP 服务端
• 下载 FRP 服务端程序并解压:
• 编辑 frps.ini,配置 FRP 服务端:
• 启动 FRP 服务端:
(3)在内网服务器上配置 FRP 客户端
• 下载 FRP 服务端程序并解压:
• 编辑 frpc.ini,配置 FRP 客户端,主要配置以下几个参数:
• 启动 FRP 客户端:
3. 远程访问内网服务器
4. FRP 注册为系统服务
(1)公网服务器注册FRP服务端服务
(2)内网服务器注册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和端口远程登录内网服务器。
本文内容仅作为参考和学习交流使用,如有错误请麻烦指正。
评论前必须登录!
注册