有的时候在项目开发或者远程开发时,需要把本地端口映射到公网上,让本地端口可以远程访问(TCP(ssh), http, https等),如果自己没有一台拥有公网ip的服务器的话可以租一台阿里云服务器或者腾讯云服务器。

服务器上操作:

购买完成后,在腾讯云服务器中添加安全组开放端口,注意,ngrok默认使用4443端口进行通信。
远程ssh连接到阿里云服务器上,更新(由于腾讯云服务器默认没有root权限,所以加sudo,或者切换为root用户,如果是有root权限,则不用加上sudo)。

apt-get update

安装git和go语言(为ngrok提供支持)

go安装
下载
下载地址:https://studygolang.com/dl
解压

tar -zxvf go2.25.1.linux-amd64.tar.gz

配置
vim /etc/profile

#GO
export PATH=$PATH:/opt/go/go/bin
#GOPATH
#export GOPATH=/opt/go/workspace
#export PATH=$PATH:$GOPATH/bin# Set the GOPROXY environment variable
export GOPROXY=https://goproxy.io,direct
# Set environment variable allow bypassing the proxy for specified repos (optional)
export GOPRIVATE=git.mycompany.com,github.com/my/private

编辑完成之后运行下面的命令
source /etc/profile
验证

go version

git 安装

apt-get install git

验证

git --version


下载源码ngrok (项目早已停止更新,源码完全固定)

下载地址

或者使用git下载。

 git clone https://github.com/inconshreveable/ngrok.git

使用ip生成自签证书
解决报错:开启服务后,服务端报错 Failed to read message: remote error: bad certificate, 客户端端报错 x509: cannot validate certificate for xx.xx.xx.xx because it doesn't contain any IP SANs

(参考 https://www.jianshu.com/p/d308b92e58ea)

# 添加环境配置
vim /etc/profile
export DOMAIN=xx.xx.xx.xx # 域名,这里我用了 ip
# 刷新配置
serouce /etc/profile
# 验证配置成功没有
echo $DOMAIN
# 生成自签证,一年过期
echo subjectAltName = IP:xx.xx.xx.xx > extfile.cnf #如果使用ip直接访问的话必须加这一句以及最后的-extfile extfile.cnfopenssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$DOMAIN" -days 10000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 10000 -extfile extfile.cnf# 复制并覆盖到 assets 构建的时候自动引用
yes|cp rootCA.pem assets/client/tls/ngrokroot.crt
yes|cp device.crt assets/server/tls/snakeoil.crt
yes|cp device.key assets/server/tls/snakeoil.key

去掉随机生成的 subdomain

ngrok 客户端会自动生成一个随机子域名或者用户自定义一个,总之无论如何都会有一个域名,这就会导致 ip 域名无效, 例如http://92832de0.1.1.1.1 -> localhost:80, 解决办法就是改源码,去掉随机生成的 subdomain。代码地址:src/ngrok/server/tunnel.go 第89 行

// src/ngrok/server/tunnel.go  #89 行
// Register for random URLt.url, err = tunnelRegistry.RegisterRepeat(func() string {return fmt.Sprintf("%s://%x.%s", protocol, rand.Int31(), vhost)}, t)

修改后:
return fmt.Sprintf("%s://%s", protocol, vhost)

注意: 删掉 %x. ,rand.Int31(), 以及该文件第一行引入的 math/rand,重新编译出服务端与客户端即可。这样不加 -subdomain 选项就不会有子域名

编译服务端(编译可能会很慢,慢慢等)

如果出现GnuTLS recv error (-110): The TLS connection was non-properly terminated,安装gnutls-bin

apt-get install gnutls-bin

如果出现go: go.mod file not found in current directory or any parent directory; see 'go help modules'
解决办法
开启go modules功能,命令行输入

#开启
go env -w GO111MODULE=on
#关闭
go env -w GO111MODULE=off

再不行关了在开。

生成客户端与服务端

<!--linux服务端/客户端-->
GOOS=linux GOARCH=386 make release-server (32位)
GOOS=linux GOARCH=amd64 make release-server(64位)GOOS=linux GOARCH=386 make release-client (32位)
GOOS=linux GOARCH=amd64 make release-client(64位)<!--Mac OS服务端/客户端-->
GOOS=darwin GOARCH=386 make release-server
GOOS=darwin GOARCH=amd64 make release-serverGOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client<!--windows服务端/客户端-->
GOOS=windows GOARCH=386 make release-server
GOOS=windows GOARCH=amd64 make release-serverGOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client

编译完成后在bin目录下应当有如下文件:

go-bindata  ngrok  ngrokd windows_amd64


ngrokd是公网阿里云服务器上运行的程序,ngrok是本地运行的程序,可以使用scp拷贝到本地或者使用xftp传输到本地

启动服务器

./bin/ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="xx.xx.xx.xx" -httpAddr=":8000" -httpsAddr=":8443"

参数说明:

-httpAddr=":8000" http服务的访问端口 默认80
-httpsAddr=":8443" https服务的访问端口 默认443
-tunnelAddr=":4443" 客户端连接服务端的端口 默认4443
注意事项,使用端口时,同时记得配置防火墙。

启动客户端

以windows为例:
/bin/windows_amd64/ngrok.exe文件传输到本地。
然后在当前目录下新建文件ngrok.cfg,注意与ngrok.exe在相同目录下。

server_addr: "xx.xx.xx.xx:4443"
trust_host_root_certs: false

然后新建脚本start.bat

ngrok -config=ngrok.cfg -log=ngrok.log  8080

8080就是本地端口的地址
norok.log 就是日志的日志的名称
双击start.bat即可。

使用tmux在后台运行程序

apt-get install tmux

新建tmux窗口(名称为ngrok)并进入,退出用Ctrl+D,或者直接关闭窗口

tmux new-session -s ngrok

连接tmux窗口

tmux attach-session -t ngrok

列出所有tmux窗口

tmux ls

关闭某个tmux窗口

tmux kill-window -t ngrok

云服务器+ngrok搭建内网穿透服务(只有公网ip无域名)相关推荐

  1. Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透

    Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透 服务端搭建 (用docker-compose 服务器端搭建) 前置条件 1. 一台有公网ip的服务器2. 记得在服务器安全组开放对应 ...

  2. 手把手教你,搭建内网穿透服务

    我的 GitHub 仓库:? 手把手教你搭建内网穿透服务,基于 lanproxy 穿透服务,为你深度定制了开箱即用的服务端和客户端 Docker 镜像. 在很多场景下内网穿透都是我们常常遇到的需求,之 ...

  3. 搭建内网穿透服务一步一步讲解教程

    我的 GitHub 仓库:? 手把手教你搭建内网穿透服务,基于 lanproxy 穿透服务,为你深度定制了开箱即用的服务端和客户端 Docker 镜像. 在很多场景下内网穿透都是我们常常遇到的需求,之 ...

  4. 【内网穿透服务器】利用云服务器+FRP实现内网穿透并远程连接服务器

    应用目的:远程管理或在外网访问内网机器上的服务 这里我们是使用云服务器+FRP实现内网穿透,达到远程连接服务器的目的 准备工作 云服务器 这里我们租用的是腾讯云的服务器,类似于下图的这种,配置选择可以 ...

  5. 使用Lanproxy搭建内网穿透服务完整教程

    本文主要记录了使用基于Docker的Lanproxy搭建内网穿透服务的过程,其中包括服务端和客户端的详细配置,并且基于宝塔面板的Nginx实现域名绑定.反向代理与SSL. 本文主要内容: 1. 解决的 ...

  6. 通过阿里云服务器(frp内网穿透工具),实现跨局域网ModbusTcp通信

    写在开头: 本文是基于windows系统,本文实现内网穿透需要下载的工具只有frp,所用云服务器为阿里云服务器. 笔者是某211高校在读研究生.本文是基于CSDN上其他前辈的文章,由我个人总结出的经验 ...

  7. cpolar:一款好用的内网穿透工具 - 无需公网IP

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  8. CentOS7下使用ngrok搭建内网穿透服务器

    目录 1.简介 1 2. 必要条件 2 2.1.ngrok服务器 2 2.2.域名 2 2.3.ngrok客户端 2 3. 安装依赖包 2 4. 安装golang 2 5. 下载ngrok源码 3 6 ...

  9. 详细教你用NPS搭建内网穿透服务,外出时轻薄本轻松连接家里的游戏主机远程玩耍

    文章目录 前言 一.NPS概述 NPS的原理 二.NPS服务器搭建 1.下载软件 2.云服务器配置 2.1.防火墙配置 2.2.用WinSCP远程上传服务文件 2.3.使用SSH终端安装启动 2.4. ...

最新文章

  1. Android studio使用心得(二)— 打包签名apk发布
  2. python从零基础到项目实战 当当_Python 3.x网络爬虫从零基础到项目实战
  3. Spring 属性配置
  4. error lnk2001: mysql_使用mysql时的链接错误 | 学步园
  5. linux命令大全 美pdf,Linux编程命令详解_10331298_(美)Richard..pdf-得力文库
  6. 产品小姐姐收到这个黑科技后,开心了一整天...
  7. -创建日期和时间数组--提取年月日-显示格式
  8. mac软件意外退出怎么解决_Mac 软件常见问题解决方法汇总
  9. php语法------04 php内置函数之与页面表单请求相关的内置函数对象
  10. 记录蚂蚁笔记服务端的搭建过程
  11. NumberFormat格式化数字
  12. 腾讯云即时通信IM知识详解
  13. jacket for matlab,Jacket for Matlab常见问题
  14. Flutter--高德地图使用指南
  15. 【sql server】已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行 解决方法总结
  16. 技术最好的时代,会是技术创业最好的时代吗?
  17. 基于JAVAHTML5运河古城网站计算机毕业设计源码+数据库+lw文档+系统+部署
  18. 带你搞明白单侧双侧T检验
  19. vivos机器人_【vivoNEXS评测】操作:人工智能无处不在 Jovi AI正在接管系统-中关村在线...
  20. HTML 标签 hr hr /

热门文章

  1. Intel 的AVX2指令集解读
  2. leetcode热题HOT100汇总——java题解已完结撒花
  3. 更改VisualStudio的字体大小
  4. python电路仿真001
  5. python对txt文本文件进行读写操作
  6. 2018WinDriver/Driver Wizar软件PCI通信转C#WinForm最全教程
  7. Photoshop切图----学习笔记
  8. 面向游戏玩家的六款最佳Linux发行版
  9. fatal error C1083: Cannot open include file: 'uxtheme.h'的解决
  10. Delphi:文本朗读器--文本转语音(基于百度TTS语音库)