FRP 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
RDP 是由微软开发的安全网络通信协议,又被称为远程桌面协议(Remote Desktop Protocol)。用户使用RDP客户端连接到Windows计算机或服务器,被连接的计算机或服务器也需要同时运行RDP。它可是让用户通过“远程桌面连接(Remote Desktop Connection)”可视化地远程控制电脑或服务器。
内网穿透 一般而言,在没有固定公网IP的情况下,外网设备无法直接访问内网设备。而内网穿透技术,就是能让外网的设备找到处于内网的设备,从而实现数据通信。
本文目的:用Windows电脑(控制端)自带的“远程桌面连接”远程控制多台没有公网IP的内网Windows服务器(被控制端)。
为了实现内网穿透,需要一台公网服务器(云主机)用于在控制端和被控制端之间进行服务转发(作者采用阿里云Linux服务器),且被控制端Windows版本需为专业版/企业版/服务器版 (家庭版仅可作为控制端,不可作为被控制端)。
1. 下载FRP并安装
根据控制端、被控制端和云主机的系统版本,从FRP的Github地址(https://github.com/fatedier/frp)下载最新版本的程序包。
此处,Linux云主机作为FRP Server,仅需要保留(frps, frps.ini, frps_full.ini)三个服务器端文件;而控制端和被控制端作为FRP Client,仅需要保留(frpc, frpc.ini, frpc_full.ini)这三个客户端文件。
首先,编辑用于服务器端的frps.ini文件。bind_port 为客户端与服务端进行通信的端口,默认是7000,可以改成其他的。进入阿里云主机的安全组设置,放行上面的7000端口。
[common]
bind_port = 7000
然后通过Xftp将(frps, frps.ini, frps_full.ini)这三个文件传至云主机/etc/frp目录。然后,在此目录内运行如下命令,测试云主机能否正常运行FRP(显示frps started successfully即为运行成功)。
./frps -c frps.ini
完成,服务器端配置后,再修改Windows客户端的frpc.ini文件。文件最上面的[common]部分是和云端服务器通信的部分,server_addr填写的是对应的云服务器的 ip 地址,而下面这个server_port则是刚才我们在服务端所设置的bind_port,两者需要保持一致。而[RDP1]/[RDP2]部分为内网穿透服务的内容,其中local_ip 指的是本机处于内网的 IP 地址,如果你是自己使用,只需要写 127.0.0.1 即可;而 local_port 指的是对应的服务端口,RDP 服务端口就是 3389;remote_port 是远程控制用来映射的端口。
第一台Windows服务器的frpc.ini文件:
[common]
server_addr = 阿里云主机公网IP
server_port = 7000 #与server端frps.ini文件中的bind_port一致
[RDP1]
type = tcp
local_ip = 127.0.0.1 #本机处于内网的 IP 地址,如果你是自己使用,只需要写 127.0.0.1 即可
local_port = 3389 #Windows系统RDP服务端口默认为3389
remote_port = 7001 #可自行设置
第二台Windows服务器的frpc.ini文件:
[common]
server_addr = 阿里云主机公网IP
server_port = 7000 #与server端frps.ini文件中的bind_port一致
[RDP2]
type = tcp
local_ip = 127.0.0.1 #本机处于内网的 IP 地址,如果你是自己使用,只需要写 127.0.0.1 即可
local_port = 3389 #Windows系统RDP服务端口默认为3389
remote_port = 7002 #可自行设置,需与其它内网机器所配置端口不同
依此类推……
如果想通过远程桌面控制某内网主机,其对应的地址就是:
server_addr:remote_port(公网服务器IP:映射的端口号)
然后,进入阿里云主机的安全组设置,放行上面的remote_port端口(7001,7002,……)。
将修改好的(frpc, frpc.ini, frpc_full.ini)文件传至被控制端的各个Windows服务器,被在该文件目录下右键运行Windows Terminal,运行如下命令,出现“start proxy success”即为连接成功,此时云主机服务器端也会显示“new proxy [RDP] success”提示。
./frps -c frps.ini
2. 通过RDP远程连接Windows服务器
首先,启用被控制端Windows服务器的远程桌面:控制面板->系统->高级系统设置,切换到“远程”,“允许远程连接到此计算机”,并勾选身份验证选项。
然后,在控制端Windows电脑,打开“远程桌面连接”程序,输入server_addr:remote_port (如:阿里云公网IP:7001),就可以连接到第一台内网Windows服务器了。
3. 开机自启FRP
虽然这样实现了远程控制,但每次重启系统后,都需要再手动开启frp服务。为此,可通过如下设置使其实现开机自启。
Linux服务器端:
在/usr/lib/systemd/system文件夹添加frps.service文件,其内容如下:
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=用户名
Restart=on-failure
RestartSec=5s
ExecStart=/etc/frp/frps -c /etc/frp/frps.ini #输入frps和frps.ini文件的绝对路径
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
然后,运行以下systemctl命令,实现自动启用frps服务
systemctl daemon-reload
systemctl enable frps
systemctl start frps
systemctl status frps
Windows服务器端:
在frpc文件所在的文件夹,新建frpc_autostart.bat文件,并写入如下内容:
@echo off
if not defined TAG (
set TAG=1
start wt -p "cmd" %0
exit
)
:home
.\frpc -c frpc.ini
goto home
右键frpc_autostart.bat文件,为其生成快捷方式,并将此快捷方式拷贝到C:\Users\Username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup文件夹