
10分钟搭建属于自己的ngork服务器,实现内网穿透
1、什么是ngrok
ngrok 是一个使用go语言编写的反向代理软件,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。
可以去官方网站瞅瞅下载一个ngrok客户端测试下
使用官方的缺点:
1、速度比较慢
2、经常会连不上
3、网络不稳定经常会断开
2、国人搭建的ngrok
1、Ngrok国内免费服务器——糖果科技
2、http://www.ittun.com
3、Sunny-Ngrok内网转发
4、https://natapp.cn
5、http://ngrok.2bdata.com
6、FRP内网穿透工具(如果以上都不能稳定推荐使用FRP、配置比较ngrok简单、稳定)
如果你有推荐欢迎留言上墙
3、自己搭建
准备工作
1、一台拥有公网ip的服务器或者vps
2、把主域名解析到服务器上
比如:ngrok.javen.com
软件下载地址:
go的下载地址:http://www.golangtc.com/download(需要使用1.4.2)
git的下载地址:http://git-scm.com/downloads
绝对下载地址:https://www.kernel.org/pub/software/scm/git/git-2.9.3.tar.gz
ngrok克隆地址:https://github.com/inconshreveable/ngrok.git
详细的操作步骤可以参考以下几篇文章
http://www.sunnyos.com/article-show-48.html
http://www.cnblogs.com/pwenlee/p/5302880.html
http://blog.csdn.net/u013216667/article/details/50782084
4、使用开源的脚本安装环境以及编译客户端
https://github.com/sunnyos/ngrok
以上脚本执行就要输入域名,其他操作也需要再次输入域名
修改之后的版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
#!/bin/bash # -*- coding: UTF-8 -*- ############################################# #作者网名:Javen #修改:https://github.com/sunnyos/ngrok # ############################################# # 获取当前脚本执行路径 SELFPATH=$(cd "$(dirname "$0")"; pwd) GOOS=`go env | grep GOOS | awk -F\" '{print $2}'` GOARCH=`go env | grep GOARCH | awk -F\" '{print $2}'` echo '请输入一个域名' read DOMAIN install_yilai(){ yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++ unzip } # 安装git install_git(){ unstall_git if [ ! -f $SELFPATH/git-2.9.3.tar.gz ];then wget https://www.kernel.org/pub/software/scm/git/git-2.9.3.tar.gz fi tar zxvf git-2.9.3.tar.gz cd git-2.9.3 ./configure --prefix=/usr/local/git make make install ln -s /usr/local/git/bin/* /usr/bin/ rm -rf $SELFPATH/git-2.9.3 } # 卸载git unstall_git(){ rm -rf /usr/local/git rm -rf /usr/local/git/bin/git rm -rf /usr/local/git/bin/git-cvsserver rm -rf /usr/local/git/bin/gitk rm -rf /usr/local/git/bin/git-receive-pack rm -rf /usr/local/git/bin/git-shell rm -rf /usr/local/git/bin/git-upload-archive rm -rf /usr/local/git/bin/git-upload-pack } # 安装go install_go(){ cd $SELFPATH uninstall_go # 动态链接库,用于下面的判断条件生效 ldconfig # 判断操作系统位数下载不同的安装包 if [ $(getconf WORD_BIT) = '32' ] && [ $(getconf LONG_BIT) = '64' ];then # 判断文件是否已经存在 if [ ! -f $SELFPATH/go1.4.2.linux-amd64.tar.gz ];then wget http://www.golangtc.com/static/go/1.4.2/go1.4.2.linux-amd64.tar.gz fi tar zxvf go1.4.2.linux-amd64.tar.gz else if [ ! -f $SELFPATH/go1.4.2.linux-386.tar.gz ];then wget http://www.golangtc.com/static/go/1.4.2/go1.4.2.linux-386.tar.gz fi tar zxvf go1.4.2.linux-386.tar.gz fi mv go /usr/local/ ln -s /usr/local/go/bin/* /usr/bin/ } # 卸载go uninstall_go(){ rm -rf /usr/local/go rm -rf /usr/bin/go rm -rf /usr/bin/godoc rm -rf /usr/bin/gofmt } # 安装ngrok install_ngrok(){ uninstall_ngrok cd /usr/local if [ ! -f /usr/local/ngrok.zip ];then cd /usr/local/ wget http://www.sunnyos.com/ngrok.zip fi unzip ngrok.zip export GOPATH=/usr/local/ngrok/ export NGROK_DOMAIN=$DOMAIN cd 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 # 替换下载源地址 sed -i 's#code.google.com/p/log4go#github.com/keepeye/log4go#' /usr/local/ngrok/src/ngrok/log/logger.go cd /usr/local/go/src GOOS=$GOOS GOARCH=$GOARCH ./make.bash cd /usr/local/ngrok GOOS=$GOOS GOARCH=$GOARCH make release-server /usr/local/ngrok/bin/ngrokd -domain=$NGROK_DOMAIN -httpAddr=":80" } # 卸载ngrok uninstall_ngrok(){ rm -rf /usr/local/ngrok } # 编译客户端 compile_client(){ cd /usr/local/go/src GOOS=$1 GOARCH=$2 ./make.bash cd /usr/local/ngrok/ GOOS=$1 GOARCH=$2 make release-client } # 生成客户端 client(){ echo "1、Linux 32位" echo "2、Linux 64位" echo "3、Windows 32位" echo "4、Windows 64位" echo "5、Mac OS 32位" echo "6、Mac OS 64位" echo "7、Linux ARM" read num case "$num" in [1] ) compile_client linux 386 ;; [2] ) compile_client linux amd64 ;; [3] ) compile_client windows 386 ;; [4] ) compile_client windows amd64 ;; [5] ) compile_client darwin 386 ;; [6] ) compile_client darwin amd64 ;; [7] ) compile_client linux arm ;; *) echo "选择错误,退出";; esac } echo "请输入下面数字进行选择" echo "#############################################" echo "#作者网名:Javen" echo "#############################################" echo "------------------------" echo "1、全新安装" echo "2、安装依赖" echo "3、安装git" echo "4、安装go环境" echo "5、安装ngrok" echo "6、生成客户端" echo "7、卸载" echo "8、启动服务" echo "9、查看配置文件" echo "------------------------" read num case "$num" in [1] ) install_yilai install_git install_go install_ngrok ;; [2] ) install_yilai ;; [3] ) install_git ;; [4] ) install_go ;; [5] ) install_ngrok ;; [6] ) client ;; [7] ) unstall_git uninstall_go uninstall_ngrok ;; [8] ) echo "启动端口" read port /usr/local/ngrok/bin/ngrokd -domain=$DOMAIN -httpAddr=":$port" ;; [9] ) echo "#############################################" echo "#作者网名:Javen" echo "#创建ngrok.cfg文件并添加以下内容" echo server_addr: '"'$DOMAIN:4443'"' echo "trust_host_root_certs: false" echo "#############################################" echo "#############################################" echo "#Window启动脚本" echo "ngrok -config=ngrok.cfg -subdomain=你域名的前缀 本地映射的端口号" echo "ngrok -config=ngrok.cfg -subdomain=javen 80" echo "#############################################" echo "#############################################" echo "#Linux Mac 启动脚本" echo "./ngrok -config=./ngrok.cfg -subdomain=你域名的前缀 本地映射的端口号" echo "./ngrok -config=./ngrok.cfg -subdomain=javen 80" echo "#Linux Mac 后台启动脚本" echo "setsid ./ngrok -config=./ngrok.cfg -subdomain=javen 80" echo "#############################################" ;; *) echo "";; esac |
4.1 给脚本执行权限
1 |
chmod +x ngrok.sh |
4.2 执行脚本
1 |
./ngrok.sh |
再输入1进行安装,安装完成会启动服务默认是在80端口
/usr/local/ngrok/bin/ngrokd -domain=$NGROK_DOMAIN -httpAddr=":80"
如下图
4.3 生成客户端
生成客户端的目录在
1 |
/usr/local/ngrok/bin/ |
Mac 64位 darwin_amd64
Linux 64位 ngrok
windows 64位 windows_amd64
5、配置客户端测试
使用scp下载文件到本地
my_ngrok
,以Mac为例
1 |
scp root@服务器IP:/usr/local/ngrok/bin/darwin_amd64/ngrok /Users/Javen/Documents/dev/java/ngrok/my_ngrok |
下载完成之后并在文件夹中创建ngrok.cfg
文件并添加以下内容
1 2 |
server_addr: "你的域名:4443" trust_host_root_certs: false |
Window启动脚本
1 2 |
ngrok -config=ngrok.cfg -subdomain=你域名的前缀 本地映射的端口号 ngrok -config=ngrok.cfg -subdomain=javen 80 |
Mac Linux启动脚本
1 |
./ngrok -config=./ngrok.cfg -subdomain=test 8080 |
作者:Javen205
链接:http://www.jianshu.com/p/b81bb6a3c0b9
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
转载请注明:徐自远的乱七八糟小站 » 10分钟搭建属于自己的ngork服务器,实现内网穿透