前言
远程控制软件有用过 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_port
type
: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