一、需求

  1. 远程管理办公室电脑,查看程序运行状态、远程传输文件等等,都需要远程到Windows桌面。一般用远程工具teamviewer和向日葵远控,teamviewer因为被国内流氓公司代理的缘故,变得极其恶心,向日葵好久没用了,印象中不是很顺畅。Windows自带远程桌面连接,一般大家的IP会有变化,需要使用DDNS,如果网络有NAT嵌套,还需要内网穿透。
  2. 家里有一台群晖,需要远程到群晖的管理页面添加下载的BT任务,还需要查看备份的照片、文件和视频,也可以通过cloud drive同步和备份电脑的文件。远程访问可以通过群晖自带的quickconnect,非常方便,只需要一个群晖账号,傻瓜式操作。不过需要到群晖的服务器中转,速度并不快,至少我移动的宽带是这样,据说电信的速度不错,没有测试,也懒得换宽带了。

同步数据是我最大的需求了,之前一直用着GoodSync的同步软件,缺点是要经常带着移动硬盘到处跑,颇为不便。以前用的百度同步网盘,但是鉴于百度的恶心行径,还是远离的好,劝大家也最好别用百度的东西。朋友推荐说坚果云不错,不过没有找到大硬盘的套餐,我的同步数据有几百GB,不太够。还有一个办法是onedrive,之前用学校邮箱申请的5T空间版,应该算是够用了,而且速度也还凑合,几百kB吧。但是这类A1账户,有个大问题,就是管理员可以随意查看你的文件,虽然相信James Zhang应该没兴致来看我的,但是毕竟是自己很重要的隐私数据,放到网盘也不够安全和放心。

剩下来就是FRP的内网穿透方案了。以前没搞懂这个到底是怎么工作的,后来蹭了一下别人的服务器,慢慢熟悉了点,后来学着自己搭了一个frp的服务端,简单好用,还安全放心。

二、frp服务端安装

首先得有一台具有公网IP的服务器,我用的阿里云的香港轻量云,优点是延迟低,网络稳定,虽然带宽限制30Mb,但是足够个人使用了。延迟低很重要,不然远程桌面的时候一个操作等半天,卡顿太严重,会疯的。

我的frp安装是看的这个教程,https://www.jianshu.com/p/00c79df1aaf0

大家可以自行学习,我直接用的文章最后面的一键脚本:

wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh
bash install-frps.sh

按照提示一步步走下来,自己设置一下面板的ID、密码和token即可,不过其实面板没啥必要登陆。

安装完成后,会得到如下的提示文字:

+--------------------------------------------------+
| Manager for Frps, Written by Clang |
+--------------------------------------------------+
| Intro: http://koolshare.cn/thread-65379-1-1.html |
+--------------------------------------------------+

Starting Frps(0.15.1)... done
Frps (pid 3325)is running.

+---------------------------------------------------------+
| frps for Linux Server, Written by Clang |
+---------------------------------------------------------+
| A tool to auto-compile & install frps on Linux |
+---------------------------------------------------------+
| Intro: http://koolshare.cn/thread-65379-1-1.html |
+---------------------------------------------------------+

Congratulations, frps install completed!
==============================================
You Server IP : 12.34.56.78
Bind port : 7000
KCP support : true
vhost http port : 8080
vhost https port : 443
Dashboard port : 7500
Privilege token : mike
tcp_mux : true
Max Pool count : 50
Log level : info
Log max days : 3
Log file : enable
==============================================
frps Dashboard : http://12.34.56.78:7500/
Dashboard user : admin
Dashboard password : admin

把这部分内容保存下来,比较重要的是你的IP、Bind port和token。

三、Windows上的frp客户端(frpc)

frp的客户端文件我打包放在了https://www.ljchen.com/file/frp%E6%95%99%E7%A8%8B/frpc_win.zip

配置文件我是用以前蹭的一个网友的服务器的配置改的,chuantou.org,貌似现在已经无法访问了。

里面包含的文件如下:

其中frpc.ini是配置文件,要与你的服务器设置相对应,比如我的这个文件内容如下:

#配置文件如果失效,请访问www.chuantou.com获取最新配置文件

[common]
server_addr = 12.34.56.78
server_port = 7000
token = mike
# user:标注你的代理名字,随便选择一个跟别人不一样即可
user = ljchen
login_fail_exit = false
#protocol = kcp #根据自身情况选择是否开启kcp协议 
tls_enable = true

[xxorg]
type = http
local_ip = 127.0.0.1
local_port = 80
# 选择一个可用的子域名,你的访问地址将会是http://xxorg.frp1.chuantou.org
subdomain = ljchen

[tcp3389]
	type = tcp
	local_ip = 127.0.0.1
	local_port = 3389
	remote_port = 1234

与上面的服务器配置信息是契合的,在Windows电脑上运行的话,就相当于把电脑的3389端口(Windows远程桌面)映射到了服务器12.34.56.78的1234端口,那么访问1234端口就能够连接到这台电脑的远程桌面了。像下面图中这样访问该电脑即可。

文件包里的其它文件都不需要修改,下载后只需要修改frpc.vbs文件的内容。

set ws=WScript.CreateObject("WScript.Shell") 

ws.Run "d:\download\frpc_win\frpc.exe -c d:\download\frpc\frpc.ini",0

这表明我的这个文件包所处的位置是d:\download\frpc_win这个目录。修改成你放的位置即可。路径最好用英文和数字,不要有中文。

开机启动:

右键点击frpc.vbs这个文件,创建快捷方式,然后在开始菜单里找到“启动”,右键打开这个文件夹,把创建的快捷方式复制进去,每次开机的时候就会自动运行frpc这个程序,保证能够从其它电脑远程桌面连接至此了。

四、群晖的客户端

群晖里的客户端文件我放在了:https://www.ljchen.com/file/frp%E6%95%99%E7%A8%8B/frpc_nas.zip

里面就两个文件,执行文件和配置文件frpc.ini。

其中frpc.ini的内容如下:

#配置文件如果失效,请访问www.chuantou.com获取最新配置文件

[common]
server_addr = 12.34.56.78
server_port = 7000
token = mike
# user:标注你的代理名字,随便选择一个跟别人不一样即可
user = ljchen
login_fail_exit = false
#protocol = kcp #根据自身情况选择是否开启kcp协议 
tls_enable = true

[xxorg]
type = http
local_ip = 127.0.0.1
local_port = 80
# 选择一个可用的子域名,你的访问地址将会是http://xxorg.frp1.chuantou.org
subdomain = ljchen

[tcp3389]
	type = tcp
	local_ip = 127.0.0.1
	local_port = 5001
	remote_port = 1235

[tcp6690]
	type = tcp
	local_ip = 127.0.0.1
	local_port = 6690
	remote_port = 1236

表明群晖管理页面的5001端口使用的是服务器的1235端口,cloud drive的端口用的是服务器1236端口。

访问群晖管理页面可以使用https://12.34.56.78:1235这个网址,再使用群晖的账号密码登陆;在cloud drive中添加服务器的时候要填写“12.34.56.78:1236”,注意这个时候没有https。

cloud drive同步界面:

其中6690是群晖cloud drive同步的端口,群晖其它服务的端口可以在官网查到:https://www.synology.com/zh-cn/knowledgebase/DSM/tutorial/Network/What_network_ports_are_used_by_Synology_services

群晖内的开机自启动:

刚才的客户端文件我放在了群晖的/home/ljchen/frpc目录,ljchen是群晖的用户名。

这部分内容参考的是:https://free-e.net/109

下面是开机启动的一些设置。

  1. 新建脚本文件
    vi /usr/syno/etc.defaults/rc.sysv/S99frp.sh
  2. 编辑脚本内容
    #/bin/bash
    cd /volume1/homes/ljchen/frpc
    nohup ./frpc -c ./frpc.ini &

    注意第二行的路径,这个教程的作者放在了root路径下面,我是放在home目录下的,因为root目录只能ssh连到群晖才能访问,为了修改配置方便,就放在了home目录下面,毕竟通过smb或者群晖的file station就可以管理这些文件了。

  3. 设置文件权限
    chmod +x S99frp.sh

设置自启动:

  1. 登录群晖 NAS 系统
  2. 进入控制面板
  3. 创建一个触发的任务 -> 用户定义的脚本
  4. 常规。
    设置名称名称,如:frp;用户账号:root;事件:开机。
    task_routine
  5. 任务设置
    用户定义的脚本,上面创建的脚本

    /usr/syno/etc.defaults/rc.sysv/S99frp.sh



    task_set

    则以后开机的时候群晖会自动运行这个脚本,脚本会自动启动frp的客户端。