要内网穿透嫌麻烦可以直接用诸如“花生壳“、”natapp“等免费产品,用别人的东西先不说速度如何,总有“寄人篱下”的感觉,所以最好是能自己动手实现,前提是的有一台拥有公网ip的服务器。
主流的内网穿透工具有以下两种,两个同样开源,同样用golang编写,市面上大多数内网穿透产品都是基于这两个开发的:
一、frp简介
frp是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,支持tcp流量转发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面…)。目前市面上提供类似服务的有花生壳、TeamView、向日葵等等,但要使用第三方的公网服务器就必须为第三方付费,并且这些服务都有各种各样的限制,此外,由于数据包会流经第三方,因此对数据安全也是一大隐患。
而frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
二、frp服务端安装
- 从项目地址上下载系统对应的releases最新程序
- 配置服务端
绑定frp服务端运行端口和设置frp 的状态以及代理统计信息展示
- 运行服务端frp
// 解压frp安装包
tar -zxvf frp_0.29.1_linux_amd64.tar.gz
// 进入解压包
cd frp_0.29.1_linux_amd64/
// 启动frp服务
./frps -c frps.ini
- AdminUI界面
三、frp客户端安装
- 同样从项目地址中下载客户端系统对应的版本
- 配置客户端
运行客户端frp
./frpc -c ./frpc.ini
四、注册windows服务端自启frp
在windows下使用nssm 将frp注册为服务.使其开机自启动&后台运行.
下载nssm 解压nssm到frp根目录。
以管理员身份运行cmd。 输入 cd D:\frp_0.18.0_windows_amd64 回车运行 nssm install frpc
点击path选择frp相关目录,输入相关参数。点击Install service 即可 安装为服务.如有安全软件阻挡,允许即可。在服务管理中查找frpc服务并启动。
接着可以在服务看到frp已经注册到windows服务中
远程开启使用 stcp(secret tcp)
安全暴露内网,要访问这个服务的机器上启动另外一个 frpc。
// frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[secret_ssh_visitor]
type = stcp
// stcp 的访问者
role = visitor
// 要访问的 stcp 代理的名字
server_name = secret_ssh
sk = abcdefg
// 绑定本地端口用于访问 ssh 服务
bind_addr = 127.0.0.1
bind_port = 6000
五、非服务器Windows系统开启多用户远程
首先先确定windows版本,被远程连接这是一个高级功能,起码要专业版以上(专业版,企业版,服务器版)才行。且windows默认情况下只能同时登录一个账号,并且手机连上电脑,电脑就会退出登录,被踢下线,这是因为,能让多个账号远程连接到一个电脑,这个是服务器版才该有的功能。想要达到能多人远程桌面的需求,需要进行配置,分为两步:
配置本地组策略
组策略编辑器,打开后,依次点击:管理模板-Windows组件-远程桌面服务-远程桌面会话主机-连接
双击右边的限制连接的数量,选择已启用,然后在下面选择你想开启的最大连接数,一般填个3都够用了.
双击右边的将远程桌面服务用户限制到单独的远程桌面服务会话,这里很多的教程会建议改成已禁用,但是我的建议是把这里改成已启用!!!
开启多用户连接功能
虽然设置了最大连用户数,但是我们的系统本质上装的并不是服务器版本,所以到目前为止我们还是不能够多用户同时连接的,要去github上下载RDPWrap这个软件(不要去csdn等地方下载来路不明的文件,直接去github原作者那下载是最好的).
解压之后我们右键选择用管理员依次运行这三个文件:
- install.bat
- update.bat
- RDPConf.exe
如果你的系统版本太新,那你很可能箭头这里依然会显示[not supported]
如果你的系统非常新,或者更换了rdpwrap.ini文件仍然不支持,就需要到这个代码仓库的issues里面搜索你的系统版本(也就是上面的10.0.17763.771字眼),一般来说都会有人贴出新系统的配置信息,你只要把这个配置信息粘贴到刚刚那个rdpurap.ini文件的末尾就行了.例如下图:
到这里,所有的步骤就都结束了,现在可以让两个账户同时连接而不掉线了!且通过frp映射本地的3389端口到指定服务器上TCP端口上,以ip:端口
的形式作为远程host连接。