FRP内网穿透服务搭建,服务端(Ubuntu)与客户端(Windows)设置

本文详细介绍了如何使用FRP工具实现服务内外网穿透,包括服务器端配置、客户端设置,以及遇到的常见问题和解决方案,重点在于帮助读者避免连接难题和访问限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

最近一年的时间里,我所做的两个项目的服务和一个游戏服务器(后面简称:项目应用)需要公开到公网上,由于我家的宽带并没有公网IP地址并且也无法申请到动态的公网IP,因此需要一个软件或者是协议将服务和游戏挂到公网上。

早期有了解过 Apache 和 Nginx 可以实现反向代理,利用 SSH 连接的方式将项目应用连接至服务器,并实现从公网访问。但多次发现SSH的连接并不稳定,就算安装了 autossh 插件也会经常出现断连的情况。因此在大半年的时间里,在有动态公网的环境下尝试使用过 DDOS服务,还有许多许多其他的方式,例如:编写Python脚本实时监测连接状态,在更换IP地址的时候强制更新代理的地址,或者是采用P2P的方式,客户机和服务器直连,效果都不尽人意。

因此需要换其他的方式来将项目应用挂在公网上,于是乎采用 FRP 也就是FRP内网穿透工具来将项目应用挂在公网上。

什么是 FRP

FRP 是一个可用于内网穿透的,对外网提供服务的高性能反向代理应用,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。

准备工作

在搭建一个完整的 FRP 服务之前,我们需要提前准备一些东西:

  • 具有公网IP地址的云主机(例如:阿里云的ECS)或者是一台VPS;
  • 具有公网IP地址的主机尽量安装Ubuntu或者是Linux;
  • 在公网的主机要经过工信部备案,否则容易被查水表;
  • 本地的网络要具备相对良好的网络环境(下行 300Mbps 上行 30Mbps最佳,最低上行测试不要低于5Mbps);
  • 本地的主机要安装Windows操作系统;
  • 要有一些简单的Linux命令基础(例如cd ls cp tar之类的简单命令即可);

FRP服务之服务器端设置

首先,我们先从 FRP 的 Github 地址下载用于服务器端的安装包,Github Releases 页面,截止编写该文档,官方已经更新到0.39.0版本。

截屏2022-02-05 00.44.46

这里选择linux_amd64.tar.gz下载即可。通过FTP上传到 /usr/local目录下。

进入到该目录下,可以看到下面这个样子:

截屏2022-02-05 01.06.32

红色的就是我们的压缩包,接着我们来解压

tar -xvf frp_0.39.0_linux_amd64.tar

截屏2022-02-05 01.08.21

解压完成之后可以看到左边有一个不带有任何后缀的文件夹,我们来cd进入文件夹。

截屏2022-02-05 01.09.10

可以看到文件夹目录如下所示:

frp_0.39.0_linux_amd64
	|- frpc
	|- frpc_full.ini
	|- frpc.ini
	|- frps
	|- frps_full.ini
	|- frps.ini
	|- LICENSE
	|- systemd

服务器端只需要编辑frps.ini,我们可以用vim打开也可以使用FTP下载到本地之后使用VSCode打开。

默认的状态下是

[common]
bind_port = 7000

[common]代表这部分是必须有的,bind_port这个端口是用来设定 FRP 服务端端口的,我这里设定的是17465端口

[common]
bind_port = 17465

你也可以加上token来进行简单的身份验证,不然谁都可以用你的这台服务器做内网穿透。

服务器端作为服务端,可以删掉一些不必要的客户端文件,以免以后启动的时候选错配置文件。

rm -f frpc
rm -f frpc.ini

我们为了能让服务在关掉SSH连接之后依然能够运行,需要让服务在后台运行。这里使用screen指令,这个模块Ubuntu本身是不涵盖的,需要自行安装:

apt-get update

在Update完成之后进行安装

apt-get install screen

这个时候就已经安装完成了。这里放几个常用的screen指令:

screen -S name          启动一个名字为name的screen 
screen -S name -X quit  删除某个session 
screen -ls    		    是列出所有的screen 
screen -r name或者id     可以回到某个screen了(如不行先detached: screen -d name) 
键盘 ctrl + a + d  	   可以回到前一个screen,当时在当前screen运行的程序不会停止

我们新建一个screen

screen -S frps

然后进入到 FRP 目录里,输入下面的指令启动服务

./frps -c ./frps.ini

截屏2022-02-05 16.40.47

服务成功启动!

这个时候键盘按下ctrl + a + d返回,之后就可以退出SSH了,而程序并不会因此中断。

FRP服务之客户端设置

首先,我们先从 FRP 的 Github 地址下载用于客户端的安装包,Github Releases 页面,截止编写该文档,官方已经更新到0.39.0版本。

截屏2022-02-05 00.44.46

这里选择windows_amd64.zip即可,然后将文件解压到一个你中意的文件夹内,注意文件夹层次别太深。

客户端只需要配置frpc相关的文件,这里打开frpc.ini,我的配置如下

[common]
server_addr = x.x.x.x
server_port = 17465
[minecraft]
type = tcp
local_ip = 127.0.0.1
local_port = 25565
remote_port = 17778

上述的配置需要与服务端的配置相吻合

[common]中的server_addr填写的是刚才服务端的IP地址,server_port填写的是服务端的bind_port

[minecraft]中的local_port填写的是ssh的端口,remote_port则是远程连接时要输入的端口,通过frp服务映射到local_port

保存配置,在文件夹里打开cmd.exe,然后输入下面的命令启动客户端。

frpc.exe -c frpc.ini

这个时候应该能在服务端看到下面的字样,表示连接成功。红色部分是打码。

截屏2022-02-05 16.53.44

方便客户端启动,写了一个简单的bat文件,命名为frp-client.bat,内容如下

@echo off
@title frp client service
frpc.exe -c frpc.ini
pause

保存双击启动之后,点击最小化即可,frp服务就启动了。

那些所谓的“坑”

无法连接到服务器或者从外网无法访问?

请检查Ubuntu的防火墙是否为开启状态,若开启,请开放端口。若开放了端口或者没有开启防火墙,请登录云服务提供商的平台检查服务商的防火墙有无出入站端口设置。如果没有设置端口,请进行设置。

如果还是不行,请检查客户端电脑的防火墙出入站设置。

### 配置FRP 0.33在Windows系统中的内网穿透 #### 准备工作 为了能够在Windows系统中成功配置FRP进行内网穿透,需先完成如下准备工作: - **下载FRP**:前往GitHub页面获取适用于Windows系统的`frp_0.33.0_windows_amd64.zip`文件[^4]。 解压缩该ZIP档案至指定目录下,例如 `C:\Program Files\frp`. #### FRPS (服务端) 设置 如果计划作为服务器提供者,则需要设置FRPS: 创建名为`frps.ini`的服务端配置文件于安装路径下, 文件内容应包含但不限于以下参数: ```ini [common] bind_port = 7000 ; 定义外部访问端口 token = your_token ; 设定安全令牌用于验证客户端服务端的身份一致性 vhost_http_port = 80; 如果打算转发HTTP请求可定义此选项 ``` 对于Linux环境下的服务管理可以通过systemd来控制FRPS进程运行状态;而在Windows环境下则建议通过命令提示符以管理员身份执行启动脚本或直接双击`.exe`程序开启服务[^2]. #### FRPC (客户端) 设置 针对希望被远程访问的目标机器(即家庭内部网络内的计算机),应当部署FRPC组件. 同样地,在相同位置建立另一个文本档命名为`frpc.ini`, 并编辑其属性为适合个人需求的形式: ```ini [common] server_addr = x.x.x.x ; 输入公网IP地址指向托管FRPS实例的位置 server_port = 7000 ; 对应上面提到过的绑定端口号 token = your_token ; 和服务端保持一致的安全令牌字符串 protocol = tcp ; 协议类型,默认tcp即可满足多数场景应用 [rdesktop] type = tcp ; 类型设定为TCP协议传输方式 local_ip = 127.0.0.1 ; 此处填写本地监听的IPv4地址 local_port = 3389 ; Windows RDP默认使用的端口号码 remote_port = 6000 ; 外部世界用来发起RDP会话所依赖的具体数值 ``` 保存更改后的文档,并确保两个INI格式配置项均无误后,可以尝试分别启动相应的EXE应用程序测试连通性状况[^1]. #### 开启防火墙规则允许特定流量通行 考虑到安全性因素,通常情况下操作系统自带防护机制可能会阻止未经许可的数据交换活动发生。因此有必要调整相应策略以便让必要的通信顺利达成目的。 ```bash sudo ufw allow 7000/tcp comment "Allow FRP server port" sudo ufw reload ; 刷新UFW规则集使之立即生效 ``` 上述指令仅适用于基于Ubuntu/Debian系列发行版的操作系统上操作防火墙设置;而对于Windows平台而言,可通过图形界面的方式进入“高级安全Windows Defender防火墙”,新建入站规则开放所需端口范围给FPR使用[^3]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值