最近想用手机远程家里的电脑,但是没有公网ip,自然就需要内网穿透了。网上有一些现成的内网穿透服务,但是有流量等限制,因为自己有服务器所以可以自建ngrok内网穿透服务。 过程中遇到一些问题,记录如下:
ngrok的编译网上有无数的教程(虽然都是粘贴复制的),我的服务器是windows系统,编译ngrok服务端的时候需要编译成windows的版本。运行的时候和linnux一样带参数,可以将命令配置成bat脚本。启动ngrokd服务端和ngrok客户端,客户端配置一般如下: server_addr: "域名:端口" trust_host_root_certs: false tunnels: www: subdomain: "" remote_port: 9081 #远程调用的端口 proto: http: 8080 #内网开放的端口访问 域名:9081 时会请求到本地8080端口。但是这里指的是在服务端调用,要在第三方调用需要在服务端开放9081端口,在云服务器组策略配置重启服务器即可。 3. 访问的时候出现非法阻断的情况,因为域名没有备案,之前备案域名花了很长时间和精力,肯定不想为了远程个桌面去备案。ping 域名解析时没有问题的,ngrok服务端和客户端也可以正常链接,仅仅只是访问的时候被上层网络拦截了,但是ngrok需要通过域名的方式访问,于是想到了利用nginx的转发。
将某个端口例如7081开放,第三方通过ip:7081端口的方式访问服务器nginx,nginx将访问转发到域名:9081,然后将C:\Windows\System32\drivers\etc\hosts拖到桌面,新增 127.0.0.1 域名 将域名解析成本地。 nginx配置:
server { listen 7081; location / { proxy_pass http://域名:9081/; } }最后通过第三方通过 服务器ip:7081 一样能访问到本地8080端口,只不过请求时先到服务器 7081 ,然后转发到 域名:9081 因为域名在服务器被解析为127.0.0.1了,所以访问的是本地9081,这样终于来到了ngrok的配置端口了。这种的方式是不通过域名直接访问的,反正我只是为了内网穿透,达到目的就奥里给。远程的话配置nginx tcp转发,客户端配置本地端口为远程端口就行了。
博客地址:那个人好像一条狗啊