使用FRP远程控制内网服务器

in 技术 with 0 comment

目的

因为需要经常通过外网访问家里的PC,而Teamviewer已经被商业限制,无奈只能通过Frp来实现访问。正好手头有一台闲置的云服务器可供使用,开动!

思路

将内网服务器的3389端口映射到公网IP服务器上,控制端通过访问公网IP:port实现远程控制内网服务器,这也是内网穿透的基本思路。

准备

1.Frp安装包
2.一台在内网的被控服务器
3.一台拥有公网IP的服务器

实践

下载

在内网服务器和公网服务器分别下载Frp并解压,可以发现Frp的文件名存在以c和s结尾的后缀,其中c结尾的是被控端的程序/配置,以s结尾的是服务端的程序/配置。

公网服务器

我的公网服务器系统是CentOS7,windows运行方式差别不大
公网服务器的设置尤为简单,打开frps.ini文件

sudo vim ./frps.ini

可以发现如下配置:

[common]
bind_port = 7000

更改bind_port可以更换运行端口
在CentOS等Linux系统运行:

./frps -c ./frps.ini

出现下图则运行成功:
1.png

在Windows系统运行:
win+r打开powershell,cd frp的解压目录
执行

./frps.exe -c ./frps.ini

内网服务器

内网服务器的配置设置也尤为简单,这里我的内网服务器是Windows系统
打开frpc.ini文件,修改配置如下:

[common]
server_addr = 公网服务器IP地址
server_port = 7000
auto_token=mstsc

[mstsc]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3389

server_addr填你的公网服务器IP地址
server_port填公网服务器的运行端口
auto_token填mstsc。local_port是本地需要映射的端口
remote_port是射到远程服务器上的端口
(具体解释参考Frp Github上的wiki)
修改完配置后,使用powershell运行程序,cd frp解压目录

./frpc.exe -c ./frpc.ini

运行成功如下图所示
2.png

远程

至此,通过frp内网穿透已经完成,使用一台可以正常访问互联网的电脑就可以远程控制内网服务器啦!运行mstsc,输入公网服务器IP:远程控制端口(没有更改一般是3389)即可远程控制内网服务器。

注意

需要注意的一点是,若公网服务器使用的是windows系统,一般需要更改内网服务器的rdp(远程桌面)端口,因为公网使用的rdp端口也是3389,内网如果也使用3389端口可能会发生冲突(未验证),具体修改方法如下:
1.运行注册表(win+r,输入regedit),找到注册项
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp中的PortNumber,右键修改,点击十进制,再输入你要更改的端口
2.同时打开控制面板,找到Windows Defender防火墙,打开。
3.高级设置->入站规则->新建规则,规则类型为端口,协议为TCP,端口为你要更改的端口,操作为允许连接,应用到所有网络上。根据该规则再创建一条UDP的规则即可。
4.重启计算机

开机启动

要进行远程控制,自然要设置开机启动。
centOS设置如下:

vim /usr/lib/systemd/system/frp.service

文件内容设置为(其中ExecStart的目录要设置为解压frp的目录):

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/home/frp/frps -c /home/frp/frps.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit

[Install]
WantedBy=multi-user.target

保存完毕后,执行

systemctl daemon-reload
systemctl enable frp
systemctl start frp

至此,frp控制端开机自启设置完成

Windows设置如下:
新建文件frp.bat,内容为

@echo off
mode con cols=60 lines=20
color a
title 服务监听工具
:frpc
echo.
echo frpc 1 启动完成
echo.
D:\software\frp_0.31.1_windows_amd64\frpc.exe -c D:\software\frp_0.31.1_windows_amd64\frpc.ini
echo.
echo 服务进程不见了,即将重启重启
echo.
ping -n 2 127.1 >nul
cls
goto frpc

保存后,打开控制面板->任务计划程序->创建任务
3.png

4.png

5.png

6.png

至此,windows的开机启动也设置完成

写在最后

根据原理,使用FRP进行远程控制的核心在于公网服务器的网络环境,一旦公网服务器出现网络波动,控制端和被控端都会失去连接,有没有办法解决呢?在浏览frp的wiki时,我发现他有一个p2p连接方式,即公网服务器确定控制端和被控端位置,控制端和被控端通过UDP协议进行通讯,不过我还没有研究透,等我研究透就再写一篇~
当然,当然frp的功能不仅仅只有内网穿透远程桌面,他的更多功能还是很值得去挖掘的。

Responses