内网穿透想必开发过微信的同志都很了解,大部分人选择网上寻找各种现成的,比如ngrok官网、ittun-ngrok、sunny-ngrok或者花生壳之类的。但是世界上没有免费的午餐,要不就是收费,要不就是免费但是偶尔会出现连接失败的问题(当然大多数时间是没有问题的)。

偶然,正在测试微信的某些功能,但是正在使用的ittun-ngrok连接失败了。导致测试无法进行,最终萌生出自己搭建一个ngrok服务器的想法。

1、必要条件

(1)服务器,用来搭建ngrok的服务器,必须有公网ip,并且可以正常访问(本次测试使用的是Ubuntu 16.04 64位)。
(2)域名,用来生成访问域名。

2、安装git 和Golang

apt-get install build-essential golang mercurial git

Golang,Go语言支持,因为Ngrok是基于Go语言编写的

3、下载源码,当然也可以不安装git,但是需要手动上传代码到需要的位置。

此处使用非官方地址,修复了部分包无法获取(摘自网络)

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

下载下来的目录结构

4、生成自签名证书
使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。

证书生成过程需要一个NGROK_BASE_DOMAIN。 以ngrok官方随机生成的地址xxx.ngrok.com为例,其NGROK_BASE_DOMAIN就是“ngrok.com”,如果你要提供服务的地址为“example.ngrok.xxx.com”,那NGROK_BASE_DOMAIN就应该 是“ngrok.xxx.com”。本次测试,由于没有多余的域名,我替换成自己的二级域名“weixin.yangjiace.xyz”。

cd ngrokNGROK_DOMAIN="weixin.yangjiace.xyz"openssl genrsa -out base.key 2048openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pemopenssl genrsa -out server.key 2048openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csropenssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt


执行完成后需要替换证书

cp base.pem assets/client/tls/ngrokroot.crt

5、编译

make release-server release-client

编译成功后会在bin目录下找到ngrokd和ngrok这两个文件。其中ngrokd 就是服务端程序了。

6、启动服务端

./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="weixin.yangjiace.xyz" -httpAddr=":80" -httpsAddr=":443"

httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。由于微信限制不能出现端口号,因此这个使用了80、443端口。

7、编译客户端

(1)windows

GOOS=windows GOARCH=amd64 make release-client  

(2)mac

GOOS=darwin GOARCH=amd64 make release-client

执行对应的命令会在bin目录下生成相对应的windows、mac目录,ngrok.exe就存放在对应目录下。将对应的ngrok.exe下载到本地。

8、设置本地客户端

(1)在同级目录下新建一个配置文件ngrok.cfg

server_addr: "weixin.yangjiace.xyz:4443"
trust_host_root_certs: false  

(2)同级目录下新建一个启动脚本startup.bat

@echo on
cd %cd%
#ngrok -proto=tcp 22
#ngrok start web
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=yjc 8080

其中,-config指向配置文件,-log存放日志文件位置,-subdomain为自定义的域名前缀。8080为端口号。

(3)启动,点击启动脚本startup.bat完成启动。

9、设置为系统程序,并后台运行。

服务器在运行ngrok时,如果关闭会话窗口,会导致服务中断,很显然这不是我们想要的结果,我们需要服务不断的在后台运行,当需要的时候在停止。

在/etc/systemd/system/目录下创建服务ngrok.service,内容为

[Unit]
Description=ngrok
After=network.target[Service]
ExecStart=/myweb/ngrok/bin/ngrokd -tlsKey=/myweb/ngrok/server.key -tlsCrt=/myweb/ngrok/server.crt -domain="weixin.yangjiace.xyz" -httpAddr=":80" -httpsAddr=":443"[Install]
WantedBy=multi-user.target

其中要根据自己的实际目录修改相对应的目录。

这样我们就可以了通过systemctl start ngrok.service启动服务。然后就可以愉快的玩耍了。

10分钟教你搭建自己的ngrok服务器相关推荐

  1. 10分钟教你搭建一个可公网访问的私人网盘,和付费网盘彻底say goodbye~

    今天偶然间看一个私人网盘的搭建,给大家一起分享一下.我这边是在windows环境下运行的. 检查配置 首先我们需要检查一下配置,需要本地安装有JDK,没有的话自行下载安装.如下所示则表示已经安装. 运 ...

  2. 10分钟教对象搭建了一个多人聊天室~

    Demo演示 体验demo链接: http://socket.vjscoder.com/websocket-chatroom/index.html#/ 去github查看完整源码: https://g ...

  3. 【Minecraft】10分钟教你搭建我的世界Java版开服教程【Linux服务器+MCSManager管理面板】

    一个人玩游戏没啥意思,和朋友一块联机呢,距离太远,家庭局域网宽带又没有公网ip,你的朋友没办法与你联机,然而你只需要一台服务器即可搞定了:但是很多用户没没接触过相关的内容,具体的该怎么操作呢?下面我将 ...

  4. 10分钟教你搭建一个好玩的Python全文搜索引擎

    有一个群友在群里问个如何快速搭建一个搜索引擎,在搜索之后我看到了这个 代码所在 Git:https://github.com/asciimoo/searx 官方很贴心,很方便的是已经提供了docker ...

  5. 10分钟教你搭建nexus,并把自己项目中的依赖上传到私服

    1.先安装maven 官网 https://maven.apache.org/download.cgi 2.下载方式 (1) 先去官网下载 查看以前maven的地址: https://archive. ...

  6. 10分钟教你在Windows上搭建Git服务器

    10分钟教你在Windows上搭建Git服务器 一.下载并安装jdk. 二.下载Gitblit 三.配置 四.运行 五.测试 一.下载并安装jdk. 安装JDK请移步到:2022年最新Java JDK ...

  7. 一分钟实现内网穿透(ngrok服务器搭建)

    简单来说内网穿透的目的是:让外网能访问你本地的应用,例如在外网打开你本地http://127.0.0.1指向的Web站点. 最近公司的花生壳到期了,要续费,发现价格一直在涨,都是5年以上的老用户,旗舰 ...

  8. 零基础小白10分钟用Python搭建小说网站!网友:我可以!

    都说Python什么都能做,本来我是不信的!直到我在CSDN站内看到了一件真事儿:一位博主贴出了自己10分钟用Python搭建小说网站的全过程!全程只用了2步操作,简直太秀了!!-- 第一步:爬取小说 ...

  9. 10分钟利用django搭建一个博客

    以前老是听说ROR开发有多快多块,网上还有朋友为了证明这,专门制作了10分钟利用rails框架搭建一个简易博客的教程,最近学习django框架,觉得django给开发者的便捷也很多,心血来潮来写个10 ...

最新文章

  1. 不是所有图像都值16x16个词,清华与华为提出动态ViT
  2. 利用Math.random做背景图像随机切换【前端开发技能必备系列】
  3. AIX操作系统启动详细介绍
  4. jaxb解析字符串xml_一个JAXB Nuance:字符串与枚举(受限制的XSD字符串)的枚举
  5. oracle手工收集awr报告_oracle手工生成AWR报告方法记录-阿里云开发者社区
  6. 去掉窗口_Flink 基础——窗口(Window)理论篇
  7. JS module的导出和导入 1
  8. 如何在 macOS Monterey 中更改光标的颜色样式?
  9. 循序渐进之Spring AOP(5) - 创建切面
  10. 078 numpy模块
  11. 计算机网络原理 谢希仁(第8版)第二章习题答案
  12. 万年历c语言程序微博,简易的万年历程序C语言
  13. 冰点还原精灵破解版|冰点还原精灵中文破解版下载(附冰点还原精灵注册机及许可证密钥)
  14. (完美解决)Word标题的编号出现一条黑色竖线
  15. PHP命名空间 namespace 及 use 的用法
  16. 人民币转换美金的c语言代码大全,人民币和美元大写格式在线工具,美元美金数字金额转换大写,外币大写金额...
  17. C盘Temp文件夹的内容可以删掉
  18. android自定义起止时间的时间刻度尺,Android 自定义View篇(六)实现时钟表盘效果...
  19. html网页中圆角边框的编写,Html实现边框圆角的实例详解
  20. adb、logcat

热门文章

  1. 分布式系统设计模式,你用过哪些?
  2. 用树莓派(等)为 USB Midi 键盘增添连接方式
  3. win10计算机的时间格式,win10系统更改excel时间和日期的格式的图文步骤
  4. MBR与GPT分区扫盲,希捷2T、3T硬盘测评(多图杀猫)
  5. 爱马仕橙JOYEAS休闲沙发
  6. keep-alive是什么?
  7. 07. 快速生成树协议
  8. ros:init()
  9. dijkstra算法及其堆优化
  10. Promise、Promise.all 和Promise.race用法