搭建ngrok内网穿透服务 && 开启Windows家庭版远程登录功能
1. 搭建ngrok服务器&&编译ngrok客户端(Windows · Linux · MAC)
参考博客:
https://juejin.cn/post/7055208263658258463 (主要参考了这一篇)
https://morongs.github.io/2016/12/28/dajian-ngrok/#
https://nutz.cn/yvr/t/2vmnhnknhmjuuqfh87usufeius
准备工作:
云服务器一台(或者固定的公网ip,使用电信宽带的可以找客服要一个公网ip,但这个公网ip不是固定的,重启光猫这个ip可能会变化,也可以花钱升级成固定公网ip)
域名一个(我的域名只进行了实名制,未进行备案;依据中国大陆法律,服务器在大陆的网站需要进行备案,但HK或国外网站不需要进行备案)
xshell(用于远程连接云服务器)
winscp(用于将云服务器资源下载至本地:将编译好的客户端下载至本地)
git(无要求)
go环境(注意:golang的版本不能大于等于1.15,因为这些版本的golang与ngrok不兼容,这里是个大坑,浪费我很长时间,我现在用的是1.14,没问题。golang安装方法可参考 https://www.yundongfang.com/Yun45687.html)
安装配置:
cd /usr/local/
# 获取ngrok源码
git clone https://github.com/inconshreveable/ngrok.git
# 配置编译ngrok需要的环境变量
export GOPATH=/usr/local/ngrok/
# 这里写自己的域名,由于我的域名是绑在HK服务器上的,所以不知道域名是否需要备案
export NGROK_DOMAIN="abc.club"
# 生成ngrok正数并覆盖原有证书(这段代码直接复制run就行了,没有任何问题)
cd /usr/local/ngrok
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
# 覆盖证书
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
编译安装ngrok server&client:
# 生成服务端
cd /usr/local/ngrok/
# 执行生成服务端 其中amd64代表64位的linux系统 如果是32位的 改为:GOARCH=386
GOOS=linux GOARCH=amd64 make release-server
# 执行后,在 bin 目录下生成一个 ngrokd 文件
# 如果服务器在大陆,由于github被屏蔽了,这个编译过程可能会失败,多尝试几次或者挂加速器
# 生成客户端
cd /usr/local/ngrok/
# 生成Windows64位客户端
GOOS=windows GOARCH=amd64 make release-client
# 下面是不同系统生成不同客户端的版本 替换GOODS 和GOARCH的值即可
#Linux 平台 32 位系统:GOOS=linux GOARCH=386
#Linux 平台 64 位系统:GOOS=linux GOARCH=amd64
#Windows 平台 32 位系统:GOOS=windows GOARCH=386
#Windows 平台 64 位系统:GOOS=windows GOARCH=amd64
#MAC 平台 32 位系统:GOOS=darwin GOARCH=386
#MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64
#ARM 平台:GOOS=linux GOARCH=arm
# 同上,如果服务器在大陆,由于github被屏蔽了,这个编译过程可能会失败,多尝试几次或者挂加速器
启动服务器:
进入到bin目录,执行
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="abc.club" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
参数说明:
#-domain 访问ngrok是所设置的服务地址生成证书时那个
#-httpAddr http协议端口 默认为80
#-httpsAddr https协议端口 默认为443
#-tunnelAddr 通道端口 默认4443
注意:从这个地方开始,就因人而异了,我的Debian服务器上同时部署 nginx 代理服务器,如果按照上面的代码启动,由于80 443端口已被nginx占用,ngrok会启动失败,所以此时需要修改执行参数,并使用nginx代理 ngrok 的80 443端口,启动参数及nginx配置如下:
# ngrok server启动参数
# domain换成你的域名,httpAddr https换成希望被nginx代理转发的端口
./bin/ngrokd -domain=yourDomain -httpAddr=":8888" -httpsAddr=":4333"
# nginx http server配置
server {
listen 80;
server_name *.yourDomain;
location / {
proxy_set_header Host $host:8888;
proxy_redirect off;
proxy_pass http://127.0.0.1:8888;
}
}
***再次注意***:上面的 yourDomain 需要在云服务器的DNSPod中正确配置解析项,才能正常使用ngrok内网穿透功能。DNS解析配置如下(记录值填写主机的ip地址):
启动客户端:
普通穿透:用winscp将生成的windows_amd64拉倒本地,里面只有一个ngrok.exe程序,同目录下新建ngrok.cfg文件,文件类型可自定义,但是执行时注意一致
# server_addr: "yourDomain:4443" 其中 yourDomain还是你自己设置的那个域名 4443是服务器启动时的监听端口 保持一致 (改就都改 不改就不要动)
server_addr: "yourDomain:4443"
trust_host_root_certs: false
# 普通代理
ngrok -config=./ngrok.cfg -subdomain=test 8080
#参数说明:ngrok.cfg 刚才新建的文件,-subdomain=test test:穿透的域名前缀,8080 :穿透的域名映射端口
RDP穿透(Windows远程桌面):
# ngrok.cfg
# server_addr 是服务端地址 写 “你的域名:tcp端口”
# tunnels 是建立一个隧道,
# mstsc 是隧道名(自定义的)
# proto 是协议,远程桌面是tcp协议,然后写你本机ip和本机的远程桌面端口,默认是3389
# remote_port 是远程端口 就是你用远程桌面是要填的端口,最好不用3389,防止人家爆你端口。
server_addr: yourDomain:4443
trust_host_root_certs: false
tunnels:
mstsc:
proto:
tcp: "127.0.0.1:3389"
remote_port: 13389
# 启动命令
ngrok -config=ngrok.cfg start mstsc
# 在Windows远程桌面中输入 yourDomain:13389就可以远程连接Windows了
2.Windows家庭版开启远程桌面服务(专业版无需开启)
参考博客:
https://blog.csdn.net/sitebus/article/details/121555431(操作教程)
https://blog.csdn.net/weixin_41004350/article/details/89329124(操作教程)
https://github.com/sebaxakerhtc/rdpwrap.ini/blob/a18e7bfc60b37dd869f129996c4b1874f9c2a3b2/rdpwrap.ini#L4923(正确的 rdpwrap.ini 下载地址)
(51条消息) Win10家庭版增加本地安全策略(组策略)_hxxjxw的博客-CSDN博客_win10 家庭版 本地安全策略(win10家庭版开始安全组策略,否则远程连接后会禁止登入桌面)
(51条消息) 远程桌面连接出错「用户账户限制会阻止你登录...」_脚印-CSDN博客_用户账户限制例如时间限制会阻止你登录(同上)