前言
最近打算在机房里面用自己的电脑,笔记本太重不想背在身上,就决定使用远程控制。之前一直在用teamviewer,这几天在想为什么不用远程桌面呢,于是我便开始研究如何内网穿透使笔记本的3389端口暴露到公网上。
网上找了几种方法,无非就是那几个在国内比较有名的产品,花生壳和nat123。当然他们也不都是免费的,免费的也有种种限制,后来找到了ngrok来进行内网穿透,ngrok1.x是开源的,我便想使用ngrok来完成想法。
准备
- 一台有公网ip的vps服务器
- 一个任意域名
实现
服务器环境
由于ngrok使用go语言编写的,需要先安装go环境。
先到golang官网下载linux安装包
执行sudo tar zxvf go1.12.1.linux-amd64.tar.gz -C /usr/local
之后配置环境变量
1 | vim ~/.bashrc |
执行go version
出现版本就安装成功了。
域名DNS解析设置
首先将一个子域名解析到自己的服务器上,例如我将remote.xxxxx.com 解析到自己的服务器ip上(A记录).随后将 *.remote.xxxxx.com 解析到remote.xxxxx.com上(CNAME类型)。
至此DNS设置告一段落。
安装ngrok
下载ngrok
先下载ngrok源码,然后切换到目录git clone https://github.com/inconshreveable/ngrok.git
cd ngrok
生成证书与替换证书
1 | //生成 |
编译linux服务端
GOOS=linux GOARCH=amd64 make release-server
编译windows客户端
GOOS=windows GOARCH=amd64 make release-client
无论是编译客户端还是服务端,都会在ngrok/bin目录下生成可执行文件。
运行与使用
在服务器上
进入ngrok/bin目录,执行./ngrokd -domain="remote.xxxxx.com" -httpAddr=":8001" -httpsAddr=":4443" -tunnelAddr=":8083"
这里由于服务器的80和443端口被占用,就换了任意一个端口来侦听http和https,当然我们用不到这个。其次我使用了一个端口来侦听客户端的服务,客户端也是通过这个端口来使用ngrok。
还有,如果是想后台运行,建议使用screen或者nohub命令来实现。
然后到云服务器的安全组中放行这些端口(不要忘记3389),以保证服务正常运行。
在个人电脑上
首先先开启本机的远程桌面服务(好像是要win10专业版才能使用远程桌面,具体请参照微软官网。)
然后防火墙放行3389端口。
将服务器上的ngrok/bin/windows_amd64/ngrok.exe拷贝到个人电脑上,然后在同目录下创建
ngrok.cfg和ngrok.bat两个文件。
1 | //ngrok.cfg |
双击ngrok.bat文件,显示状态为online就成功了,在远程桌面连接中输入remote.xxxxx.com便可以开始使用远程桌面了。
后话
虽然实现了远程桌面,但其实效果并不是特别好,其主要原因还是vps限制了速率,毕竟学生机只有1M的带宽,如果有4M以上的带宽也许能顺畅一点,不过1M的速率简单使用也就已经足够了。
后来我又将本机的FTP服务穿透到公网,在由于IIS无法设置主被动模式,导致无法正常使用IIS自带的FTP服务,也只好作罢。理论上使用可以设置端口的其他软件搭建的FTP服务,就能成功穿透,但速度也是堪忧。