建站记录 | 利用FRP和腾讯云服务器实现内网穿透
FRP最新版已经更新好久了,但网上的攻略大多数还是老版本,配置文件还是frps.ini
时代的,所以来记录一个最新版的FRP内网穿透攻略。
软件安装
本来想用docker直接部署,结果找了半天没有一个镜像源是新版的,甚至最新的一个都已经是2022年的版本,遂放弃,去使用github上的官方版本。
首先找到FRP的官方仓库地址:
在发行版(Release)里下载对应操作系统的版本:
frp_0.58.1_linux_amd64.tar.gz
linux端的文件frp_0.58.1_windows_amd64.zip
windows端的软件
需要注意的是FRP的压缩包里同时包含了服务端和客户端的文件/程序,我这次只在Linux端部署服务端(有公网IP、负责转发),只在Windows端部署客户端(有需要映射的接口)。将里面的文件解压出来,放在以后要用的专属目录里。在服务端,我们只会用到frps和frps.toml;在客户端,我们只会用到frpc.exe和frpc.toml(后者都是前者的配置文件)。
前期准备
在一切开始之前,你应该先规划好要使用的端口(会比较多),并在你的云服务器提供商、管理面板(如有)的防火墙策略里放行他们。如果严格按照本教程,至少要放行:
7000
这是frp默认的服务端监听端口7500
这是我设置的网页看板端口,可以通过图形化界面监控6060
这是我设置的第一个隧道映射到服务器的端口
编写配置文件
服务端配置 frps
进入文件存放的目录,编写frps.toml。
>> vim frps.toml
bindPort = 7000
#服务端的监听端口,客户端需要与此一致,默认为7000
auth.token = "your_token"
#通过token验证,客户端只有与此token一致才能访问
transport.tls.enable = false
#是否启用tls,自某个版本后默认为true,需要显式的否定来关闭
webServer.addr = "0.0.0.0"
#网页看板地址(默认取服务器本地地址)
webServer.port = 7500
#网页看板端口
webServer.user = "admin"
#网页看板用户名
webServer.password = "paw"
#网页看板密码(此密码为明文存储,建议使用非常用密码)
退出编辑界面,在同目录下输入./frps -c ./frps.toml
来启动程序。访问http://your_addr:7500查看网页看板是否成功启动,若启动则服务端已经配置完毕。
客户端配置frps
进入文件存放的目录,编写frpc.toml。
serverAddr = "x.x.x.x"
#服务器地址
serverPort = 7000
#服务器的监听端口,需要与服务端配置一致
auth.method = "token"
#设置验证方法为token
auth.token = "your_token"
#token,与服务端设置的必须完全一致
transport.tls.enable = false
#是否启用tls,自某个版本后默认为true,需要显式的否定来关闭
#以下是创建隧道,可以创建多个隧道,系统默认会提供一个开放于:22用于ssh访问的隧道
[[proxies]]
name = "xxx"
#隧道名称,自定义,但不能重复
type = "tcp"
#隧道类型,可用tcp, udp, http, https, tcpmux, stcp, sudp, xtcp
localIP = "127.0.0.1"
#本地IP地址,如果要使用非本机IP可以自行修改
localPort = 9000
#本地端口:[本机]本机要使用的监听端口
remotePort = 6060
#远程端口:[服务器]要将本机端口映射成服务器的端口
保存文件并退出,在目录文件夹内右键选择在终端中打开,并输入./frpc -c ./frpc.toml
来启动程序。你每创建了一个隧道,下方的提示文字就会多一行来提示你隧道xxx已创建成功。
配置启动程序(自启动)
如果每次都重新敲启动命令来启动未免也太麻烦了,在本例中,对于服务端,若未设置screen程序会在断开连接时自动停止;对于客户端,每次启动都需要保持一个命令行窗口打开,很容易误操作将其关闭。因此,将frp配置为服务会使程序方便很多。
服务端配置为Service
在服务器端,我们将frps注册为系统服务,这样就可以利用linux的systemctl
来控制他的启动、关闭、设置开机自动启动了。首先在system下编写一个服务类文件。以下是官方文档提供的标准格式:
>> sudo vim /etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target
需要特别注意frps的安装路径,因为我的目录文件夹也叫frps,而frps主程序没有后缀名,所以应该是./frps/frps
,因为这个问题在后面的启动步骤卡了好久。全部配置完成后,就可以用以下命令来管理名为frp server(或你自定义的名字)服务了。常用的控制命令如下:
sudo systemctl start frps
#启动frps
sudo systemctl stop frps
#停用frps
sudo systemctl restart frps
#重启frps
sudo systemctl status frps
#查看frps状态
sudo systemctl enable frps
#设置frps开机自启
重启服务器,利用sudo systemctl status frps
查看服务运行情况,若为active则服务端已经成功配置完毕。
客户端配置为服务
在Windows端注册服务需要用到第三方软件,我选用的是winsw(Windows Service Wrapper),首先前往github获取他的最新发行版:
在Release中选择WinSW-x64.exe
并下载。将该文件复制到你的frpc目录下,并重命名一个你能记得住的有意义的名字,譬如:frpc_service.exe
。随后,新建一个frpc_service.xml
(注意:文件名要和之前改的exe完全一致)
<service>
<id>frpc_service</id>
<!-- 服务ID,需要唯一 -->
<name>frpc_service</name>
<!-- 服务名称,需要你能记住 -->
<description>frpc内网穿透客户端服务</description>
<!-- 服务描述,写给你自己看的 -->
<startmode>Automatic</startmode>
<!-- 启动模式若设为自动,会开机自启 -->
<executable>frpc.exe</executable>
<!-- 执行文件 -->
<arguments>-c frpc.toml</arguments>
<!-- 要使用的配置文件 -->
</service>
保存frpc_service.xml
后,以管理员身份启动cmd,进入到该目录,运行:
frpc-service.exe install
看到出现提示:
Installing service 'frpc_service(frpc_service)'...
Service 'frpc_service(frpc_service)'was installed successfully.
说明已经在你的windows系统里成功注册了服务。重启电脑后,打开服务(或service.msc
),找到你刚才注册的名称,若为运行中,则说明客户端配置完成。
总结
在正式开始使用之前,检查你的云服务器提供商、管理面板(如有)的防火墙策略,将上述设置的7000、7500、6060端口放行,如果你设置了更多的隧道,也要将他们映射的端口放行。
现在,如果完全按照以上文件配置,你的两台电脑/服务器上应该已经拥有了:
客户端设备:一个名为frpc的系统服务,他会在你的设备开机时启动,将你设备的9000端口映射到服务端的6060端口。该隧道通过名为
your_token
的token验证,不使用tls进行验证。你可以将你需要的服务(譬如MC服务器、文件系统等等)设置到9000端口上,通过服务器的6060端口远程访问。服务端设备:一个名为frps的系统服务,他会在你的设备开机时启动,通过7000端口接收来自客户端的映射请求,并将客户端的9000端口映射到自己的6060端口,让你可以通过服务器的公网端口访问你的客户端服务(譬如MC服务器、文件系统等等)。
如果你设置了更多的隧道、且他们都成功启动,他们也将映射到各自指定的端口上(如无冲突)。
本文中关于在Windows端将frpc配置为系统服务参考了:
https://blog.csdn.net/qq_42058138/article/details/131550438