使用ngrok实现内网穿透
来源:互联网 发布:全国所有中小学数据库 编辑:程序博客网 时间:2024/05/21 10:04
在很多时候我需要把内网的东西暴露给外网,但是又没有外网IP。这个时候我们可以借助一些内网穿透工具达到这个目的,例如花生壳之类。但是这些收费的。ngrok是一个开源的内网穿透服务,可以在他的官网注册账号实现内网穿透,但是现在应被墙了。不过我们可以用他的源码在自己的VPS上搭建这个服务。ngrok可以做TCP端口转发,对于Linux可以将其映射到22端口进行SSH连接。Windows的远程桌面可以将其映射到3389端口来实现。同理,如果要做MySQL的远程连接,只需映射3306端口即可。本文详细记录了整个搭建过程。
编译Ngrok
以Ubuntu 14.04 为例
1、安装必备工具
sudo apt-get install build-essential mercurial git
2、配置Go环境
下载Go源码
curl -O https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz
注意:同过apt-get 方式下载的Go可能会由于版本低而导致无法编译
解压源码
tar xvf go1.6.linux-amd64.tar.gz
Go目录的权限改为root,并把它移动到/usr/local目录
sudo chown -R root:root ./gosudo mv go /usr/local
配置环境变量,打开.profile 文件
sudo vi ~/.profile
在末尾加入下面两行
export GOPATH=$HOME/work export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
编译使其生效
source ~/.profile
测试Go是否安装成功
go version
3、编译ngrok源码
git clone https://github.com/tutumcloud/ngrok.git ngrokcd ngrok
生成并替换源码里默认的证书,注意域名修改为你自己的
NGROK_DOMAIN="geekzph.com"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.crtcp base.pem assets/client/tls/ngrokroot.crt
编译
sudo make GOOS=linux release-server release-client
如果出现类似下面的错误
GOOS=”” GOARCH=”” go get github.com/jteeuwen/go-bindata/go-bindata
bin/go-bindata -nomemcopy -pkg=assets -tags=debug \
-debug=true \
-o=src/ngrok/client/assets/assets_debug.go \
assets/client/…
make: bin/go-bindata:command not found
make: * [client-assets] error 127
则可是
1、Go的环境变量没有设置好,需要重新检查环境变量
2、编译的时候GOOS没有设置为linux
如果编译成功的话,在ngrok/bin下应该有ngrok、ngrokd 两个可执行文件。
5、启动服务端
cd ngrok/sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="geekzph.com" -httpAddr=":9090" -httpsAddr=":9092"
现在服务端已经运行起来了,ngrokd 会开一个 4443 端口用来跟客户端通讯。
6、配置域名解析
我用的DNSPOD的域名解析服务
把域名泛解析到 VPS 上,记录值为VPS的IP地址。这时候访问geekzph.com,会出现
Tunnel geekzph.com:9091 not found
说明一切已经就绪了。
7、客户端
由于我们刚才编译的是linux的客户端,如果需要在Windows上使用的话还需要编译一个Windows的客户端
#切到go的安装目录 cd /usr/local/go/src #给Go编译器加上交叉编译windows/amd64程序的功能 GOOS=windows GOARCH=amd64 ./make.bash
开始编译
#切回到ngrok目录 cd - #执行如下命令编译Windows 64位客户端 GOOS=windows GOARCH=amd64 make release-client #以上GOARCH=amd64指的是编译为64位版本,如需32位改成GOARCH=386即可
Windows客户端ngrok就编译成功了,我们可以在./bin/windows_amd64/目录下找到执行文件ngrok.exe。使用scp命令将其从vps上下载到Windows上。
然后在ngrok目录下新建一个配置文件,例如命名为grok.cfg:
server_addr: gekezph.com:4443trust_host_root_certs: false
打开命令提示符,切到ngrok.exe所在目录,并执行以下命令。
#启动ngrok客户端#注意:如果不加参数-subdomain=test,将会随机自动分配子域名。#ngrok -config=ngrok.cfg -subdomain=test 80
这样就配置成功了!访问。test.geekzph.com就可以看到网站内容了。以上是映射的http服务,还以映射tcp服务,这样就能ssh,远程桌面等功能。
我们以远程桌面为例:
#这里以远程桌面时的3389端口为例 ngrok -proto=tcp 3389
之后出现下面提示
#客户端ngrok正常执行显示的内容 ngrok (Ctrl+C to quit) Tunnel Status online Version 1.7/1.7 Forwarding tcp://geekzph.com:98805 -> 127.0.0.1:22 Web Interface 127.0.0.1:4040 # Conn 0 Avg Conn Time 0.00ms
这个时候在远程桌面客户端的地址输入:geekzph.com:98805,就可以连接到位于内网的电脑了。
- 使用ngrok实现内网穿透
- 使用ngrok实现内网穿透
- Ngrok实现内网穿透
- MAC下使用ngrok实现内网穿透
- 配置ngrok 实现内网穿透
- 搭建 ngrok 实现内网穿透
- 树莓派通过ngrok实现内网穿透
- ngrok穿透内网
- ngrok内网穿透
- ngrok内网穿透
- ngrok 内网穿透
- 正确使用ngrok穿透内网
- 使用ngrok进行内网穿透
- 内网穿透神器ngrok使用
- 内网穿透工具ngrok的使用
- 简单ngrok内网穿透工具使用
- ngrok 内网穿透利器
- NGROK 内网穿透利器
- shiro 配置首先访问地址
- HashMap和HashTable的选择
- Ubuntu中安装JDK
- 表单按钮倒计时 》验证码 jQuery&&JavaScript
- cardboard的使用
- 使用ngrok实现内网穿透
- 关于python中@property的使用
- 浅析JavaScript的原型(prototype)(一)
- 合理使用nginxhash策略做更有意义的负载均衡
- linux下安装录制视频软件Simple Screen Recorder
- 《自控力》书摘
- LeetCode 21. Merge Two Sorted Lists
- 矩阵相乘
- spring security学习笔记1