前言
远程控制软件有用过 TeamViewer、向日葵、Chrome Remote Desktop 等,TeamViewer 的稳定性流畅性最好,但是后台挂久了,会被检测商业用途,需要付费,那价格实在没法交个朋友。向日葵 挺好的,但是对国产软件向来有些警惕,不敢给予太高的权限。Chrome Remote Desktop 国内没法使用无人值守访问。Windows 自带的远程桌面不能连接非局域网内的用户,公网 IP 对于租客来说也没法弄,后来了解了内网穿透技术,正好解决了问题。
简单使用
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
frp 实现需要具有公网 IP 节点的中转站,我用的是谷歌云,公司也用了内网穿透技术,用的是腾讯云,比较后发现公司速度更快。
Server 端安装
官网 下载对应系统的版本,我的 VPS 是 linux x64,所以选用的是版本是 frp_0.34.1_linux_amd64.tar.gz。
下载后解压文件夹,将 frps.ini 和 frps 文件拷贝到服务器上,运行即可。示例如下:
# 后台运行,输出默认重定向到当前目录下 nohup.out 文件
nohup /root/frp/frps -c /root/frp/frps.ini &
# 后台运行,不记录输出信息
nohup /root/frp/frps -c /root/frp/frps.ini &> /dev/null &
其中 frps.ini 文件中 bind_port = 7000 表示默认监听端口为 7000,需要安全组策略允许入站和出站。
Client 端安装
下载 Windows 端的版本 frp_0.34.1_windows_amd64.zip,也只需要两个文件 frpc.ini 和 frpc.exe。运行示例如下:
# 文件所在目录下
frpc.exe -c frpc.ini
frps.ini 文件的示例:
[common]
server_addr = 35.***.**.216
server_port = 7000
[RDP1]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7002
其中:
server_addr:server 端公网 IPserver_port:server 端监听端口,同bind_porttype:tcp,默认模式,不够安全local_ip:本机使用,填127.0.0.1即可local_port:windows 远程桌面默认端口为 3389,可以在设置中看到remote_port:远程用来映射的端口
此时若两端日志都显示 start proxy success 说明连接成功。远程桌面连接时计算机名称输入 [server_port]:[remote_port] 即可实现远程控制。
Windows 开机无窗口启动
由于客户端要运行命令行,Windows 需要每次打开 shell 客户端,这里分享两个小技巧实现开机无窗口启动命令。
脚本无窗口运行
新建 .vbs 运行文件,输入以下命令,CreateObject("WScript.Shell").Run "***",0 将 *** 替换成需要的命令。
应用开机启动
创建该文件的快捷方式到 用户\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 目录下,即可实现开机自动运行。
后台启动后,想要查看进程的话,Windows PowerShell 查看进程和删除进程的命令如下:
Get-Process -name frp*
Stop-Process -name frpc
frp 进阶
stcp 模式(安全)
tcp 暴露的端口,任何设备都可以访问,有较大的安全隐患。为此 frp 提供了 stcp 模式。
被访问端配置示例如下:
[common]
server_addr = 35.***.**.216
server_port = 7000
[RDP2]
type = stcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 3389
访问端配置示例如下:
[common]
server_addr = 35.***.**.216
server_port = 7000
[RDP2_visitor]
type = stcp
role = visitor
server_name = RDP2
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 6000
此时访问端使用 127.0.0.1:6000 即可远程连接。
此方式两边客户端都要配置,不如 tcp 方便些。
xtcp 模式(高效)
xtcp 模式是点对点模式,实现不通过服务器中转流量的方式来访问内网服务。使用方式同 stcp 类似,需要在两边都部署上 frpc 用于建立直接的连接。
服务端需要额外配置监听一个 UDP 端口。
[common]
bind_port = 7000
bind_udp_port = 7001
被访问端配置示例如下:
[common]
server_addr = 35.***.**.216
server_port = 7000
[RDP2]
type = xtcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 3389
访问端配置示例如下:
[common]
server_addr = 35.***.**.216
server_port = 7000
[RDP2_visitor]
type = xtcp
role = visitor
server_name = RDP2
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 6000
此方式穿透成功率较低,我测试了下,竟然可用,速度明显快很多,所以我最终采用的是此方法。
后续
上文提到公司也使用了内网穿透技术,采用 frp + openVPN 的方法,给每个人分配了一个密钥,员工打开 openVPN,加载密钥,就可以实现在家访问公司内部搭建的网站,当然远程控制也可以。感觉比直连的方式稳定些,后续可以研究下。
Last modified on 2020-11-02